function activity() { $this->_validate_user('manage/activity'); $this->load->module_model(FUEL_FOLDER, 'logs_model'); $this->load->library('pagination'); $this->load->library('data_table'); $this->load->helper('convert'); $this->nav_selected = 'manage/activity'; $page_state = $this->_get_page_state(); /* PROCESS PARAMS BEGIN */ $filters = array(); $defaults = array(); $defaults['col'] = 'entry_date'; $defaults['order'] = 'asc'; $defaults['offset'] = 0; $defaults['limit'] = 25; $defaults['search_term'] = ''; $defaults['precedence'] = NULL; $uri_params = uri_safe_batch_decode(fuel_uri_segment(4), '|', TRUE); $uri_params = array(); if (fuel_uri_segment(4)) { $uri_params['offset'] = (int) fuel_uri_segment(4); } $posted = array(); if (!empty($_POST)) { if ($this->input->post('col')) { $posted['col'] = $this->input->post('col'); } if ($this->input->post('order')) { $posted['order'] = $this->input->post('order'); } if ($this->input->post('limit')) { $posted['limit'] = $this->input->post('limit'); } if ($this->input->post('limit')) { $posted['offset'] = (int) $this->input->post('offset'); } $posted['search_term'] = $this->input->post('search_term'); } //$params = array_merge($defaults, $uri_params, $posted); $params = array_merge($defaults, $page_state, $uri_params, $posted); if ($params['search_term'] == lang('label_search')) { $params['search_term'] = NULL; } /* PROCESS PARAMS END */ $seg_params = $params; unset($seg_params['offset']); $seg_params = uri_safe_batch_encode($seg_params, '|', TRUE); // if (!is_ajax() AND !empty($_POST)) // { // $uri = fuel_url('manage/activity/offset/'.$params['offset']); // redirect($uri); // } $filters['first_name'] = $params['search_term']; $filters['last_name'] = $params['search_term']; $filters['message'] = $params['search_term']; $filters['entry_date'] = $params['search_term']; $this->logs_model->add_filters($filters); // pagination $config['base_url'] = fuel_url('manage/activity/offset/'); $config['total_rows'] = $this->logs_model->list_items_total(); $config['uri_segment'] = fuel_uri_index(4); $config['per_page'] = $params['limit']; $config['page_query_string'] = FALSE; $config['num_links'] = 5; $config['prev_link'] = lang('pagination_prev_page'); $config['next_link'] = lang('pagination_next_page'); $config['first_link'] = lang('pagination_first_link'); $config['last_link'] = lang('pagination_last_link'); $this->pagination->initialize($config); $this->_save_page_state($params); // data table $vars['params'] = $params; $vars['table'] = ''; if (is_ajax()) { $items = $this->logs_model->list_items($params['limit'], $params['offset'], $params['col'], $params['order']); $this->data_table->row_alt_class = 'alt'; $this->data_table->id = 'activity_data_table'; // change this so that it doesn't have clickable rows' $this->data_table->only_data_cols = array('id'); $this->data_table->set_sorting($params['col'], $params['order']); $this->data_table->auto_sort = TRUE; $this->data_table->sort_js_func = 'page.sortList'; $headers = array('entry_date' => lang('form_label_entry_date'), 'name' => lang('form_label_name'), 'message' => lang('form_label_message')); $this->data_table->assign_data($items, $headers); $vars['table'] = $this->data_table->render(); $this->load->view('_blocks/module_list_table', $vars); return; } else { $this->load->library('form_builder'); $this->js_controller_params['method'] = 'activity'; $vars['table'] = $this->load->view('_blocks/module_list_table', $vars, TRUE); $vars['pagination'] = $this->pagination->create_links(); // for extra module filters $field_values = array(); $this->_render('manage/activity', $vars); } }
/** * Returns the uri string based on the FUEL admin path * * @access public * @param int * @param int * @param boolean * @return string */ function fuel_uri_string($from = 0, $to = NULL, $rerouted = FALSE) { $CI =& get_instance(); $fuel_index = fuel_uri_index($from); if ($rerouted) { $segs = $CI->uri->rsegment_array($fuel_index); } else { $segs = $CI->uri->segment_array($fuel_index); } $from = fuel_uri_index($from); if (isset($to)) { $to = fuel_uri_index($to); if ($from < $to) { $to = $from; } } $segs = array_slice($segs, $from, $to); $uri = implode('/', $segs); return $uri; }
function items() { $this->load->library('data_table'); $params = $this->_list_process(); $seg_params = $params; unset($seg_params['offset']); $seg_params = uri_safe_batch_encode($seg_params, '|', TRUE); // save page state $this->_save_page_state($params); if (!is_ajax() and !empty($_POST)) { //$uri = $this->config->item('fuel_path', 'fuel').$this->module.'/items/params/'.$seg_params.'/offset/'.$params['offset']; $uri = $this->config->item('fuel_path', 'fuel') . $this->module . '/items/offset/' . $params['offset']; redirect($uri); } // create search filter $filters[$this->display_field] = $params['search_term']; //$filters = array(); // sort of hacky here... to make it easy for the model to just filter on the search term (like the users model) $this->model->filter_value = $params['search_term']; foreach ($this->filters as $key => $val) { $filters[$key] = $params[$key]; } // set model filters before pagination and setting table data if (method_exists($this->model, 'add_filters')) { $this->model->add_filters($filters); } $this->config->set_item('enable_query_strings', FALSE); // pagination $config['base_url'] = fuel_url($this->module) . '/items/offset/'; $config['total_rows'] = $this->model->list_items_total(); $config['uri_segment'] = fuel_uri_index(4); $config['per_page'] = (int) $params['limit']; $config['page_query_string'] = FALSE; $config['num_links'] = 5; $this->pagination->initialize($config); if (method_exists($this->model, 'tree')) { //$vars['tree'] = "Loading...\n<ul></ul>\n"; $vars['tree'] = "\n<ul></ul>\n"; } // set vars $vars['params'] = $params; $vars['table'] = ''; // reload table if (is_ajax()) { // data table items... check col value to know if we want to send sorting parameter if (empty($params['col']) or empty($params['order'])) { $items = $this->model->list_items($params['limit'], $params['offset']); } else { $items = $this->model->list_items($params['limit'], $params['offset'], $params['col'], $params['order']); } // set data table actions... look first for item_actions set in the fuel_modules foreach ($this->table_actions as $key => $val) { if (!is_int($key)) { $action_type = 'url'; $action_val = $this->table_actions[$key]; if (is_array($val)) { $action_type = key($val); $action_val = current($val); } $this->data_table->add_action($key, $action_val, $action_type); } else { if (strtoupper($val) == 'DELETE') { $delete_func = ' $CI =& get_instance(); $link = ""; if ($CI->fuel_auth->has_permission($CI->permission, "delete")) { $url = site_url("/".$CI->config->item("fuel_path", "fuel").$CI->module_uri."/delete/".$cols[$CI->model->key_field()]); $link = "<a href=\\"".$url."\\">DELETE</a>"; $link .= " <input type=\\"checkbox\\" name=\\"delete[".$cols[$CI->model->key_field()]."]\\" value=\\"1\\" id=\\"delete_".$cols[$CI->model->key_field()]."\\" class=\\"multi_delete\\"/>"; } return $link;'; $delete_func = create_function('$cols', $delete_func); $this->data_table->add_action($val, $delete_func, 'func'); } else { if (strtoupper($val) != 'VIEW' or !empty($this->preview_path) and strtoupper($val) == 'VIEW') { $this->data_table->add_action($val, site_url('/' . $this->config->item('fuel_path', 'fuel') . $this->module_uri . '/' . strtolower($val) . '/{' . $this->model->key_field() . '}'), 'url'); } } } } if (!$this->rows_selectable) { $this->data_table->id = 'data_table_noselect'; $this->data_table->row_action = FALSE; } else { $this->data_table->row_action = TRUE; } $this->data_table->row_alt_class = 'alt'; $this->data_table->only_data_fields = array($this->model->key_field()); $this->data_table->set_sorting($params['col'], $params['order']); $this->data_table->auto_sort = TRUE; $this->data_table->actions_field = 'last'; $this->data_table->no_data_str = lang('no_data'); $_unpub_func = ' $CI =& get_instance(); $can_publish = $CI->fuel_auth->has_permission($CI->permission, "publish"); $is_publish = (isset($cols[\'published\'])) ? TRUE : FALSE; if ((isset($cols[\'published\']) AND $cols[\'published\'] == "no") OR (isset($cols[\'active\']) AND $cols[\'active\'] == "no")) { $text_class = ($can_publish) ? "publish_text unpublished toggle_publish": "published"; $action_class = ($can_publish) ? "publish_action unpublished hidden": "unpublished hidden"; $col_txt = ($is_publish) ? \'click to publish\' : \'click to activate\'; return "<span class=\\"publish_hover\\"><span class=\\"".$text_class."\\" id=\\"row_published_".$cols["' . $this->model->key_field() . '"]."\\">no</span><span class=\\"".$action_class."\\">".$col_txt."</span></span>"; } else { $text_class = ($can_publish) ? "publish_text published toggle_unpublish": "published"; $action_class = ($can_publish) ? "publish_action published hidden": "published hidden"; $col_txt = ($is_publish) ? \'click to unpublish\' : \'click to deactivate\'; return "<span class=\\"publish_hover\\"><span class=\\"".$text_class."\\" id=\\"row_published_".$cols["' . $this->model->key_field() . '"]."\\">yes</span><span class=\\"".$action_class."\\">".$col_txt."</span></span>"; }'; $_unpublished = create_function('$cols', $_unpub_func); $this->data_table->add_field_formatter('published', $_unpublished); $this->data_table->add_field_formatter('active', $_unpublished); $this->data_table->auto_sort = TRUE; $this->data_table->sort_js_func = 'page.sortList'; $this->data_table->assign_data($items); $vars['table'] = $this->data_table->render(); $this->load->module_view(FUEL_FOLDER, '_blocks/module_list_table', $vars); return; } else { $this->load->library('form_builder'); $this->js_controller_params['method'] = 'items'; $vars['table'] = $this->load->module_view(FUEL_FOLDER, '_blocks/module_list_table', $vars, TRUE); $vars['pagination'] = $this->pagination->create_links(); // for extra module 'filters' $field_values = array(); foreach ($this->filters as $key => $val) { $field_values[$key] = $params[$key]; } $this->form_builder->question_keys = array(); //$this->form_builder->hidden = (array) $this->model->key_field(); $this->form_builder->label_layout = 'left'; $this->form_builder->form->validator =& $this->model->get_validation(); $this->form_builder->submit_value = null; $this->form_builder->use_form_tag = FALSE; $this->form_builder->set_fields($this->filters); $this->form_builder->display_errors = FALSE; $this->form_builder->css_class = 'more_filters'; $this->form_builder->set_field_values($field_values); $vars['more_filters'] = $this->form_builder->render(); $this->_render($this->views['list'], $vars); } }
/** * Displays the list (table) view * * @access public * @return void */ function items() { $this->load->library('data_table'); $filters = $this->model->filters($this->filters); if (is_object($filters) && $filters instanceof Base_model_fields) { $filters = $filters->get_fields(); } $this->filters = array_merge($this->filters, $filters); // set the language dropdown if there is a language column if ($this->fuel->language->has_multiple() and !empty($this->language_col) and method_exists($this->model, 'get_languages')) { $languages = $this->model->get_languages($this->language_col); $first_option = current($languages); if (!empty($languages) and (is_string($first_option) or is_array($first_option) and count($first_option) > 1)) { $lang_filter = array('type' => 'select', 'options' => $languages, 'label' => lang('label_language'), 'first_option' => lang('label_select_a_language')); $this->filters[$this->language_col . '_equal'] = $lang_filter; $this->model->add_filter_join($this->language_col . '_equal', 'and'); } } $params = $this->_list_process(); // save page state $this->fuel->admin->save_page_state($params); // filter the list $this->_filter_list($params); // to prevent it from being called unnecessarily with ajax if (!is_ajax()) { $this->config->set_item('enable_query_strings', FALSE); // pagination $query_str_arr = $this->input->get(NULL, TRUE); unset($query_str_arr['offset']); $query_str = !empty($query_str_arr) ? http_build_query($query_str_arr) : ''; $config['base_url'] = fuel_url($this->module_uri) . '/items/?' . $query_str; $uri_segment = 4 + (count(explode('/', $this->module_uri)) - 1); $config['total_rows'] = $this->model->list_items_total(); $config['uri_segment'] = fuel_uri_index($uri_segment); $config['per_page'] = (int) $params['limit']; $config['query_string_segment'] = 'offset'; $config['page_query_string'] = TRUE; $config['num_links'] = 5; $config['prev_link'] = lang('pagination_prev_page'); $config['next_link'] = lang('pagination_next_page'); $config['first_link'] = lang('pagination_first_link'); $config['last_link'] = lang('pagination_last_link'); // must reset these in case a config file has something different $config['full_tag_open'] = NULL; $config['full_tag_close'] = NULL; $config['num_tag_open'] = ' '; $config['num_tag_close'] = NULL; $config['cur_tag_open'] = ' <strong>'; $config['cur_tag_close'] = '</strong>'; $config['next_tag_open'] = ' '; $config['next_tag_close'] = ' '; $config['prev_tag_open'] = ' '; $config['prev_tag_close'] = NULL; $config['first_tag_open'] = ' '; $config['first_tag_close'] = ' '; $config['last_tag_open'] = NULL; $config['last_tag_close'] = NULL; $this->pagination->initialize($config); if (method_exists($this->model, 'tree')) { $vars['tree'] = "\n<ul></ul>\n"; } // reset offset if total rows is less then limit if ($config['total_rows'] < $params['limit']) { $params['offset'] = 0; } } // set vars $vars['params'] = $params; $vars['table'] = ''; // reload table if (is_ajax()) { // data table items... check col value to know if we want to send sorting parameter if (empty($params['col']) or empty($params['order'])) { $items = $this->model->list_items($params['limit'], $params['offset']); } else { $items = $this->model->list_items($params['limit'], $params['offset'], $params['col'], $params['order']); $this->data_table->set_sorting($params['col'], $params['order']); } $has_edit_permission = $this->fuel->auth->has_permission($this->permission, "edit") ? '1' : '0'; $has_delete_permission = $this->fuel->auth->has_permission($this->permission, "delete") ? '1' : '0'; // set data table actions... look first for item_actions set in the fuel_modules /*$edit_func = ' $CI =& get_instance(); $link = "";'; if ($has_edit_permission) { $edit_func .= 'if (isset($cols[$CI->model->key_field()])) { echo $cols[$CI->model->limit_to_user_field]; if (empty($CI->model->limit_to_user_field) OR (!empty($CI->model->limit_to_user_field) AND (!empty($cols[$CI->model->limit_to_user_field])) AND $cols[$CI->model->limit_to_user_field] = $CI->fuel->auth->user_data("id"))) { $url = fuel_url("'.$this->module_uri.'/edit/".$cols[$CI->model->key_field()]); $link = "<a href=\"".$url."\" class=\"action_delete\">".lang("table_action_delete")."</a>"; $link .= " <input type=\"checkbox\" name=\"delete[".$cols[$CI->model->key_field()]."]\" value=\"1\" id=\"delete_".$cols[$CI->model->key_field()]."\" class=\"multi_delete\"/>"; } }'; } $edit_func .= 'return $link;'; $edit_func = create_function('$cols', $edit_func);*/ // set data table actions... look first for item_actions set in the fuel_modules $delete_func = ' $CI =& get_instance(); $link = "";'; if ($has_delete_permission) { $delete_func .= 'if (isset($cols[$CI->model->key_field()])) { $url = fuel_url("' . $this->module_uri . '/delete/".$cols[$CI->model->key_field()]); $link = "<a href=\\"".$url."\\" class=\\"action_delete\\">".lang("table_action_delete")."</a>"; $link .= " <input type=\\"checkbox\\" name=\\"delete[".$cols[$CI->model->key_field()]."]\\" value=\\"1\\" id=\\"delete_".$cols[$CI->model->key_field()]."\\" class=\\"multi_delete\\"/>"; }'; } $delete_func .= 'return $link;'; $delete_func = create_function('$cols', $delete_func); foreach ($this->table_actions as $key => $val) { if (!is_int($key)) { $action_type = 'url'; $action_val = $this->table_actions[$key]; $attrs = array(); if (is_array($val)) { if (isset($val['url'])) { $action_type = 'url'; $action_val = $val['url']; if (isset($val['attrs'])) { $attrs = $val['attrs']; } } else { $action_type = key($val); $action_val = current($val); } $attrs = isset($val['attrs']) ? $val['attrs'] : array(); } $this->data_table->add_action($key, $action_val, $action_type, $attrs); } else { if (strtoupper($val) == 'EDIT') { if ($this->fuel->auth->has_permission($this->permission, "edit")) { $action_url = fuel_url($this->module_uri . '/edit/{' . $this->model->key_field() . '}'); $this->data_table->add_action(lang('table_action_edit'), $action_url, 'url'); } } else { if (strtoupper($val) == 'DELETE') { $this->data_table->add_action($val, $delete_func, 'func'); } else { if (strtoupper($val) != 'VIEW' or !empty($this->preview_path) and strtoupper($val) == 'VIEW') { $action_name = lang('table_action_' . strtolower($val)); if (empty($action_name)) { $action_name = $val; } $action_url = fuel_url($this->module_uri . '/' . strtolower($val) . '/{' . $this->model->key_field() . '}'); $this->data_table->add_action($action_name, $action_url, 'url'); } } } } } if (!$this->rows_selectable) { $this->data_table->id = 'data_table_noselect'; $this->data_table->row_action = FALSE; } else { $this->data_table->row_action = TRUE; } $this->data_table->row_alt_class = 'alt'; if ($this->model->has_auto_increment()) { $this->data_table->only_data_fields = array($this->model->key_field()); } // Key and boolean fields are data only // $this->data_table->only_data_fields = array_merge(array($this->model->key_field()), $this->model->boolean_fields); $this->data_table->auto_sort = TRUE; $this->data_table->actions_field = 'last'; $this->data_table->no_data_str = lang('no_data'); $this->data_table->lang_prefix = 'form_label_'; $this->data_table->row_id_key = $this->model->key_field(); $boolean_fields = $this->model->boolean_fields; if (!in_array('published', $boolean_fields)) { $boolean_fields[] = 'published'; } if (!in_array('active', $boolean_fields)) { $boolean_fields[] = 'active'; } $has_publish_permission = $this->fuel->auth->has_permission($this->permission, 'publish') ? '1' : '0'; $has_edit_permission = $this->fuel->auth->has_permission($this->permission, 'edit') ? '1' : '0'; $no = lang("form_enum_option_no"); $yes = lang("form_enum_option_yes"); $col_txt = lang('click_to_toggle'); $key_field = $this->model->key_field(); $_publish_toggle_callback = ' $can_publish = (($heading == "published" OR $heading == "active") AND ' . $has_publish_permission . ' OR (($heading != "published" AND $heading != "active") AND ' . $has_edit_permission . ')); $no = "' . $no . '"; $yes = "' . $yes . '"; $col_txt = "' . $col_txt . '"; // boolean fields if (is_null($cols[$heading]) OR $cols[$heading] == "") { return ""; } else if (!is_true_val($cols[$heading])) { $text_class = ($can_publish) ? "publish_text unpublished toggle_on" : "unpublished"; $action_class = ($can_publish) ? "publish_action unpublished hidden" : "unpublished hidden"; return \'<span class="publish_hover"><span class="\'.$text_class.\'" id="row_published_\'.$cols["' . $key_field . '"].\'" data-field="\'.$heading.\'">\'.$no.\'</span><span class="\'.$action_class.\'">\'.$col_txt.\'</span></span>\'; } else { $text_class = ($can_publish) ? "publish_text published toggle_off" : "published"; $action_class = ($can_publish) ? "publish_action published hidden" : "published hidden"; return \'<span class="publish_hover"><span class="\'.$text_class.\'" id="row_published_\'.$cols["' . $key_field . '"].\'" data-field="\'.$heading.\'">\'.$yes.\'</span><span class="\'.$action_class.\'">\'.$col_txt.\'</span></span>\'; }'; $_publish_toggle_callback = create_function('$cols, $heading', $_publish_toggle_callback); foreach ($boolean_fields as $bool) { $this->data_table->add_field_formatter($bool, $_publish_toggle_callback); } $this->data_table->auto_sort = TRUE; $heading_sort_func = (isset($this->disable_heading_sort) and $this->disable_heading_sort) ? '' : 'fuel.sortList'; $this->data_table->sort_js_func = $heading_sort_func; $this->data_table->assign_data($items, $this->table_headers); $vars['table'] = $this->data_table->render(); if (!empty($items[0]) and (!empty($this->precedence_col) and isset($items[0][$this->precedence_col]))) { $vars['params']['precedence'] = 1; } $this->load->module_view(FUEL_FOLDER, '_blocks/module_list_table', $vars); return; } else { $this->load->library('form_builder'); $this->js_controller_params['method'] = 'items'; $this->js_controller_params['precedence_col'] = $this->precedence_col; $vars['table'] = $this->load->module_view(FUEL_FOLDER, '_blocks/module_list_table', $vars, TRUE); $vars['pagination'] = $this->pagination->create_links(); // for extra module 'filters' $field_values = array(); foreach ($this->filters as $key => $val) { $field_values[$key] = $params[$key]; } $this->form_builder->question_keys = array(); //$this->form_builder->hidden = (array) $this->model->key_field(); $this->form_builder->label_layout = 'left'; $this->form_builder->load_custom_fields(APPPATH . 'config/custom_fields.php'); $this->form_builder->set_validator($this->model->get_validation()); $this->form_builder->submit_value = NULL; $this->form_builder->use_form_tag = FALSE; $this->form_builder->set_fields($this->filters); $this->form_builder->display_errors = FALSE; $this->form_builder->css_class = 'more_filters'; if ($this->config->item('date_format')) { $this->form_builder->date_format = $this->config->item('date_format'); } $this->form_builder->set_field_values($field_values); if (method_exists($this->model, 'friendly_filter_info')) { $friendly_filter_info = $this->model->friendly_filter_info($field_values); if (!empty($friendly_filter_info)) { $vars['info'] = $friendly_filter_info; } } // keycheck is already put in place by $this->form->close() in module_list layout $this->form_builder->key_check = FALSE; $vars['more_filters'] = $this->form_builder->render_divs(); $vars['actions'] = $this->load->module_view(FUEL_FOLDER, '_blocks/module_list_actions', $vars, TRUE); $vars['form_action'] = $this->module_uri . '/items'; $vars['form_method'] = 'get'; $vars['query_string'] = $query_str; $vars['description'] = $this->description; $crumbs = array($this->module_uri => $this->module_name); $this->fuel->admin->set_titlebar($crumbs); $inline = $this->input->get('inline', TRUE); $this->fuel->admin->set_inline($inline); if ($inline === TRUE) { $this->fuel->admin->set_display_mode(Fuel_admin::DISPLAY_COMPACT_TITLEBAR); } $this->fuel->admin->render($this->views['list'], $vars, '', FUEL_FOLDER); } }