/home/edulekha/crm.edulekha.com/application/controllers/admin/Filters.php
<?php
defined('BASEPATH') or exit('No direct script access allowed');
class Filters extends AdminController
{
public function create()
{
$this->load->model('filters_model');
$filter = $this->filters_model->create([
'name' => $this->input->post('name'),
'identifier' => $this->input->post('identifier'),
'builder' => $this->unformatDateRules($this->input->post('rules')),
'is_shared' => filter_var($this->input->post('is_shared'), FILTER_VALIDATE_BOOL),
'is_default' => filter_var($this->input->post('is_default'), FILTER_VALIDATE_BOOL),
'view' => $this->input->post('view'),
'staff_id' => get_staff_user_id(),
]);
$filter['builder']['rules'] = $this->mapRulesIntoInstances($filter['builder']['rules'], $filter['identifier']);
echo json_encode($filter);
}
public function update($id)
{
$this->load->model('filters_model');
$staffId = get_staff_user_id();
$view = $this->input->post('view');
$filter = $this->db->where('id', $id)->get('filters')->row_array();
if (!is_admin() && $filter['staff_id'] != $staffId) {
ajax_access_denied();
}
$filter = $this->filters_model->update($id, [
'name' => $this->input->post('name'),
'is_shared' => filter_var($this->input->post('is_shared'), FILTER_VALIDATE_BOOL),
'is_default' => filter_var($this->input->post('is_default'), FILTER_VALIDATE_BOOL),
'view' => $view,
'builder' => $this->unformatDateRules($this->input->post('rules')),
], $staffId);
$filter['builder']['rules'] = $this->mapRulesIntoInstances($filter['builder']['rules'], $filter['identifier']);
echo json_encode($filter);
}
public function delete($id)
{
$this->load->model('filters_model');
$filter = $this->db->where('id', $id)->get('filters')->row_array();
if (!is_admin() && $filter['staff_id'] != get_staff_user_id()) {
ajax_access_denied();
}
$this->filters_model->delete($id);
}
public function mark_as_default($id, $identifier, $view)
{
$this->load->model('filters_model');
$this->filters_model->mark_as_default($id, $identifier, $view, get_staff_user_id());
}
public function unmark_as_default($identifier, $view)
{
$this->load->model('filters_model');
$this->filters_model->delete_default($identifier, $view, get_staff_user_id());
}
public function validate_dynamic_date()
{
$value = $this->input->post('value');
$parsed = strtotime($value);
if ($parsed === false) {
echo 'fails';
} else {
echo date('Y-m-d', $parsed);
}
}
protected function unformatDateRules($builder)
{
foreach ($builder['rules'] as $key => $rule) {
if ($rule['type'] == 'DateRule' && !$rule['has_dynamic_value']) {
if (is_array($rule['value'])) {
$builder['rules'][$key]['value'] = [to_sql_date($rule['value'][0]), to_sql_date($rule['value'][1])];
} else {
$builder['rules'][$key]['value'] = to_sql_date($rule['value']);
}
}
}
return $builder;
}
protected function mapRulesIntoInstances($rules, $identifier)
{
$table = App_table::find($identifier);
foreach ($rules as $key => $rule) {
$ruleInstance = clone $table->findRule($rule['id']);
$rules[$key] = $ruleInstance
->setOperator($rule['operator'])
->setValue($rule['value'])
->dynamic($rule['has_dynamic_value']);
}
return $rules;
}
}