Example #1
0
 /**
  * Get Set details from Cache or DB
  *
  * @access      private
  * @param       int      set id
  * @return      array
  */
 private function _get_set($set_id)
 {
     // --------------------------------------
     // We're search by either ID or name
     // --------------------------------------
     $attr = is_numeric($set_id) ? 'set_id' : 'set_name';
     // --------------------------------------
     // Get sets from cache, init set to return
     // --------------------------------------
     $sets = array_filter((array) low_get_cache(LOW_REORDER_PACKAGE, 'sets'));
     $set = array();
     // --------------------------------------
     // Loop thru cache and search for attr
     // --------------------------------------
     foreach ($sets as $row) {
         if ($row[$attr] == $set_id) {
             $this->_log('Retrieving set from cache');
             $set = $row;
             break;
         }
     }
     // --------------------------------------
     // If no set was found, query DB
     // --------------------------------------
     if (empty($set)) {
         $this->_log('Retrieving set from database');
         // Get set and its orders for each category
         $query = ee()->db->select(array('s.set_id', 's.set_name', 's.channels', 's.cat_option', 's.cat_groups', 's.parameters', 'o.cat_id', 'o.sort_order'))->from(ee()->low_reorder_set_model->table() . ' s')->join(ee()->low_reorder_order_model->table() . ' o', 's.set_id = o.set_id')->where('s.' . $attr, $set_id)->where_in('s.site_id', ee()->TMPL->site_ids)->get();
         // Get the first row to initiate the set
         if ($set = $query->row_array()) {
             // Decode some attributes
             $set['channels'] = low_delinearize($set['channels']);
             $set['cat_groups'] = low_delinearize($set['cat_groups']);
             $set['parameters'] = ee()->low_reorder_set_model->get_params($set['parameters']);
             // Uncategorized entries
             if ($set['cat_option'] == 'none') {
                 $set['parameters']['uncategorized_entries'] = 'yes';
             }
             // Clean up what we don't need now
             unset($set['cat_id'], $set['sort_order']);
             // Instead, add all orders to the set per category id
             foreach ($query->result() as $row) {
                 $set[$row->cat_id] = low_delinearize($row->sort_order);
             }
             // Add the set to all the sets
             $sets[] = $set;
         }
         // Register new sets array to cache
         low_set_cache(LOW_REORDER_PACKAGE, 'sets', $sets);
     }
     // --------------------------------------
     // Set the current set ID
     // --------------------------------------
     $this->set_id = (int) @$set['set_id'];
     // Return the requested set
     return $set;
 }
Example #2
0
 /**
  * List entries for single channel/field combo
  *
  * @access      public
  * @return      string
  */
 public function reorder()
 {
     // --------------------------------------
     // Get Set id
     // --------------------------------------
     if (!($set_id = ee()->input->get('set_id'))) {
         return $this->_show_error('invalid_request');
     }
     if (!($set = ee()->low_reorder_set_model->get_one($set_id))) {
         show_error('Reorder set not found');
     }
     // --------------------------------------
     // Get settings
     // --------------------------------------
     $params = ee()->low_reorder_set_model->get_params($set['parameters']);
     $perm = ee()->low_reorder_set_model->get_permissions($set['permissions']);
     // --------------------------------------
     // Change channels to array
     // --------------------------------------
     $set['channels'] = low_delinearize($set['channels']);
     $set['cat_groups'] = low_delinearize($set['cat_groups']);
     // --------------------------------------
     // Pre-define some variables for the view
     // --------------------------------------
     $this->data['show_entries'] = TRUE;
     $this->data['select_category'] = FALSE;
     // --------------------------------------
     // Get selected category, if there is one
     // --------------------------------------
     if (($set['cat_id'] = ee()->input->get('category')) === FALSE) {
         $set['cat_id'] = 0;
     }
     // --------------------------------------
     // If cat_option == 'one', a category must be selected first
     // And we need to get a list of categories to put in the
     // category selection drop down
     // --------------------------------------
     if ($set['cat_option'] == 'one' && !empty($set['cat_groups'])) {
         // Showing entries depends on selected category
         $this->data['show_entries'] = $set['cat_id'] > 0;
         $this->data['select_category'] = TRUE;
         $this->data['selected_category'] = $set['cat_id'];
         // Limit query to selected category
         $params['category'] = $set['cat_id'];
         // Load categories API
         ee()->load->library('api');
         ee()->api->instantiate('channel_categories');
         // get group details from DB
         $query = ee()->db->select('group_id, group_name, sort_order')->from('category_groups')->where_in('group_id', $set['cat_groups'])->order_by('group_name', 'asc')->get();
         $this->data['category_groups'] = $query->result_array();
         $this->data['total_groups'] = $query->num_rows();
         // Loop through groups and get the category group from API
         foreach ($this->data['category_groups'] as &$row) {
             ee()->api_channel_categories->categories = array();
             ee()->api_channel_categories->category_tree($row['group_id'], '', $row['sort_order']);
             $row['categories'] = ee()->api_channel_categories->categories;
         }
         $this->data['url'] = $this->base_url . AMP . 'method=reorder' . AMP . 'set_id=' . $set_id . AMP . 'category=';
     } elseif ($set['cat_option'] == 'none') {
         // Make sure only uncategorized entries will be fetched
         $params['uncategorized_entries'] = 'yes';
     }
     // --------------------------------------
     // If we're showing entries, get them first
     // --------------------------------------
     if ($this->data['show_entries']) {
         // Get the current order from the DB
         ee()->db->where('cat_id', $set['cat_id']);
         $order = ee()->low_reorder_order_model->get_one($set_id, 'set_id');
         $set_order = empty($order) ? array() : low_delinearize($order['sort_order']);
         // Add channel_id as parameter
         $params['channel_id'] = implode('|', $set['channels']);
         // Get 'em, sonny boy
         $entries = $this->get_entries($params, $set_order);
         // Edit entry url
         $edit_tmpl = '<a href="' . BASE . '&amp;C=content_publish&amp;M=entry_form&amp;channel_id=%s&amp;entry_id=%s">%s</a>';
         // Loop through row, add stuff
         foreach ($entries as &$row) {
             // Escape title
             $row['title'] = htmlspecialchars($row['title']);
             // Add default hidden divs
             $row['hidden'] = array(sprintf($edit_tmpl, $row['channel_id'], $row['entry_id'], lang('edit')), ucfirst($row['status']), '#' . $row['entry_id']);
         }
         // -------------------------------------
         // 'low_reorder_show_entries' hook.
         //  - Change the output of entries displayed in the CP reorder list
         // -------------------------------------
         if (ee()->extensions->active_hook('low_reorder_show_entries') === TRUE) {
             $entries = ee()->extensions->call('low_reorder_show_entries', $entries, $set);
         }
         $this->data['entries'] = $entries;
     }
     // Add settings to data as well
     $this->data['set'] = $set;
     $this->data['params'] = $params;
     // --------------------------------------
     // Add extra nav item if permitted
     // --------------------------------------
     if ($set_id && $perm['can_edit']) {
         $this->extra_nav['edit_set'] = $this->base_url . AMP . 'method=edit&amp;set_id=' . $set_id;
     }
     // --------------------------------------
     // Set title and breadcrumb
     // --------------------------------------
     $this->_set_cp_var('cp_page_title', $set['set_label']);
     ee()->cp->set_breadcrumb($this->base_url, lang('low_reorder_module_name'));
     // Return settings form
     return $this->view('mcp_reorder');
 }
Example #3
0
 /**
  * Update routines for version 2.0b1
  *
  * @access      private
  * @return      void
  */
 private function _v20b1()
 {
     // --------------------------------------
     // Install new tables
     // --------------------------------------
     ee()->low_reorder_set_model->install();
     ee()->low_reorder_order_model->install();
     // --------------------------------------
     // Get all current records from settings
     // --------------------------------------
     $query = ee()->db->get('low_reorder_settings');
     $rows = $query->result_array();
     // Return if no settings exist
     if (!empty($rows)) {
         // Upgrading from EE1
         if (!isset($rows[0]['channel_id'])) {
             foreach ($rows as &$r) {
                 $r['channel_id'] = $r['weblog_id'];
             }
         }
         // --------------------------------------
         // Get Field, Channel and Status details
         // --------------------------------------
         // Fields
         $query = ee()->db->select('field_id, site_id, field_name, field_label, field_instructions')->from('channel_fields')->where_in('field_id', low_flatten_results($rows, 'field_id'))->get();
         $fields = low_associate_results($query->result_array(), 'field_id');
         // Channels
         $query = ee()->db->select('channel_id, channel_name, channel_title, cat_group')->from('channels')->where_in('channel_id', low_flatten_results($rows, 'channel_id'))->get();
         $channels = low_associate_results($query->result_array(), 'channel_id');
         // Statuses
         $query = ee()->db->select('status_id, status')->from('statuses')->get();
         $statuses = low_flatten_results($query->result_array(), 'status', 'status_id');
         // --------------------------------------
         // Loop through rows and populate new table
         // --------------------------------------
         foreach ($rows as $row) {
             // Skip non-existent channels or fields
             if (!(isset($channels[$row['channel_id']]) && isset($fields[$row['field_id']]))) {
                 continue;
             }
             // Shortcut to related channel and field
             $channel = $channels[$row['channel_id']];
             $field = $fields[$row['field_id']];
             // Decode the settings
             $settings = decode_reorder_settings($row['settings']);
             // Initiate parameter array
             $params = array();
             // --------------------------------------
             // Set Channel parameter
             // --------------------------------------
             $params['channel'] = $channels[$row['channel_id']]['channel_name'];
             // --------------------------------------
             // Set Category parameter
             // --------------------------------------
             if (!empty($settings['categories'])) {
                 $params['category'] = implode('|', array_filter($settings['categories']));
             }
             // --------------------------------------
             // Set Status parameter
             // --------------------------------------
             if (!empty($settings['statuses'])) {
                 $tmp = array();
                 foreach ($settings['statuses'] as $status_id) {
                     $tmp[] = $statuses[$status_id];
                 }
                 $params['status'] = implode('|', array_unique($tmp));
                 unset($tmp);
             }
             // --------------------------------------
             // Set Show Expired parameter
             // --------------------------------------
             if (!empty($settings['show_expired']) && ($settings['show_expired'] == 'y' or $settings['show_expired'] === TRUE)) {
                 $params['show_expired'] = 'yes';
             }
             // --------------------------------------
             // Set Show Future Entries parameter
             // --------------------------------------
             if (!empty($settings['show_future']) && ($settings['show_future'] == 'y' or $settings['show_future'] === TRUE)) {
                 $params['show_future_entries'] = 'yes';
             }
             // --------------------------------------
             // Get permissions from settings
             // --------------------------------------
             $permissions = !empty($settings['permissions']) ? low_array_encode($settings['permissions']) : '';
             // --------------------------------------
             // Set Category Option value
             // --------------------------------------
             $cat_option = $settings['category_options'];
             // --------------------------------------
             // Set Category Groups value, if option is 'one'
             // --------------------------------------
             if ($cat_option == 'one' && $channel['cat_group']) {
                 $cat_groups = low_linearize(explode('|', $channel['cat_group']));
             } else {
                 $cat_groups = '';
             }
             // --------------------------------------
             // Set clear_cache value
             // --------------------------------------
             $clear_cache = !empty($settings['clear_cache']) && $settings['clear_cache'] == 'n' ? 'n' : 'y';
             // --------------------------------------
             // Sort order setting
             // --------------------------------------
             $reverse = @$settings['sort_order'] == 'desc';
             // --------------------------------------
             // Insert new row
             // --------------------------------------
             $set_id = ee()->low_reorder_set_model->insert(array('site_id' => $field['site_id'], 'set_label' => $channel['channel_title'] . ', ' . $field['field_label'], 'set_notes' => $field['field_instructions'], 'new_entries' => $reverse ? 'prepend' : 'append', 'clear_cache' => $clear_cache, 'channels' => low_linearize(array($row['channel_id'])), 'cat_option' => $cat_option, 'cat_groups' => $cat_groups, 'parameters' => low_array_encode($params), 'permissions' => $permissions));
             // --------------------------------------
             // Get current values
             // --------------------------------------
             ee()->db->select("GROUP_CONCAT(DISTINCT d.entry_id ORDER BY d.field_id_{$field['field_id']} ASC SEPARATOR '|') AS entries", FALSE)->from('channel_data d')->where('d.channel_id', $channel['channel_id'])->where("d.field_id_{$field['field_id']} !=", '');
             if ($cat_option != 'one') {
                 ee()->db->select("'0' AS cat_id", FALSE);
             } else {
                 ee()->db->select('cp.cat_id')->from('category_posts cp')->where('d.entry_id = cp.entry_id')->group_by('cat_id');
             }
             $query = ee()->db->get();
             foreach ($query->result() as $row) {
                 $entries = low_delinearize($row->entries);
                 if ($reverse) {
                     $entries = array_reverse($entries);
                 }
                 ee()->low_reorder_order_model->insert(array('set_id' => $set_id, 'cat_id' => $row->cat_id, 'sort_order' => low_linearize($entries)));
             }
         }
     }
     // end if $rows
     // --------------------------------------
     // Change low_reorder fieldtype to text
     // --------------------------------------
     ee()->db->where('field_type', $this->package);
     ee()->db->update('channel_fields', array('field_type' => 'text', 'field_settings' => low_array_encode(array('field_content_type' => 'text'))));
     // --------------------------------------
     // Remove low_reorder fieldtype
     // --------------------------------------
     ee()->db->where('name', $this->package);
     ee()->db->delete('fieldtypes');
     // --------------------------------------
     // Drop old table
     // --------------------------------------
     ee()->db->query("DROP TABLE IF EXISTS `exp_low_reorder_settings`");
     // --------------------------------------
     // Enable extension
     // --------------------------------------
     foreach ($this->hooks as $hook) {
         $this->_add_hook($hook);
     }
 }