TimeTrex/classes/modules/core/LogFactory.class.php

1130 lines
42 KiB
PHP

<?php
/*********************************************************************************
*
* TimeTrex is a Workforce Management program developed by
* TimeTrex Software Inc. Copyright (C) 2003 - 2021 TimeTrex Software Inc.
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU Affero General Public License version 3 as published by
* the Free Software Foundation with the addition of the following permission
* added to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED
* WORK IN WHICH THE COPYRIGHT IS OWNED BY TIMETREX, TIMETREX DISCLAIMS THE
* WARRANTY OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
* details.
*
*
* You should have received a copy of the GNU Affero General Public License along
* with this program; if not, see http://www.gnu.org/licenses or write to the Free
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA.
*
*
* You can contact TimeTrex headquarters at Unit 22 - 2475 Dobbin Rd. Suite
* #292 West Kelowna, BC V4T 2E9, Canada or at email address info@timetrex.com.
*
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU Affero General Public License version 3.
*
*
* In accordance with Section 7(b) of the GNU Affero General Public License
* version 3, these Appropriate Legal Notices must retain the display of the
* "Powered by TimeTrex" logo. If the display of the logo is not reasonably
* feasible for technical reasons, the Appropriate Legal Notices must display
* the words "Powered by TimeTrex".
*
********************************************************************************/
/**
* @package Core
*/
class LogFactory extends Factory {
protected $table = 'system_log';
protected $pk_sequence_name = 'system_log_id_seq'; //PK Sequence name
var $user_obj = null;
/**
* @param $name
* @param null $parent
* @return array|null
*/
function _getFactoryOptions( $name, $parent = null ) {
$retval = null;
switch ( $name ) {
case 'action':
$retval = [
5 => TTi18n::gettext( 'View' ), //For special cases like viewing documents. We don't want to log every view action as that would be hugely overkill.
10 => TTi18n::gettext( 'Add' ),
20 => TTi18n::gettext( 'Edit' ),
30 => TTi18n::gettext( 'Delete' ),
31 => TTi18n::gettext( 'Delete (F)' ), //Full Delete (Only used by PurgeDatabase, but must be left in otherwise blank actions may be visible.)
40 => TTi18n::gettext( 'UnDelete' ),
98 => TTi18n::gettext( 'Pre-Login' ), //Multifactor login, first factor
100 => TTi18n::gettext( 'Login' ), //Full login successful.
102 => TTi18n::gettext( 'ReAuthenticate' ), //ReAuthenticated
110 => TTi18n::gettext( 'Logout' ),
200 => TTi18n::gettext( 'Allow' ),
210 => TTi18n::gettext( 'Deny' ),
500 => TTi18n::gettext( 'Notice' ),
510 => TTi18n::gettext( 'Warning' ),
900 => TTi18n::gettext( 'Other' ),
];
break;
case 'table_name':
$retval = [
'authentication' => TTi18n::getText( 'Authentication' ),
'company' => TTi18n::getText( 'Company' ),
'branch' => TTi18n::getText( 'Branch' ),
'department' => TTi18n::getText( 'Department' ),
'currency' => TTi18n::getText( 'Currency' ),
'currency_rate' => TTi18n::getText( 'Currency Rate' ),
'accrual' => TTi18n::getText( 'Accrual' ),
'authorizations' => TTi18n::getText( 'Authorizations' ),
'request' => TTi18n::getText( 'Request' ),
'request_schedule' => TTi18n::getText( 'Request - Schedule' ),
//'message' => TTi18n::getText('Messages'), //Old version
'message_control' => TTi18n::getText( 'Messages' ),
'holidays' => TTi18n::getText( 'Holidays' ),
'bank_account' => TTi18n::getText( 'Bank Account' ),
'roe' => TTi18n::getText( 'Record of Employment' ),
'station' => TTi18n::getText( 'Station' ),
'station_user_group' => TTi18n::getText( 'Station Employee Group' ),
'station_branch' => TTi18n::getText( 'Station Branch' ),
'station_department' => TTi18n::getText( 'Station Department' ),
'station_include_user' => TTi18n::getText( 'Station Include Employee' ),
'station_exclude_user' => TTi18n::getText( 'Station Exclude Employee' ),
'punch' => TTi18n::getText( 'Punch' ),
'punch_control' => TTi18n::getText( 'Punch Control' ),
'exception' => TTi18n::getText( 'Exceptions' ),
'schedule' => TTi18n::getText( 'Schedule' ),
'custom_field_control' => TTi18n::getText( 'Custom Field' ),
'system_setting' => TTi18n::getText( 'System Setting' ),
'cron' => TTi18n::getText( 'Maintenance Jobs' ),
'permission_control' => TTi18n::getText( 'Permission Groups' ),
'permission_user' => TTi18n::getText( 'Permission Employees' ),
'permission' => TTi18n::getText( 'Permissions' ),
'policy_group' => TTi18n::getText( 'Policy Group' ),
'policy_group_user' => TTi18n::getText( 'Policy Group Employees' ),
'schedule_policy' => TTi18n::getText( 'Schedule Policy' ),
'round_interval_policy' => TTi18n::getText( 'Rounding Policy' ),
'meal_policy' => TTi18n::getText( 'Meal Policy' ),
'break_policy' => TTi18n::getText( 'Break Policy' ),
'accrual_policy_account' => TTi18n::getText( 'Accrual Account' ),
'accrual_policy' => TTi18n::getText( 'Accrual Policy' ),
'accrual_policy_milestone' => TTi18n::getText( 'Accrual Policy Milestone' ),
'accrual_policy_user_modifier' => TTi18n::getText( 'Accrual Policy Employee Modifier' ),
'over_time_policy' => TTi18n::getText( 'Overtime Policy' ),
'premium_policy' => TTi18n::getText( 'Premium Policy' ),
'premium_policy_branch' => TTi18n::getText( 'Premium Policy Branch' ),
'premium_policy_department' => TTi18n::getText( 'Premium Policy Department' ),
'premium_policy_job_group' => TTi18n::getText( 'Premium Policy Job Group' ),
'premium_policy_job' => TTi18n::getText( 'Premium Policy Job' ),
'premium_policy_job_item_group' => TTi18n::getText( 'Premium Policy Task Group' ),
'premium_policy_job_item' => TTi18n::getText( 'Premium Policy Task' ),
'absence_policy' => TTi18n::getText( 'Absense Policy' ),
'exception_policy_control' => TTi18n::getText( 'Exception Policy (Control)' ),
'exception_policy' => TTi18n::getText( 'Exception Policy' ),
'holiday_policy' => TTi18n::getText( 'Holiday Policy' ),
'holiday_policy_recurring_holiday' => TTi18n::getText( 'Holiday Policy (Recurring Holiday)' ),
'regular_time_policy' => TTi18n::getText( 'Regular Time Policy' ),
'pay_formula_policy' => TTi18n::getText( 'Pay Formula Policy' ),
'contributing_pay_code_policy' => TTi18n::getText( 'Contributing Pay Code Policy' ),
'contributing_shift_policy' => TTi18n::getText( 'Contributing Shift Policy' ),
'pay_code' => TTi18n::getText( 'Pay Code' ),
'pay_period' => TTi18n::getText( 'Pay Period' ),
'pay_period_schedule' => TTi18n::getText( 'Pay Period Schedule' ),
'pay_period_schedule_user' => TTi18n::getText( 'Pay Period Schedule Employees' ),
'pay_period_time_sheet_verify' => TTi18n::getText( 'TimeSheet Verify' ),
'pay_stub' => TTi18n::getText( 'Pay Stub' ),
'pay_stub_entry' => TTi18n::getText( 'Pay Stub Entry' ),
'pay_stub_transaction' => TTi18n::getText( 'Pay Stub Transaction' ),
'government_document' => TTi18n::getText( 'Government Document' ),
'pay_stub_amendment' => TTi18n::getText( 'Pay Stub Amendment' ),
'pay_stub_entry_account' => TTi18n::getText( 'Pay Stub Account' ),
'pay_stub_entry_account_link' => TTi18n::getText( 'Pay Stub Account Linking' ),
'recurring_holiday' => TTi18n::getText( 'Recurring Holiday' ),
'recurring_ps_amendment' => TTi18n::getText( 'Recurring PS Amendment' ),
'recurring_ps_amendment_user' => TTi18n::getText( 'Recurring PS Amendment Employees' ),
'recurring_schedule_control' => TTi18n::getText( 'Recurring Schedule' ),
//'recurring_schedule_user' => TTi18n::getText( 'Recurring Schedule Employees' ),
'recurring_schedule_template_control' => TTi18n::getText( 'Recurring Schedule Template' ),
'recurring_schedule_template' => TTi18n::getText( 'Recurring Schedule Week' ),
'user_date_total' => TTi18n::getText( 'Employee TimeSheet/Hours' ),
'user_default' => TTi18n::getText( 'New Hire Defaults' ),
'user_generic_data' => TTi18n::getText( 'Employee Generic Data' ),
'user_preference' => TTi18n::getText( 'Employee Preference' ),
'user_preference_notification' => TTi18n::getText( 'Employee Preference Notification' ),
'ui_kit' => TTi18n::getText( 'UI Kit Sample' ),
'ui_kit_child' => TTi18n::getText( 'UI Kit Child Sample' ),
'users' => TTi18n::getText( 'Employee' ),
'user_identification' => TTi18n::getText( 'Employee Identification' ),
'company_deduction' => TTi18n::getText( 'Tax / Deduction' ),
'company_deduction_pay_stub_entry_account' => TTi18n::getText( 'Tax / Deduction PS Accounts' ),
'user_deduction' => TTi18n::getText( 'Employee Deduction' ),
'user_title' => TTi18n::getText( 'Employee Title' ),
'user_wage' => TTi18n::getText( 'Employee Wage' ),
'hierarchy_control' => TTi18n::getText( 'Hierarchy' ),
'hierarchy_object_type' => TTi18n::getText( 'Hierarchy Object Type' ),
'hierarchy_user' => TTi18n::getText( 'Hierarchy Subordinate' ),
'hierarchy_level' => TTi18n::getText( 'Hierarchy Superior' ),
'hierarchy' => TTi18n::getText( 'Hierarchy Tree' ),
'user_report_data' => TTi18n::getText( 'Reports' ),
'report_schedule' => TTi18n::getText( 'Report Schedule' ),
'report_custom_column' => TTi18n::getText( 'Report Custom Column' ),
'job' => TTi18n::getText( 'Job' ),
'job_user_branch' => TTi18n::getText( 'Job Branch' ),
'job_user_department' => TTi18n::getText( 'Job Department' ),
'job_user_group' => TTi18n::getText( 'Job Group' ),
'job_include_user' => TTi18n::getText( 'Job Include Employee' ),
'job_exclude_user' => TTi18n::getText( 'Job Exclude Employee' ),
'job_job_item_group' => TTi18n::getText( 'Job Task Group' ),
'job_include_job_item' => TTi18n::getText( 'Job Include Task' ),
'job_exclude_job_item' => TTi18n::getText( 'Job Exclude Task' ),
'job_item' => TTi18n::getText( 'Job Task' ),
'job_item_amendment' => TTi18n::getText( 'Job Task Amendment' ),
'punch_tag' => TTi18n::getText( 'Punch Tag' ),
'punch_tag_group' => TTi18n::getText( 'Punch Tag Group' ),
'document' => TTi18n::getText( 'Document' ),
'document_revision' => TTi18n::getText( 'Document Revision' ),
'client' => TTi18n::getText( 'Client' ),
'client_contact' => TTi18n::getText( 'Client Contact' ),
'client_payment' => TTi18n::getText( 'Client Payment' ),
'invoice' => TTi18n::getText( 'Invoice' ),
'invoice_config' => TTi18n::getText( 'Invoice Settings' ),
'invoice_transaction' => TTi18n::getText( 'Invoice Transaction' ),
'product' => TTi18n::getText( 'Product' ),
'product_price' => TTi18n::getText( 'Product Price Bracket' ),
'product_tax_policy' => TTi18n::getText( 'Product Tax Policy' ),
'tax_area_policy' => TTi18n::getText( 'Invoice Tax Area Policy' ),
'tax_policy' => TTi18n::getText( 'Invoice Tax Policy' ),
'user_contact' => TTi18n::getText( 'Employee Contact' ),
'user_expense' => TTi18n::getText( 'Expense' ),
'expense_policy' => TTi18n::getText( 'Expense Policy' ),
'user_review' => TTi18n::getText( 'Review' ),
'user_review_control' => TTi18n::getText( 'Review (Control)' ),
'kpi' => TTi18n::getText( 'Key Performance Indicator' ),
'qualification' => TTi18n::getText( 'Qualification' ),
'user_skill' => TTi18n::getText( 'Skill' ),
'user_education' => TTi18n::getText( 'Education' ),
'user_membership' => TTi18n::getText( 'Memberships' ),
'user_license' => TTi18n::getText( 'Licenses' ),
'user_language' => TTi18n::getText( 'Languages' ),
'job_vacancy' => TTi18n::getText( 'Job Vacancy' ),
'job_applicant' => TTi18n::getText( 'Job Applicant' ),
'job_application' => TTi18n::getText( 'Job Application' ),
'job_applicant_location' => TTi18n::getText( 'Job Applicant Location' ),
'job_applicant_employment' => TTi18n::getText( 'Job Applicant Employment' ),
'job_applicant_reference' => TTi18n::getText( 'Job Applicant Reference' ),
'job_applicant_skill' => TTi18n::getText( 'Job Applicant Skill' ),
'job_applicant_education' => TTi18n::getText( 'Job Applicant Education' ),
'job_applicant_license' => TTi18n::getText( 'Job Applicant Licenses' ),
'job_applicant_language' => TTi18n::getText( 'Job Applicant Languages' ),
'job_applicant_membership' => TTi18n::getText( 'Job Applicant Memberships' ),
'ethnic_group' => TTi18n::getText( 'Ethnic Group' ),
'legal_entity' => TTi18n::getText( 'Legal Entity' ),
'payroll_remittance_agency' => TTi18n::getText( 'Payroll Remittance Agency' ),
'payroll_remittance_agency_event' => TTi18n::getText( 'Payroll Remittance Agency Event' ),
'remittance_source_account' => TTi18n::getText( 'Remittance Source Account' ),
'remittance_destination_account' => TTi18n::getText( 'Employee Payment Method' ),
'geo_fence' => TTi18n::getText( 'GEO Fence' ),
];
asort( $retval ); //Sort by name so its easier to find objects.
break;
case 'table_name_permission_map':
$retval = [
'authentication' => [ 'user' ],
'company' => [ 'company' ],
'branch' => [ 'branch' ],
'department' => [ 'department' ],
'currency' => [ 'currency' ],
'currency_rate' => [ 'currency' ],
'accrual' => [ 'accrual' ],
'authorizations' => [ 'user' ],
'request' => [ 'request' ],
'request_schedule' => [ 'request' ],
'message' => [ 'message' ],
'message_control' => [ 'message' ],
'holidays' => [ 'holiday_policy' ],
'bank_account' => [ 'user' ],
'roe' => [ 'user' ],
'station' => [ 'station' ],
'station_user_group' => [ 'station' ],
'station_branch' => [ 'station' ],
'station_department' => [ 'station' ],
'station_include_user' => [ 'station' ],
'station_exclude_user' => [ 'station' ],
'punch' => [ 'punch' ],
'punch_control' => [ 'punch' ],
'exception' => [ 'punch' ],
'schedule' => [ 'schedule' ],
'custom_field_control' => [ 'company' ],
'system_setting' => [ 'company' ],
'cron' => [ 'company' ],
'permission_control' => [ 'permission' ],
'permission_user' => [ 'permission' ],
'permission' => [ 'permission' ],
'policy_group' => [ 'policy_group' ],
'policy_group_user' => [ 'policy_group' ],
'schedule_policy' => [ 'schedule_policy' ],
'round_interval_policy' => [ 'round_policy' ],
'meal_policy' => [ 'meal_policy' ],
'break_policy' => [ 'break_policy' ],
'accrual_policy_account' => [ 'accrual_policy' ],
'accrual_policy' => [ 'accrual_policy' ],
'accrual_policy_milestone' => [ 'accrual_policy' ],
'accrual_policy_user_modifier' => [ 'accrual_policy' ],
'over_time_policy' => [ 'over_time_policy' ],
'premium_policy' => [ 'premium_policy' ],
'premium_policy_branch' => [ 'premium_policy' ],
'premium_policy_department' => [ 'premium_policy' ],
'premium_policy_job_group' => [ 'premium_policy' ],
'premium_policy_job' => [ 'premium_policy' ],
'premium_policy_job_item_group' => [ 'premium_policy' ],
'premium_policy_job_item' => [ 'premium_policy' ],
'absence_policy' => [ 'absence_policy' ],
'exception_policy_control' => [ 'exception_policy' ],
'exception_policy' => [ 'exception_policy' ],
'holiday_policy' => [ 'holiday_policy' ],
'holiday_policy_recurring_holiday' => [ 'holiday_policy' ],
'regular_time_policy' => [ 'regular_time_policy' ],
'pay_formula_policy' => [ 'pay_formula_policy' ],
'contributing_pay_code_policy' => [ 'contributing_pay_code_policy' ],
'contributing_shift_policy' => [ 'contributing_shift_policy' ],
'pay_code' => [ 'pay_code' ],
'pay_period' => [ 'pay_period_schedule' ],
'pay_period_schedule' => [ 'pay_period_schedule' ],
'pay_period_schedule_user' => [ 'pay_period_schedule' ],
'pay_period_time_sheet_verify' => [ 'user' ],
'pay_stub' => [ 'pay_stub' ],
'pay_stub_entry' => [ 'pay_stub' ],
'pay_stub_transaction' => [ 'pay_stub' ],
'government_document' => [ 'government_document' ],
'pay_stub_amendment' => [ 'pay_stub_amendment' ],
'pay_stub_entry_account' => [ 'pay_stub_account' ],
'pay_stub_entry_account_link' => [ 'pay_stub_account' ],
'recurring_holiday' => [ 'pay_stub_amendment' ],
'recurring_ps_amendment' => [ 'pay_stub_amendment' ],
'recurring_ps_amendment_user' => [ 'pay_stub_amendment' ],
'recurring_schedule_control' => [ 'recurring_schedule' ],
//'recurring_schedule_user' => [ 'recurring_schedule' ],
'recurring_schedule_template_control' => [ 'recurring_schedule_template' ],
'recurring_schedule_template' => [ 'recurring_schedule_template' ],
'user_date_total' => [ 'punch' ],
'user_default' => [ 'company' ],
'user_generic_data' => [ 'user' ],
'user_preference' => [ 'user_preference' ],
'user_preference_notification' => [ 'user_preference' ],
'ui_kit' => [ 'user_preference' ],
'ui_kit_child' => [ 'user_preference' ],
'users' => [ 'user' ],
'user_group' => [ 'user' ],
'user_identification' => [ 'user' ],
'company_deduction' => [ 'company_tax_deduction' ],
'company_deduction_pay_stub_entry_account' => [ 'company_tax_deduction' ],
'user_deduction' => [ 'user_tax_deduction' ],
'user_title' => [ 'user' ],
'user_wage' => [ 'wage' ],
'hierarchy_control' => [ 'hierarchy' ],
'hierarchy_object_type' => [ 'hierarchy' ],
'hierarchy_user' => [ 'hierarchy' ],
'hierarchy_level' => [ 'hierarchy' ],
'hierarchy' => [ 'hierarchy' ],
'user_report_data' => [ 'user' ],
'report_schedule' => [ 'user' ],
'report_custom_column' => [ 'report_custom_column' ],
'job' => [ 'job' ],
'job_group' => [ 'job' ],
'job_user_branch' => [ 'job' ],
'job_user_department' => [ 'job' ],
'job_user_group' => [ 'job' ],
'job_include_user' => [ 'job' ],
'job_exclude_user' => [ 'job' ],
'job_job_item_group' => [ 'job' ],
'job_include_job_item' => [ 'job' ],
'job_exclude_job_item' => [ 'job' ],
'job_item' => [ 'job_item' ],
'job_item_group' => [ 'job_item' ],
'job_item_amendment' => [ 'job' ], //This is part of the Edit Job view.
'punch_tag' => [ 'punch_tag' ],
'punch_tag_group' => [ 'punch_tag_group' ],
'document' => [ 'document' ],
'document_group' => [ 'document' ],
'document_revision' => [ 'document' ],
'client' => [ 'client' ],
'client_group' => [ 'client' ],
'client_contact' => [ 'client' ],
'client_payment' => [ 'client_payment' ],
'invoice' => [ 'invoice' ],
'invoice_config' => [ 'invoice_config' ],
'invoice_transaction' => [ 'invoice' ],
'product' => [ 'product' ],
'product_group' => [ 'product' ],
'product_price' => [ 'product' ],
'product_tax_policy' => [ 'product' ],
'tax_area_policy' => [ 'area_policy' ],
'tax_policy' => [ 'tax_policy' ],
'transaction' => [ 'transaction' ],
'user_contact' => [ 'user_contact' ],
'user_expense' => [ 'user_expense' ],
'expense_policy' => [ 'expense_policy' ],
'user_review' => [ 'user_review' ],
'user_review_control' => [ 'user_review' ],
'kpi' => [ 'kpi' ],
'kpi_group' => [ 'kpi' ],
'qualification' => [ 'qualification' ],
'qualification_group' => [ 'qualification' ],
'user_skill' => [ 'user_skill' ],
'user_education' => [ 'user_education' ],
'user_membership' => [ 'user_membership' ],
'user_license' => [ 'user_license' ],
'user_language' => [ 'user_language' ],
'job_vacancy' => [ 'job_vacancy' ],
'job_applicant' => [ 'job_applicant' ],
'job_application' => [ 'job_application' ],
'job_applicant_location' => [ 'job_applicant' ],
'job_applicant_employment' => [ 'job_applicant' ],
'job_applicant_reference' => [ 'job_applicant' ],
'job_applicant_skill' => [ 'job_applicant' ],
'job_applicant_education' => [ 'job_applicant' ],
'job_applicant_license' => [ 'job_applicant' ],
'job_applicant_language' => [ 'job_applicant' ],
'job_applicant_membership' => [ 'job_applicant' ],
'ethnic_group' => [ 'user' ],
'legal_entity' => [ 'legal_entity' ],
'payroll_remittance_agency' => [ 'payroll_remittance_agency' ],
'payroll_remittance_agency_event' => [ 'payroll_remittance_agency' ],
'remittance_source_account' => [ 'remittance_source_account' ],
'remittance_destination_account' => [ 'remittance_destination_account' ],
'geo_fence' => [ 'geo_fence' ],
];
break;
case 'columns':
$retval = [
'-1010-first_name' => TTi18n::gettext( 'First Name' ),
'-1020-last_name' => TTi18n::gettext( 'Last Name' ),
'-1100-date' => TTi18n::gettext( 'Date' ),
'-1110-object' => TTi18n::gettext( 'Object' ),
'-1120-action' => TTi18n::gettext( 'Action' ),
'-1130-description' => TTi18n::gettext( 'Description' ),
];
break;
case 'list_columns':
$retval = Misc::arrayIntersectByKey( $this->getOptions( 'default_display_columns' ), Misc::trimSortPrefix( $this->getOptions( 'columns' ) ) );
break;
case 'default_display_columns': //Columns that are displayed by default.
$retval = [
'first_name',
'last_name',
'date',
'object',
'action',
'description',
];
break;
}
return $retval;
}
/**
* @param $data
* @return array
*/
function _getVariableToFunctionMap( $data ) {
$variable_function_map = [
'id' => 'ID',
'user_id' => 'User',
'first_name' => false,
'last_name' => false,
'object_id' => 'Object',
'table_name' => 'TableName',
'object' => false, //Actually the display table name.
'action_id' => 'Action',
'action' => false,
'description' => 'Description',
'date' => 'Date',
'details' => 'Details',
'deleted' => 'Deleted',
];
return $variable_function_map;
}
/**
* @return null
*/
function getUserObject() {
if ( is_object( $this->user_obj ) ) {
return $this->user_obj;
} else {
$ulf = TTnew( 'UserListFactory' ); /** @var UserListFactory $ulf */
$this->user_obj = $ulf->getById( $this->getUser() )->getCurrent();
return $this->user_obj;
}
}
/**
* @return bool|string
*/
function getLink() {
$link = false;
//Only show links on add/edit/allow actions.
if ( !in_array( $this->getAction(), [ 10, 20, 200 ] ) ) {
return $link;
}
switch ( $this->getTableName() ) {
case 'authentication':
break;
case 'company':
$link = 'company/EditCompany.php?id=' . $this->getObject();
break;
case 'branch':
$link = 'branch/EditBranch.php?id=' . $this->getObject();
break;
case 'department':
$link = 'department/EditDepartment.php?id=' . $this->getObject();
break;
case 'currency':
$link = 'currency/EditCurrency.php?id=' . $this->getObject();
break;
case 'accrual':
//$link = 'currency/EditCurrency.php?id='. $this->getObject();
break;
case 'authorizations':
break;
case 'request':
$link = 'request/ViewRequest.php?id=' . $this->getObject();
break;
case 'permission_control':
$link = 'permission/EditPermissionControl.php?id=' . $this->getObject();
break;
case 'holidays':
break;
case 'bank_account':
break;
case 'roe':
break;
case 'station':
$link = 'station/EditStation.php?id=' . $this->getObject();
break;
case 'punch':
break;
case 'custom_field_control':
break;
case 'system_setting':
break;
case 'cron':
break;
case 'policy_group':
$link = 'policy/EditPolicyGroup.php?id=' . $this->getObject();
break;
case 'schedule_policy':
$link = 'policy/EditSchedulePolicy.php?id=' . $this->getObject();
break;
case 'round_interval_policy':
$link = 'policy/EditRoundIntervalPolicy.php?id=' . $this->getObject();
break;
case 'meal_policy':
$link = 'policy/EditMealPolicy.php?id=' . $this->getObject();
break;
case 'accrual_policy':
$link = 'policy/EditAccrualPolicy.php?id=' . $this->getObject();
break;
case 'over_time_policy':
$link = 'policy/EditOverTimePolicy.php?id=' . $this->getObject();
break;
case 'premium_policy':
$link = 'policy/EditPremiumTimePolicy.php?id=' . $this->getObject();
break;
case 'absence_policy':
$link = 'policy/EditAbsencePolicy.php?id=' . $this->getObject();
break;
case 'exception_policy_control':
$link = 'policy/EditExceptionControlPolicy.php?id=' . $this->getObject();
break;
case 'holiday_policy':
$link = 'policy/EditHolidayPolicy.php?id=' . $this->getObject();
break;
case 'pay_period':
$link = 'payperiod/ViewPayPeriod.php?pay_period_id=' . $this->getObject();
break;
case 'pay_period_schedule':
$link = 'payperiod/EditPayPeriodSchedule.php?id=' . $this->getObject();
break;
case 'pay_period_time_sheet_verify':
break;
case 'pay_stub':
break;
case 'pay_stub_amendment':
$link = 'pay_stub_amendment/EditPayStubAmendment.php?id=' . $this->getObject();
break;
case 'pay_stub_entry_account':
$link = 'pay_stub/EditPayStubEntryAccount.php?id=' . $this->getObject();
break;
case 'pay_stub_entry_account_link':
break;
case 'recurring_holiday':
$link = 'policy/EditRecurringHoliday.php?id=' . $this->getObject();
break;
case 'recurring_ps_amendment':
$link = 'pay_stub_amendment/EditRecurringPayStubAmendment.php?id=' . $this->getObject();
break;
case 'recurring_schedule_control':
$link = 'schedule/EditRecurringSchedule.php?id=' . $this->getObject();
break;
case 'recurring_schedule_template_control':
$link = 'schedule/EditRecurringScheduleTemplate.php?id=' . $this->getObject();
break;
case 'user_date_total':
break;
case 'user_default':
$link = 'users/EditUserDefault.php?id=' . $this->getObject();
break;
case 'user_generic_data':
break;
case 'user_preference':
$link = 'users/EditUserPreference.php?user_id=' . $this->getObject();
break;
case 'users':
$link = 'users/EditUser.php?id=' . $this->getObject();
break;
case 'company_deduction':
$link = 'company/EditCompanyDeduction.php?id=' . $this->getObject();
break;
case 'user_deduction':
$link = 'users/EditUserDeduction.php?id=' . $this->getObject();
break;
case 'user_title':
$link = 'users/EditUserTitle.php?id=' . $this->getObject();
break;
case 'user_wage':
$link = 'users/EditUserWage.php?id=' . $this->getObject();
break;
case 'job':
$link = 'job/EditJob.php?id=' . $this->getObject();
break;
case 'job_item':
$link = 'job_item/EditJobItem.php?id=' . $this->getObject();
break;
case 'job_item_amendment':
$link = 'job_item/EditJobItemAmendment.php?id=' . $this->getObject();
break;
case 'document':
$link = 'document/EditDocument.php?document_id=' . $this->getObject();
break;
case 'document_revision':
break;
case 'client':
$link = 'client/EditClient.php?client_id=' . $this->getObject();
break;
case 'client_contact':
$link = 'client/EditClientContact.php?id=' . $this->getObject();
break;
case 'client_payment':
$link = 'client/EditClientPayment.php?id=' . $this->getObject();
break;
case 'invoice':
$link = 'invoice/EditInvoice.php?id=' . $this->getObject();
break;
case 'invoice_config':
$link = 'invoice/EditInvoiceConfig.php';
break;
case 'invoice_transaction':
$link = 'invoice/EditTransaction.php?id=' . $this->getObject();
break;
case 'product':
$link = 'product/EditProduct.php?id=' . $this->getObject();
break;
case 'tax_area_policy':
$link = 'invoice_policy/EditTaxAreaPolicy.php?id=' . $this->getObject();
break;
case 'tax_policy':
$link = 'invoice_policy/EditTaxPolicy.php?id=' . $this->getObject();
break;
}
if ( $link !== false ) {
$link = Environment::getBaseURL() . $link;
}
return $link;
}
/**
* @return mixed
*/
function getUser() {
return $this->getGenericDataValue( 'user_id' );
}
/**
* @param string $value UUID
* @return bool
*/
function setUser( $value ) {
$value = TTUUID::castUUID( $value );
return $this->setGenericDataValue( 'user_id', $value );
}
/**
* @return bool|mixed
*/
function getObject() {
return $this->getGenericDataValue( 'object_id' );
}
/**
* @param string $value UUID
* @return bool
*/
function setObject( $value ) {
$value = TTUUID::castUUID( $value );
return $this->setGenericDataValue( 'object_id', $value );
}
/**
* @return bool|mixed
*/
function getTableName() {
return $this->getGenericDataValue( 'table_name' );
}
/**
* @param $value
* @return bool
*/
function setTableName( $value ) {
$value = trim( $value );
return $this->setGenericDataValue( 'table_name', $value );
}
/**
* @return int
*/
function getAction() {
return $this->getGenericDataValue( 'action_id' );
}
/**
* @param $value
* @return bool
*/
function setAction( $value ) {
$value = (int)trim( $value );
return $this->setGenericDataValue( 'action_id', $value );
}
/**
* @return mixed
*/
function getDescription() {
return $this->getGenericDataValue( 'description' );
}
/**
* @param $value
* @return bool
*/
function setDescription( $value ) {
$value = trim( $value );
return $this->setGenericDataValue( 'description', $value );
}
/**
* @return bool|mixed
*/
function getDate() {
return $this->getGenericDataValue( 'date' );
}
/**
* @param int $value EPOCH
* @return bool
*/
function setDate( $value = null ) {
$value = ( !is_int( $value ) && $value !== null ) ? trim( $value ) : $value;//Dont trim integer values, as it changes them to strings.
if ( $value == '' ) {
$value = TTDate::getTime();
}
return $this->setGenericDataValue( 'date', $value );
}
/**
* @param string $object_id UUID
* @param int $action_id
* @param null $description
* @param string $user_id UUID
* @param null $table
* @return bool
*/
function addEntry( $object_id, $action_id, $description = null, $user_id = null, $table = null ) {
if ( $object_id == '' ) {
return false;
}
if ( $action_id == '' ) {
return false;
}
if ( $user_id == '' ) {
global $current_user;
if ( is_object( $current_user ) ) {
$user_id = $current_user->getId();
} else {
$user_id = TTUUID::getZeroID();
}
}
if ( $table == '' ) {
$table = $this->getTable();
}
$this->setObject( $object_id );
$this->setAction( $action_id );
$this->setTable( $table );
$this->setUser( TTUUID::castUUID( $user_id ) );
$this->setDescription( $description );
if ( $this->isValid() === true ) {
$this->Save();
return true;
}
return false;
}
/**
* @return array|bool|mixed
*/
function getDetails() {
if ( getTTProductEdition() >= TT_PRODUCT_PROFESSIONAL && $this->isNew() == false && is_object( $this->getUserObject() ) ) {
$global_table_map = [];
//Get class for this table
Debug::Text( 'Table: ' . $this->getTableName(), __FILE__, __LINE__, __METHOD__, 10 );
require_once( Environment::getBasePath() . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'TableMap.inc.php' );
if ( isset( $global_table_map[$this->getTableName()] ) ) {
$table_class = $global_table_map[$this->getTableName()];
$class = new $table_class;
Debug::Text( 'Table Class: ' . $table_class, __FILE__, __LINE__, __METHOD__, 10 );
$ldlf = TTnew( 'LogDetailListFactory' ); /** @var LogDetailListFactory $ldlf */
$ldlf->getBySystemLogIdAndCompanyId( $this->getID(), $this->getUserObject()->getCompany() );
if ( $ldlf->getRecordCount() > 0 ) {
$detail_row = [];
foreach ( $ldlf as $ld_obj ) {
if ( TTUUID::isUUID( $this->getObject() ) && $this->getObject() != TTUUID::getZeroID() && $this->getObject() != TTUUID::getNotExistID() ) {
$class->setID( $this->getObject() ); //Set the object id of the class so we can reference it later if needed.
}
$detail_row[] = [
'field' => $ld_obj->getField(),
'display_field' => LogDetailDisplay::getDisplayField( $class, $ld_obj->getField() ),
'old_value' => LogDetailDisplay::getDisplayOldValue( $class, $ld_obj->getField(), $ld_obj->getOldValue() ),
'new_value' => LogDetailDisplay::getDisplayNewValue( $class, $ld_obj->getField(), $ld_obj->getNewValue() ),
];
}
$detail_row = Sort::multiSort( $detail_row, 'display_field' );
//Debug::Arr( $detail_row, 'Detail Row: ', __FILE__, __LINE__, __METHOD__, 10);
return $detail_row;
}
}
}
Debug::Text( 'No Log Details... ID: ' . $this->getID(), __FILE__, __LINE__, __METHOD__, 10 );
return false;
}
/**
* Don't allow remote API calls to set audit trail records.
* @param $data
* @return bool
*/
function setObjectFromArray( $data ) {
if ( is_array( $data ) ) {
$variable_function_map = $this->getVariableToFunctionMap();
foreach ( $variable_function_map as $key => $function ) {
if ( isset( $data[$key] ) ) {
$function = 'set' . $function;
switch ( $key ) {
default:
if ( method_exists( $this, $function ) ) {
$this->$function( $data[$key] );
}
break;
}
}
}
//$this->setCreatedAndUpdatedColumns( $data );
return true;
}
return false;
}
/**
* @param null $include_columns
* @return array
*/
function getObjectAsArray( $include_columns = null ) {
$variable_function_map = $this->getVariableToFunctionMap();
$data = [];
if ( is_array( $variable_function_map ) ) {
foreach ( $variable_function_map as $variable => $function_stub ) {
if ( $include_columns == null || ( isset( $include_columns[$variable] ) && $include_columns[$variable] == true ) ) {
$function = 'get' . $function_stub;
switch ( $variable ) {
case 'first_name':
case 'last_name':
$data[$variable] = $this->getColumn( $variable );
break;
case 'date':
$data[$variable] = TTDate::getAPIDate( 'DATE+TIME', $this->getDate() );
break;
case 'object':
$data[$variable] = Option::getByKey( $this->getTableName(), $this->getOptions( 'table_name' ) );
break;
case 'action':
$function = 'get' . $variable;
if ( method_exists( $this, $function ) ) {
$data[$variable] = Option::getByKey( $this->$function(), $this->getOptions( $variable ) );
}
break;
case 'details':
if ( isset( $include_columns[$variable] ) && $include_columns[$variable] == true ) {
$data[$variable] = $this->getDetails();
}
break;
default:
if ( method_exists( $this, $function ) ) {
$data[$variable] = $this->$function();
}
break;
}
}
}
//$this->getCreatedAndUpdatedColumns( $data, $include_columns );
}
return $data;
}
/**
* This table doesn't have any of these columns, so overload the functions.
* @return bool
*/
function getDeleted() {
return false;
}
/**
* @param $bool
* @return bool
*/
function setDeleted( $bool ) {
return false;
}
/**
* @return bool
*/
function getCreatedDate() {
return false;
}
/**
* @param int $epoch EPOCH
* @return bool
*/
function setCreatedDate( $epoch = null ) {
return false;
}
/**
* @return bool
*/
function getCreatedBy() {
return false;
}
/**
* @param string $id UUID
* @return bool
*/
function setCreatedBy( $id = null ) {
return false;
}
/**
* @return bool
*/
function getUpdatedDate() {
return false;
}
/**
* @param int $epoch EPOCH
* @return bool
*/
function setUpdatedDate( $epoch = null ) {
return false;
}
/**
* @return bool
*/
function getUpdatedBy() {
return false;
}
/**
* @param string $id UUID
* @return bool
*/
function setUpdatedBy( $id = null ) {
return false;
}
/**
* @return bool
*/
function getDeletedDate() {
return false;
}
/**
* @param int $epoch EPOCH
* @return bool
*/
function setDeletedDate( $epoch = null ) {
return false;
}
/**
* @return bool
*/
function getDeletedBy() {
return false;
}
/**
* @param string $id UUID
* @return bool
*/
function setDeletedBy( $id = null ) {
return false;
}
/**
* @return bool
*/
function Validate() {
//
// BELOW: Validation code moved from set*() functions.
//
// User
if ( $this->getUser() !== false && $this->getUser() != TTUUID::getZeroID() ) {
$ulf = TTnew( 'UserListFactory' ); /** @var UserListFactory $ulf */
$this->Validator->isResultSetWithRows( 'user',
$ulf->getByID( $this->getUser() ),
TTi18n::gettext( 'User is invalid' )
);
}
// Object
$this->Validator->isUUID( 'object',
$this->getObject(),
TTi18n::gettext( 'Object is invalid' )
);
// Table
$this->Validator->isLength( 'table',
$this->getTableName(),
TTi18n::gettext( 'Table is invalid' ),
2,
250
);
// Action
$this->Validator->inArrayKey( 'action',
$this->getAction(),
TTi18n::gettext( 'Incorrect Action' ),
$this->getOptions( 'action' )
);
// Description
$this->Validator->isLength( 'description',
$this->getDescription(),
TTi18n::gettext( 'Description is invalid' ),
2,
2000
);
// Date
$this->Validator->isDate( 'date',
$this->getDate(),
TTi18n::gettext( 'Date is invalid' )
);
//
// ABOVE: Validation code moved from set*() functions.
//
return true;
}
/**
* @return bool
*/
function preSave() {
if ( $this->getDate() === false ) {
$this->setDate();
}
return true;
}
}
?>