| Server IP : 103.161.17.216 / Your IP : 216.73.216.1 Web Server : nginx/1.18.0 System : Linux tipsysaigoncharming 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 User : www-data ( 33) PHP Version : 7.4.3-4ubuntu2.29 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /var/www/app.houseland.info/application/models/ |
Upload File : |
<?php
defined('BASEPATH') or exit('No direct script access allowed');
class Custom_fields_model extends App_Model
{
private $pdf_fields = ['estimate', 'invoice', 'credit_note', 'items'];
private $client_portal_fields = ['customers', 'estimate', 'invoice', 'proposal', 'contracts', 'tasks', 'projects', 'contacts', 'tickets', 'company', 'credit_note'];
private $client_editable_fields = ['customers', 'contacts', 'tasks'];
public function __construct()
{
parent::__construct();
}
/**
* @param integer (optional)
* @return object
* Get single custom field
*/
public function get($id = false)
{
if (is_numeric($id)) {
$this->db->where('id', $id);
return $this->db->get(db_prefix().'customfields')->row();
}
return $this->db->get(db_prefix().'customfields')->result_array();
}
/**
* Add new custom field
* @param mixed $data All $_POST data
* @return boolean
*/
public function add($data)
{
if (isset($data['disabled'])) {
$data['active'] = 0;
unset($data['disabled']);
} else {
$data['active'] = 1;
}
if (isset($data['show_on_pdf'])) {
if (in_array($data['fieldto'], $this->pdf_fields)) {
$data['show_on_pdf'] = 1;
} else {
$data['show_on_pdf'] = 0;
}
} else {
$data['show_on_pdf'] = 0;
}
if (isset($data['required'])) {
$data['required'] = 1;
} else {
$data['required'] = 0;
}
if (isset($data['disalow_client_to_edit'])) {
$data['disalow_client_to_edit'] = 1;
} else {
$data['disalow_client_to_edit'] = 0;
}
if (isset($data['show_on_table'])) {
$data['show_on_table'] = 1;
} else {
$data['show_on_table'] = 0;
}
if (isset($data['only_admin'])) {
$data['only_admin'] = 1;
} else {
$data['only_admin'] = 0;
}
if (isset($data['show_on_client_portal'])) {
if (in_array($data['fieldto'], $this->client_portal_fields)) {
$data['show_on_client_portal'] = 1;
} else {
$data['show_on_client_portal'] = 0;
}
} else {
$data['show_on_client_portal'] = 0;
}
if ($data['field_order'] == '') {
$data['field_order'] = 0;
}
$data['slug'] = slug_it($data['fieldto'] . '_' . $data['name'], [
'separator' => '_',
]);
$slugs_total = total_rows(db_prefix().'customfields', ['slug' => $data['slug']]);
if ($slugs_total > 0) {
$data['slug'] .= '_' . ($slugs_total + 1);
}
if ($data['fieldto'] == 'company') {
$data['show_on_pdf'] = 1;
$data['show_on_client_portal'] = 1;
$data['show_on_table'] = 1;
$data['only_admin'] = 0;
$data['disalow_client_to_edit'] = 0;
} elseif ($data['fieldto'] == 'items') {
$data['show_on_pdf'] = 1;
$data['show_on_client_portal'] = 1;
$data['show_on_table'] = 1;
$data['only_admin'] = 0;
$data['disalow_client_to_edit'] = 0;
}
$this->db->insert(db_prefix().'customfields', $data);
$insert_id = $this->db->insert_id();
if ($insert_id) {
log_activity('New Custom Field Added [' . $data['name'] . ']');
return $insert_id;
}
return false;
}
/**
* Update custom field
* @param mixed $data All $_POST data
* @return boolean
*/
public function update($data, $id)
{
$original_field = $this->get($id);
if (isset($data['disabled'])) {
$data['active'] = 0;
unset($data['disabled']);
} else {
$data['active'] = 1;
}
if (isset($data['disalow_client_to_edit'])) {
$data['disalow_client_to_edit'] = 1;
} else {
$data['disalow_client_to_edit'] = 0;
}
if (isset($data['only_admin'])) {
$data['only_admin'] = 1;
} else {
$data['only_admin'] = 0;
}
if (isset($data['required'])) {
$data['required'] = 1;
} else {
$data['required'] = 0;
}
if (isset($data['show_on_pdf'])) {
if (in_array($data['fieldto'], $this->pdf_fields)) {
$data['show_on_pdf'] = 1;
} else {
$data['show_on_pdf'] = 0;
}
} else {
$data['show_on_pdf'] = 0;
}
if ($data['field_order'] == '') {
$data['field_order'] = 0;
}
if (isset($data['show_on_client_portal'])) {
if (in_array($data['fieldto'], $this->client_portal_fields)) {
$data['show_on_client_portal'] = 1;
} else {
$data['show_on_client_portal'] = 0;
}
} else {
$data['show_on_client_portal'] = 0;
}
if (isset($data['show_on_table'])) {
$data['show_on_table'] = 1;
} else {
$data['show_on_table'] = 0;
}
if (!isset($data['display_inline'])) {
$data['display_inline'] = 0;
}
if (!isset($data['show_on_ticket_form'])) {
$data['show_on_ticket_form'] = 0;
}
if ($data['fieldto'] == 'company') {
$data['show_on_pdf'] = 1;
$data['show_on_client_portal'] = 1;
$data['show_on_table'] = 1;
$data['only_admin'] = 0;
$data['disalow_client_to_edit'] = 0;
} elseif ($data['fieldto'] == 'items') {
$data['show_on_pdf'] = 1;
$data['show_on_client_portal'] = 1;
$data['show_on_table'] = 1;
$data['only_admin'] = 0;
$data['disalow_client_to_edit'] = 0;
}
$this->db->where('id', $id);
$this->db->update(db_prefix().'customfields', $data);
if ($this->db->affected_rows() > 0) {
log_activity('Custom Field Updated [' . $data['name'] . ']');
if ($data['type'] == 'checkbox' || $data['type'] == 'select' || $data['type'] == 'multiselect') {
if (trim($data['options']) != trim($original_field->options)) {
$options_now = explode(',', $data['options']);
foreach ($options_now as $key => $val) {
$options_now[$key] = trim($val);
}
$options_before = explode(',', $original_field->options);
foreach ($options_before as $key => $val) {
$options_before[$key] = trim($val);
}
$removed_options_in_use = [];
foreach ($options_before as $option) {
if (!in_array($option, $options_now) && total_rows(db_prefix().'customfieldsvalues', [
'fieldid' => $id,
'value' => $option,
])) {
array_push($removed_options_in_use, $option);
}
}
if (count($removed_options_in_use) > 0) {
$this->db->where('id', $id);
$this->db->update(db_prefix().'customfields', [
'options' => implode(',', $options_now) . ',' . implode(',', $removed_options_in_use),
]);
return [
'cant_change_option_custom_field' => true,
];
}
}
}
return true;
}
return false;
}
/**
* @param integer
* @return boolean
* Delete Custom fields
* All values for this custom field will be deleted from database
*/
public function delete($id)
{
$this->db->where('id', $id);
$this->db->delete(db_prefix().'customfields');
if ($this->db->affected_rows() > 0) {
// Delete the values
$this->db->where('fieldid', $id);
$this->db->delete(db_prefix().'customfieldsvalues');
log_activity('Custom Field Deleted [' . $id . ']');
return true;
}
return false;
}
/**
* Change custom field status / active / inactive
* @param mixed $id customfield id
* @param integer $status active or inactive
*/
public function change_custom_field_status($id, $status)
{
$this->db->where('id', $id);
$this->db->update(db_prefix().'customfields', [
'active' => $status,
]);
log_activity('Custom Field Status Changed [FieldID: ' . $id . ' - Active: ' . $status . ']');
}
/**
* Return field where Shown on PDF is allowed
* @return array
*/
public function get_pdf_allowed_fields()
{
return $this->pdf_fields;
}
/**
* Return fields where Show on customer portal is allowed
* @return array
*/
public function get_client_portal_allowed_fields()
{
return $this->client_portal_fields;
}
/**
* Return fields where are editable in customers area
* @return array
*/
public function get_client_editable_fields()
{
return $this->client_editable_fields;
}
}