public function post_save($entry_id, $data, $option) { if (empty($option)) { return; } // Get the url title first $entry = ee()->db->select('url_title, channel_id')->from('channel_titles')->where('entry_id', $entry_id)->get()->row_array(); if (!isset($entry['url_title'])) { return; } $url_title = $entry['url_title']; $channel_id = $entry['channel_id']; $parent_entry_id = 0; // Now figure where to drop this entry if (count($option) < 2) { // Only one place we can drop it $parent_entry_id = current($option); } else { // we have to pick a parent $parent_entry_id = $option[rand(0, count($option) - 1)]; } // Let structure do the heavy lifting require_once PATH_THIRD . 'structure/sql.structure.php'; $structure_sql = new Sql_structure(); $channel_type = $structure_sql->get_channel_type($channel_id); // If the current channel is not assigned as any sort of Structure channel, then stop if ($channel_type == 'page') { $site_pages = $structure_sql->get_site_pages(); // get form fields $entry_data = array('channel_id' => $channel_id, 'entry_id' => $entry_id, 'uri' => $url_title, 'template_id' => $structure_sql->get_default_template($channel_id), 'listing_cid' => 0, 'hidden' => 'n'); $site_pages = $structure_sql->get_site_pages(); if (!isset($site_pages['uris'][$parent_entry_id])) { return; } $entry_data['parent_id'] = $parent_entry_id; $parent_uri = $site_pages['uris'][$parent_entry_id] . '/'; $entry_data['uri'] = $structure_sql->create_page_uri($parent_uri, $entry_data['uri']); require_once PATH_THIRD . 'structure/mod.structure.php'; $structure_model = new Structure(); $structure_model->set_data($entry_data); } // Cleanup unset($structure_sql); unset($structure_model); // We need to update the config->item('site_pages') // now other wise it won't register for the next loop $res = ee()->db->select('site_pages')->from('sites')->where('site_id', '1')->get()->row_array(); ee()->config->set_item('site_pages', unserialize(base64_decode($res['site_pages']))); }
/** * Get page links of specified module */ function get_page_links($module = '') { $links = array(); $select_text = 'Select a page...'; if ($module == 'Pages' || $module == 'Structure') { // get site pages $this->EE->db->select('site_pages'); $this->EE->db->where('site_id', $this->site_id); $query = $this->EE->db->get('sites'); $site_pages = unserialize(base64_decode($query->row('site_pages'))); $site_pages = $site_pages[$this->site_id]; } if ($module == 'Pages') { if (isset($site_pages['uris']) && count($site_pages['uris'])) { $entry_ids = array_keys($site_pages['uris']); $this->EE->db->select(array('entry_id', 'title')); $this->EE->db->where_in('entry_id', $entry_ids); $query = $this->EE->db->get('channel_titles'); foreach ($query->result() as $row) { if (isset($site_pages['uris'][$row->entry_id])) { $title = $row->title; $url = $this->_create_url($site_pages['uris'][$row->entry_id]); $links[] = array($title, $url); } } } } else { if ($module == 'Structure') { // include structure SQL model include_once PATH_THIRD . 'structure/sql.structure.php'; // get structure data $sql = new Sql_structure(); $data = $sql->get_data(); foreach ($data as $item) { if (isset($site_pages['uris'][$item['entry_id']])) { $title = str_repeat("-", $item['depth']) . $item['title']; $url = $this->_create_url($site_pages['uris'][$item['entry_id']]); $links[] = array($title, $url); } } } else { if ($module == 'Navee') { // include navee class include_once PATH_THIRD . 'navee/mod.navee.php'; $navee = new Navee(); // get navee navs $this->EE->db->select('navigation_id, nav_name'); $this->EE->db->where('site_id', $this->site_id); $query = $this->EE->db->get('navee_navs'); $navee_navs = $query->result_array(); // get navee data foreach ($navee_navs as $navee_nav) { $data = $navee->_getNav($navee_nav['navigation_id']); array_push($links, array('NavEE Menu ' . $navee_nav['nav_name'], '')); $links = array_merge($links, $this->_parse_navee_links($data)); } $select_text = 'Select a NavEE item...'; } } } if (count($links)) { array_unshift($links, array($select_text, '')); } return $links; }
public function settings_form() { $this->EE->lang->load('content'); $this->EE->load->helper(array('html', 'form')); $query = $this->EE->db->select('group_name, template_id, template_name') ->join('template_groups', 'templates.group_id = template_groups.group_id') ->where('templates.site_id', $this->EE->config->item('site_id')) ->order_by('group_order ASC, template_name ASC') ->get('templates'); $templates = array(); foreach ($query->result() as $row) { if ( ! isset($templates[$row->group_name])) { $templates[$row->group_name] = array(); } $templates[$row->group_name][$row->template_id] = $row->template_name; } $template_field_name = $this->is_structure_installed() ? 'structure__template_id' : 'pages__pages_template_id'; $vars['value_options'] = array( 'status' => array(), $template_field_name => array(), 'new_channel' => array(), ); $vars['fields_by_id'] = array('' => array()); $channels_by_field_group = array(); $channel_titles_by_field_group = array(); $vars['channels'] = array( '' => 'Choose a channel', ); $query = $this->EE->db->select('channel_id, field_group, status_group, channel_title') ->where('site_id', $this->EE->config->item('site_id')) ->get('channels'); foreach ($query->result() as $row) { $channels_by_field_group[$row->field_group][] = $row->channel_id; $channel_titles_by_field_group[$row->field_group][] = $row->channel_title; $channels_by_status_group[$row->status_group][] = $row->channel_id; } foreach ($query->result() as $row) { $vars['channels'][$row->channel_id] = $row->channel_title; $vars['fields_by_id'][$row->channel_id] = array(); $vars['value_options'][$template_field_name][$row->channel_id] = $templates; $vars['value_options']['status'][$row->channel_id] = array('open' => lang('open'), 'closed' => lang('closed')); $vars['value_options']['new_channel'][$row->channel_id] = array_combine($channels_by_field_group[$row->field_group], $channel_titles_by_field_group[$row->field_group]); } $query->free_result(); $query = $this->EE->db->select('status, group_id') ->where('site_id', $this->EE->config->item('site_id')) ->order_by('status_order') ->get('statuses'); $vars['statuses_by_id'] = array(); foreach ($query->result() as $row) { if (isset($channels_by_status_group[$row->group_id])) { foreach ($channels_by_status_group[$row->group_id] as $_channel_id) { $vars['value_options']['status'][$_channel_id][$row->status] = lang($row->status); } } } $query->free_result(); $query = $this->EE->db->select('group_id, group_name') ->where('site_id', $this->EE->config->item('site_id')) ->get('field_groups'); foreach ($query->result() as $row) { $row->fields = array(); $vars['fields_by_id']['group_'.$row->group_id] = array(); } $query->free_result(); $query = $this->EE->db->select('field_id, group_id, field_label') ->where('site_id', $this->EE->config->item('site_id')) ->get('channel_fields'); foreach ($query->result() as $row) { $vars['fields_by_id']['group_'.$row->group_id][$row->field_id] = $row->field_label; if (isset($channels_by_field_group[$row->group_id])) { foreach ($channels_by_field_group[$row->group_id] as $_channel_id) { $vars['fields_by_id'][$_channel_id][$row->field_id] = $row->field_label; } } } $query->free_result(); $vars['global_fields'] = array( '' => 'Choose a field', 'status' => 'Status', $this->is_structure_installed() ? 'structure__template_id' : 'pages__pages_template_id' => 'Template', 'new_channel' => 'Channel', ); if ($this->is_structure_installed()) { $parent_options = array(0 => 'NONE'); require_once PATH_THIRD.'structure/sql.structure.php'; $sql = new Sql_structure(); foreach ($sql->get_data() as $entry_id => $data) { //$parent_options[$entry_id] = str_repeat("--", $data['depth']).$data['title']; if ($data['depth'] == 0) { $parent_options[$entry_id] = $data['title']; } } for ($i = 0; $i <= 10; $i++) { $depth_options[$i] = 'Depth: '.$i; } foreach ($vars['channels'] as $channel_id => $channel_title) { $vars['value_options']['structure_parent'][$channel_id] = $parent_options; $vars['value_options']['structure_depth'][$channel_id] = $depth_options; } $this->EE->load->remove_package_path(PATH_THIRD.'structure/'); unset($sql); $vars['global_fields']['structure_parent'] = 'Structure Parent Entry'; $vars['global_fields']['structure_depth'] = 'Structure Page Depth'; } $this->settings = $this->get_settings(); if (empty($this->settings)) { /* $vars['settings'] = array( 'group_1' => array( 'status' => array( 'open' => array( 'hide_fields' => array(), ) ) ) ); */ $vars['settings'] = array( '' => array( '' => array( '' => array( 'hide_fields' => array(), ) ) ) ); } else { $vars['settings'] = $this->settings; } if (method_exists($this, 'ajax_'.$this->EE->input->get('view'))) { return call_user_func(array($this, 'ajax_'.$this->EE->input->get('view')), $vars); } $this->EE->load->library('javascript'); $this->EE->cp->load_package_js('EntryTypeFieldSettings'); $this->EE->cp->load_package_js('EntryTypeExtSettings'); foreach ($vars['settings'] as $channel_id => $row) { foreach ($row as $field_name => $type_options) { $value_options = isset($vars['value_options'][$field_name][$channel_id]) ? $vars['value_options'][$field_name][$channel_id] : array(); $options = array( 'rowTemplate' => preg_replace('/[\r\n\t]/', '', $this->EE->load->view('option_field_row_ext', array('channel_id' => $channel_id, 'field_name' => $field_name, 'i' => '{{INDEX}}', 'value' => '', 'label' => '', 'hide_fields' => array(), 'fields' => $vars['fields_by_id'][$channel_id], 'value_options' => $value_options), TRUE)), 'sortable' => false, 'fieldName' => 'channel_'.$channel_id, ); $this->EE->javascript->output(' new EntryTypeFieldSettings('.json_encode('#'.$channel_id.'_'.$field_name).', '.json_encode($options).'); '); } } return form_open('C=addons_extensions'.AMP.'M=save_extension_settings'.AMP.'file=entry_type') .$this->EE->load->view('options_ext', $vars, TRUE) .form_submit('', lang('submit'), 'class="submit"') .form_close(); }