Ejemplo n.º 1
0
 /**
  * @param bool $arr
  * @return array
  */
 public function getCategories($arr = false)
 {
     if ($this->id) {
         if (!count($this->categories)) {
             /* @var SPdb $db */
             $db = SPFactory::db();
             /* get fields */
             try {
                 $c = array('id' => $this->id, 'oType' => 'entry');
                 if (!($this->approved || (SPRequest::task() == 'entry.edit' || Sobi::Can('entry.access.unapproved_any')))) {
                     $c['copy'] = '0';
                 }
                 $db->select(array('pid', 'position', 'validSince', 'validUntil'), 'spdb_relations', $c, 'position');
                 $categories = $db->loadAssocList('pid');
                 /* validate categories - case some of them has been deleted */
                 $cats = array_keys($categories);
                 if (count($cats)) {
                     $cats = $db->select('id', 'spdb_object', array('id' => $cats))->loadResultArray();
                 }
                 if (count($categories)) {
                     foreach ($categories as $i => $c) {
                         if (!$this->parent) {
                             $this->parent = $i;
                         }
                         if (!in_array($i, $cats)) {
                             unset($categories[$i]);
                         }
                     }
                 }
                 /* push the main category to the top of this array */
                 if (isset($categories[$this->parent])) {
                     $main = $categories[$this->parent];
                     unset($categories[$this->parent]);
                     $this->categories[$this->parent] = $main;
                 }
                 foreach ($categories as $cid => $cat) {
                     $this->categories[$cid] = $cat;
                 }
                 if ($this->categories) {
                     $labels = SPLang::translateObject(array_keys($this->categories), array('name', 'alias'), 'category');
                     foreach ($labels as $t) {
                         $this->categories[$t['id']]['name'] = $t['value'];
                         $this->categories[$t['id']]['alias'] = $t['alias'];
                     }
                 }
                 Sobi::Trigger($this->name(), ucfirst(__FUNCTION__), array(&$this->categories));
             } catch (SPException $x) {
                 Sobi::Error($this->name(), SPLang::e('CANNOT_GET_RELATIONS_DB_ERR', $x->getMessage()), SPC::ERROR, 500, __LINE__, __FILE__);
             }
         }
         if ($arr) {
             return array_keys($this->categories);
         } else {
             return $this->categories;
         }
     } else {
         return array();
     }
 }
Ejemplo n.º 2
0
 /**
  * @param string $task
  */
 function __construct($task)
 {
     SPLoader::loadClass('base.exception');
     set_error_handler('SPExceptionHandler');
     $this->_err = ini_set('display_errors', 'on');
     $this->_mem = memory_get_usage();
     $this->_time = microtime();
     $this->_task = $task;
     /* load all needed classes */
     SPLoader::loadClass('base.factory');
     SPLoader::loadClass('base.object');
     SPLoader::loadClass('base.const');
     SPLoader::loadClass('base.filter');
     SPLoader::loadClass('base.request');
     SPLoader::loadClass('sobi');
     SPLoader::loadClass('base.config');
     /* authorise access */
     $this->checkAccess();
     /* initialise mainframe interface to CMS */
     $this->_mainframe =& SPFactory::mainframe();
     /* get sid if any */
     $this->_sid = SPRequest::sid();
     /* determine section */
     $this->getSection();
     /* initialise config */
     $this->createConfig();
     ini_set('display_errors', Sobi::Cfg('debug.display_errors', false));
     $this->_deb = error_reporting(Sobi::Cfg('debug.level', 0));
     /* trigger plugin */
     Sobi::Trigger('AdminStart');
     /* initialise translator and load language files */
     SPLoader::loadClass('cms.base.lang');
     SPLang::setLang(Sobi::Lang());
     try {
         SPLang::registerDomain('admin');
     } catch (SPException $x) {
         Sobi::Error('CoreCtrl', SPLang::e('Cannot register language domain: %s.', $x->getMessage()), SPC::WARNING, 0, __LINE__, __FILE__);
     }
     /* load admin html files */
     SPFactory::header()->initBase(true);
     /** @noinspection PhpParamsInspection */
     if ($this->_section) {
         $sectionName = SPLang::translateObject($this->_section, 'name', 'section');
         SPFactory::registry()->set('current_section_name', SPLang::clean($sectionName[$this->_section]['value']));
     }
     if ($this->_section && !Sobi::Cfg('section.template')) {
         SPFactory::config()->set('template', SPC::DEFAULT_TEMPLATE, 'section');
     }
     /* check if it wasn't plugin custom task */
     if (!Sobi::Trigger('custom', 'task', array($this, SPRequest::task()))) {
         /* if not, start to route */
         try {
             $this->route();
         } catch (SPException $x) {
             Sobi::Error('CoreCtrl', SPLang::e('Cannot route: %s.', $x->getMessage()), SPC::ERROR, 500, __LINE__, __FILE__);
         }
     }
     return true;
 }
Ejemplo n.º 3
0
 protected function entryData($getFields = true)
 {
     /** @var SPEntry $entry */
     $entry = $this->get('entry');
     $visitor = $this->get('visitor');
     $data = array();
     $data['section'] = array('_complex' => 1, '_data' => Sobi::Section(true), '_attributes' => array('id' => Sobi::Section(), 'lang' => Sobi::Lang(false)));
     $en = array();
     $en['name'] = array('_complex' => 1, '_data' => $entry->get('name'), '_attributes' => array('lang' => Sobi::Lang(false)));
     $en['created_time'] = $entry->get('createdTime');
     $en['updated_time'] = $entry->get('updatedTime');
     $en['valid_since'] = $entry->get('validSince');
     $en['valid_until'] = $entry->get('validUntil');
     $en['author'] = $entry->get('owner');
     $en['counter'] = $entry->get('counter');
     $en['approved'] = $entry->get('approved');
     $this->fixTimes($en);
     //       $mytime = date( 'Y-m-d H:i:s', time());
     if ($entry->get('state') == 0) {
         $en['state'] = 'unpublished';
     } else {
         if (strtotime($entry->get('validUntil')) != 0 && strtotime($entry->get('validUntil')) < time()) {
             $en['state'] = 'expired';
         } elseif (strtotime($entry->get('validSince')) != 0 && strtotime($entry->get('validSince')) > time()) {
             $en['state'] = 'pending';
         } else {
             $en['state'] = 'published';
         }
     }
     $en['url'] = Sobi::Url(array('pid' => $entry->get('parent'), 'sid' => $entry->get('id'), 'title' => Sobi::Cfg('sef.alias', true) ? $entry->get('nid') : $entry->get('name')), true, true, true);
     if (Sobi::Can('entry', 'edit', '*') || Sobi::My('id') == $entry->get('owner') && Sobi::Can('entry', 'edit', 'own')) {
         $en['edit_url'] = Sobi::Url(array('task' => 'entry.edit', 'sid' => $entry->get('id')));
     }
     if (Sobi::Can('entry', 'manage', '*')) {
         $en['approve_url'] = Sobi::Url(array('task' => $entry->get('approved') ? 'entry.unapprove' : 'entry.approve', 'sid' => $entry->get('id')));
     }
     if ($entry->get('owner') == Sobi::My('id') && Sobi::Can('entry', 'delete', 'own') || Sobi::Can('entry', 'delete', '*')) {
         $en['delete_url'] = Sobi::Url(array('task' => 'entry.delete', 'sid' => $entry->get('id')));
     }
     if (Sobi::Can('entry', 'publish', '*') || Sobi::My('id') == $entry->get('owner') && Sobi::Can('entry', 'publish', 'own')) {
         $en['publish_url'] = Sobi::Url(array('task' => $entry->get('state') ? 'entry.unpublish' : 'entry.publish', 'sid' => $entry->get('id')));
     }
     $cats = $entry->get('categories');
     $categories = array();
     if (count($cats)) {
         $cn = SPLang::translateObject(array_keys($cats), array('name', 'alias'), 'category');
     }
     $primaryCat = $entry->get('parent');
     foreach ($cats as $cid => $cat) {
         $cAttr = array('lang' => Sobi::Lang(false), 'id' => $cat['pid'], 'alias' => $cat['alias'], 'position' => $cat['position'], 'url' => Sobi::Url(array('sid' => $cat['pid'], 'title' => Sobi::Cfg('sef.alias', true) ? $cat['alias'] : $cat['name'])));
         if ($cat['pid'] == $primaryCat) {
             $cAttr['primary'] = 'true';
         }
         $categories[] = array('_complex' => 1, '_data' => SPLang::clean($cn[$cid]['value']), '_attributes' => $cAttr);
     }
     $en['categories'] = $categories;
     $en['meta'] = array('description' => $entry->get('metaDesc'), 'keys' => $this->metaKeys($entry), 'author' => $entry->get('metaAuthor'), 'robots' => $entry->get('metaRobots'));
     if ($getFields) {
         $fields = $entry->getFields();
         if (count($fields)) {
             $en['fields'] = $this->fieldStruct($fields, 'details');
         }
     }
     $this->menu($data);
     $this->alphaMenu($data);
     $data['entry'] = array('_complex' => 1, '_data' => $en, '_attributes' => array('id' => $entry->get('id'), 'nid' => $entry->get('nid'), 'version' => $entry->get('version')));
     $data['visitor'] = $this->visitorArray($visitor);
     return $data;
 }
Ejemplo n.º 4
0
 protected function entry($entry, $manager, $noId = false)
 {
     $en = array();
     if (is_numeric($entry)) {
         $en = $this->cachedEntry($entry, $manager, $noId);
     }
     if (!is_array($en) || !count($en)) {
         if (is_numeric($entry)) {
             $entry = SPFactory::Entry($entry);
         }
         $en['id'] = $entry->get('id');
         $en['nid'] = $entry->get('nid');
         $en['name'] = array('_complex' => 1, '_data' => $entry->get('name'), '_attributes' => array('lang' => Sobi::Lang(false)));
         $en['url_array'] = array('title' => Sobi::Cfg('sef.alias', true) ? $entry->get('nid') : $entry->get('name'), 'pid' => $entry->get('primary'), 'sid' => $entry->get('id'));
         if (strstr(SPRequest::task(), 'search') || $noId || Sobi::Cfg('section.force_category_id', false) && SPRequest::sid() == Sobi::Section()) {
             $en['url'] = Sobi::Url(array('title' => Sobi::Cfg('sef.alias', true) ? $entry->get('nid') : $entry->get('name'), 'pid' => $entry->get('primary'), 'sid' => $entry->get('id')));
         } else {
             $en['url'] = Sobi::Url(array('title' => Sobi::Cfg('sef.alias', true) ? $entry->get('nid') : $entry->get('name'), 'pid' => SPRequest::sid(), 'sid' => $entry->get('id')));
         }
         if (Sobi::Cfg('list.entry_meta', true)) {
             $en['meta'] = array('description' => $entry->get('metaDesc'), 'keys' => $this->metaKeys($entry), 'author' => $entry->get('metaAuthor'), 'robots' => $entry->get('metaRobots'));
         }
         if ($manager || Sobi::My('id') && Sobi::My('id') == $entry->get('owner') && Sobi::Can('entry', 'edit', 'own', Sobi::Section())) {
             $en['edit_url'] = Sobi::Url(array('task' => 'entry.edit', 'pid' => SPRequest::sid(), 'sid' => $entry->get('id')));
         } else {
             if (isset($en['edit_url'])) {
                 unset($en['edit_url']);
             }
         }
         $en['edit_url_array'] = array('task' => 'entry.edit', 'pid' => SPRequest::sid(), 'sid' => $entry->get('id'));
         $en['created_time'] = $entry->get('createdTime');
         $en['updated_time'] = $entry->get('updatedTime');
         $en['valid_since'] = $entry->get('validSince');
         $en['valid_until'] = $entry->get('validUntil');
         $this->fixTimes($en);
         if ($entry->get('state') == 0) {
             $en['state'] = 'unpublished';
         } else {
             if (strtotime($entry->get('validUntil')) != 0 && strtotime($entry->get('validUntil')) < time()) {
                 $en['state'] = 'expired';
             } elseif (strtotime($entry->get('validSince')) != 0 && strtotime($entry->get('validSince')) > time()) {
                 $en['state'] = 'pending';
             } else {
                 $en['state'] = 'published';
             }
         }
         $en['author'] = $entry->get('owner');
         $en['counter'] = $entry->get('counter');
         $en['approved'] = $entry->get('approved');
         //		$en[ 'confirmed' ] = $entry->get( 'confirmed' );
         if (Sobi::Cfg('list.entry_cats', true)) {
             $cats = $entry->get('categories');
             $categories = array();
             if (count($cats)) {
                 $cn = SPLang::translateObject(array_keys($cats), array('name', 'alias'));
             }
             foreach ($cats as $cid => $cat) {
                 $categories[] = array('_complex' => 1, '_data' => SPLang::clean($cn[$cid]['value']), '_attributes' => array('lang' => Sobi::Lang(false), 'id' => $cat['pid'], 'position' => $cat['position'], 'url' => Sobi::Url(array('sid' => $cat['pid'], 'title' => Sobi::Cfg('sef.alias', true) ? $cat['alias'] : $cat['name']))));
             }
             $en['categories'] = $categories;
         }
         $fields = $entry->getFields();
         if (count($fields)) {
             //				foreach ( $fields as $field ) {
             //					if ( $field->enabled( 'vcard' ) && $field->get( 'id' ) != Sobi::Cfg( 'entry.name_field' ) ) {
             //						$struct = $field->struct();
             //						$options = null;
             //						if ( isset( $struct[ '_options' ] ) ) {
             //							$options = $struct[ '_options' ];
             //							unset( $struct[ '_options' ] );
             //						}
             //						$f[ $field->get( 'nid' ) ] = array(
             //							'_complex' => 1,
             //							'_data' => array(
             //								'label' => array(
             //									'_complex' => 1,
             //									'_data' => $field->get( 'name' ),
             //									'_attributes' => array( 'lang' => Sobi::Lang( false ), 'show' => $field->get( 'withLabel' ) )
             //								),
             //								'data' => $struct,
             //							),
             //							'_attributes' => array( 'id' => $field->get( 'id' ), 'type' => $field->get( 'type' ), 'suffix' => $field->get( 'suffix' ), 'position' => $field->get( 'position' ), 'css_class' => ( strlen( $field->get( 'cssClass' ) ) ? $field->get( 'cssClass' ) : 'spField' ) )
             //						);
             //						if ( Sobi::Cfg( 'list.field_description', false ) ) {
             //							$f[ $field->get( 'nid' ) ][ '_data' ][ 'description' ] = array( '_complex' => 1, '_xml' => 1, '_data' => $field->get( 'description' ) );
             //						}
             //						if ( $options ) {
             //							$f[ $field->get( 'nid' ) ][ '_data' ][ 'options' ] = $options;
             //						}
             //						if ( isset( $struct[ '_xml_out' ] ) && count( $struct[ '_xml_out' ] ) ) {
             //							foreach ( $struct[ '_xml_out' ] as $k => $v )
             //								$f[ $field->get( 'nid' ) ][ '_data' ][ $k ] = $v;
             //						}
             //					}
             //				}
             $en['fields'] = $this->fieldStruct($fields, 'vcard');
         }
         SPFactory::cache()->addObj($entry, 'entry', $entry->get('id'))->addObj($en, 'entry_struct', $entry->get('id'));
         unset($en['url_array']);
         unset($en['edit_url_array']);
         unset($entry);
     }
     $en['counter'] = $this->getNonStaticData($en['id'], 'counter');
     /*
      * this is te special case:
      * no matter what task we currently have - if someone called this we need the data for the V-Card
      * Soe we have to trigger all these plugins we need and therefore also fake the task
      */
     $task = 'list.custom';
     SPFactory::registry()->set('task', $task);
     Sobi::Trigger('List', ucfirst(__FUNCTION__), array(&$en));
     return $en;
 }
Ejemplo n.º 5
0
 public function fetchElement($name, &$label)
 {
     $sid = $this->settings()->get('sid');
     $this->oType = 'section';
     switch ($name) {
         case 'sid':
             $params = array('id' => 'sid', 'size' => 5, 'class' => 'text_area', 'style' => 'text-align: center;', 'readonly' => 'readonly');
             return SPHtml_Input::text('jform[params][sid]', $sid, $params);
             break;
         case 'tplFile':
         case 'modalTemplate':
             return $this->tplFile($this->settings()->get('tplFile'), $name == 'modalTemplate');
             break;
         case 'spOrder':
             return $this->ordering($this->settings()->get('spOrder'));
             break;
         case 'spLimit':
             return $this->limits($this->settings()->get('spLimit'));
             break;
         case 'cid':
             if (!in_array($sid, array_keys($this->sections))) {
                 $catName = SPLang::translateObject($sid, array('name'));
                 if (isset($catName[$sid]['value'])) {
                     $this->oName = $catName[$sid]['value'];
                     $this->oType = 'category';
                 }
             }
             return $this->getCat();
             break;
         default:
             $sections = array();
             if (count($this->sections)) {
                 $sections[] = Sobi::Txt('SELECT_SECTION');
                 foreach ($this->sections as $section) {
                     if (Sobi::Can('section', 'access', 'valid', $section->id)) {
                         $s = SPFactory::Model('section');
                         $s->extend($section);
                         $sections[$s->get('id')] = $s->get('name');
                     }
                 }
             }
             $params = array('id' => 'spsection', 'class' => 'text_area required');
             return SPHtml_Input::select('jform[params][section]', $sections, $this->settings()->get('section'), false, $params);
             break;
     }
 }
Ejemplo n.º 6
0
 protected function sections()
 {
     $subMenu = array();
     try {
         $sections = SPFactory::db()->select('id', 'spdb_object', array('oType' => 'section'), 'id')->loadResultArray();
     } catch (SPException $x) {
         Sobi::Error($this->name(), SPLang::e('DB_REPORTS_ERR', $x->getMessage()), SPC::WARNING, 500, __LINE__, __FILE__);
     }
     $sectionLength = 30;
     if (count($sections)) {
         $sections = SPLang::translateObject($sections, 'name');
         $subMenu = array();
         foreach ($sections as $section) {
             $subMenu[] = array('type' => 'url', 'task' => '', 'url' => array('sid' => $section['id']), 'label' => SPLang::clean(strlen($section['value']) < $sectionLength ? $section['value'] : substr($section['value'], 0, $sectionLength - 3) . ' ...'), 'icon' => 'file', 'element' => 'button');
         }
     }
     return $subMenu;
 }
Ejemplo n.º 7
0
 /**
  * Returns linked lists ( names or ids ) of parent elements to the given id
  *
  * @param int $id - the id of object
  * @param bool $names - names or ids only
  * @param bool $parents
  * @param bool $join
  * @return array
  */
 public function getParentPath($id, $names = false, $parents = false, $join = false)
 {
     $db = SPFactory::db();
     if (!is_numeric($id)) {
         return false;
     }
     $ident = 'relations_path' . ($names ? '_names' : '') . ($parents ? '_parents' : '') . ($join ? '_join' : '');
     $cached = SPFactory::cache()->getVar($ident, $id);
     if ($cached) {
         return $cached;
     } else {
         $cid = $id;
     }
     $path = $parents ? array() : array($id);
     while ($id > 0) {
         try {
             // it doesn't make sense but it happened because of a bug in the SigsiuTree category selector
             $id = $db->select('pid', 'spdb_relations', array('id' => $id, '!pid' => $id))->loadResult();
             if ($id) {
                 $path[] = (int) $id;
             }
         } catch (SPException $x) {
             Sobi::Error(__FUNCTION__, SPLang::e('CANNOT_GET_PARENT_ID', $x->getMessage()), SPC::WARNING, 500, __LINE__, __CLASS__);
         }
     }
     if ($names && count($path)) {
         $names = SPLang::translateObject($path, array('name', 'alias'), array('section', 'category', 'entry'));
         if (is_array($names) && !empty($names)) {
             foreach ($path as $i => $id) {
                 if ($join) {
                     $path[$i] = array('id' => $id, 'name' => $names[$id]['value'], 'alias' => $names[$id]['alias']);
                 } else {
                     $path[$i] = $names[$id]['value'];
                 }
             }
         }
     }
     $path = array_reverse($path);
     SPFactory::cache()->addVar($path, $ident, $cid);
     return $path;
 }
Ejemplo n.º 8
0
 protected function tree()
 {
     $selector = null;
     $selectedCategories = array();
     $tree = SPFactory::Instance('mlo.tree', Sobi::Cfg('list.categories_ordering'), array('preventParents' => !$this->catsWithChilds));
     $tree->setHref('#');
     $tree->setTask('category.chooser');
     $tree->setId($this->nid);
     $tree->disable(Sobi::Section());
     $tree->init(Sobi::Section());
     $params = array();
     $params['maxcats'] = $this->catsMaxLimit;
     $params['field'] = $this->nid;
     $params['preventParents'] = !$this->catsWithChilds;
     $setheight = '';
     if ($this->height > 0) {
         $setheight = " style=\"height: {$this->height}px;\"";
     }
     $addBtParams = array('class' => 'btn');
     $delBtParams = array('class' => 'btn');
     $selectParams = array();
     SPFactory::header()->addJsFile('opt.field_category_tree')->addJsCode('SobiPro.jQuery( document ).ready( function () { new SigsiuTreeEdit( ' . json_encode($params) . '); } );');
     $selector = $selector . '<div class="tree"' . $setheight . '>' . $tree->display(true) . '</div>';
     if (count($this->_selectedCats)) {
         $selected = SPLang::translateObject($this->_selectedCats, 'name', 'category');
         if (count($selected)) {
             $count = 0;
             foreach ($selected as $category) {
                 if ($category['id'] == $this->sid && SPRequest::task() != 'entry.add') {
                     continue;
                 }
                 $selectedCategories[$category['id']] = $category['value'];
                 $count++;
                 if ($count == $this->catsMaxLimit) {
                     break;
                 }
             }
         }
     }
     if (count($selectedCategories) >= $this->catsMaxLimit) {
         $addBtParams['disabled'] = 'disabled';
         $selectParams['readonly'] = 'readonly';
     } elseif (!count($selectedCategories)) {
         $delBtParams['disabled'] = 'disabled';
     }
     $selector .= '<div class="selected">';
     $selector .= SPHtml_Input::select($this->nid . '_list', $selectedCategories, null, true, $selectParams);
     $selector .= SPHtml_Input::hidden($this->nid, 'json://' . json_encode(array_keys($selectedCategories)));
     $selector .= '</div>';
     $selector .= '<div class="buttons">';
     $selector .= SPHtml_Input::button('addCategory', Sobi::Txt('CC.ADD_BT'), $addBtParams);
     $selector .= SPHtml_Input::button('removeCategory', Sobi::Txt('CC.DEL_BT'), $delBtParams);
     $selector .= '</div>';
     $selector = '<div class="SigsiuTree" id="' . $this->nid . '_canvas">' . $selector . '</div>';
     if ($this->modal) {
         $selector = SPHtml_Input::modalWindow(Sobi::Txt('EN.SELECT_CAT_PATH'), $this->nid . '_modal', $selector, 'modaltree modal hide', 'CLOSE', null);
         $field = SPHtml_Input::button('select-category', Sobi::Txt('EN.SELECT_CAT_PATH'), array('class' => 'btn btn-primary', 'href' => '#' . $this->nid . '_modal', 'data-toggle' => 'modal', 'id' => $this->nid . '_modal_fire'));
         return $field . $selector;
     } else {
         return $selector;
     }
 }
Ejemplo n.º 9
0
 /**
  * @param string $type
  * @param bool $recursive
  * @param int $state
  * @param bool $name
  * @return array
  */
 public function getChilds($type = 'entry', $recursive = false, $state = 0, $name = false)
 {
     static $lang = null;
     if (!$lang) {
         $lang = Sobi::Lang(false);
     }
     $childs = SPFactory::cache()->getVar('childs_' . $lang . $type . ($recursive ? '_recursive' : '') . ($name ? '_full' : '') . $state, $this->id);
     if ($childs) {
         return $childs == SPC::NO_VALUE ? array() : $childs;
     }
     $db = SPFactory::db();
     $childs = array();
     try {
         $cond = array('pid' => $this->id);
         if ($state) {
             $cond['so.state'] = $state;
             $cond['so.approved'] = $state;
             $tables = $db->join(array(array('table' => 'spdb_object', 'as' => 'so', 'key' => 'id'), array('table' => 'spdb_relations', 'as' => 'sr', 'key' => 'id')));
             $db->select(array('sr.id', 'sr.oType'), $tables, $cond);
         } else {
             $db->select(array('id', 'oType'), 'spdb_relations', $cond);
         }
         $results = $db->loadAssocList('id');
     } catch (SPException $x) {
         Sobi::Error($this->name(), SPLang::e('CANNOT_GET_CHILDS_DB_ERR', $x->getMessage()), SPC::WARNING, 0, __LINE__, __FILE__);
     }
     if ($recursive && count($results)) {
         foreach ($results as $cid) {
             $this->rGetChilds($results, $cid, $type);
         }
     }
     if (count($results)) {
         if ($type == 'all') {
             foreach ($results as $id => $r) {
                 $childs[$id] = $r['id'];
             }
         } else {
             foreach ($results as $id => $r) {
                 if ($r['oType'] == $type) {
                     $childs[$id] = $id;
                 }
             }
         }
     }
     if ($name && count($childs)) {
         $names = SPLang::translateObject($childs, array('name', 'alias'), $type);
         if (is_array($names) && !empty($names)) {
             foreach ($childs as $i => $id) {
                 $childs[$i] = array('name' => $names[$id]['value'], 'alias' => $names[$id]['alias']);
             }
         }
     }
     if (!$state) {
         SPFactory::cache()->addVar($childs, 'childs_' . $lang . $type . ($recursive ? '_recursive' : '') . ($name ? '_full' : '') . $state, $this->id);
     }
     return $childs;
 }
Ejemplo n.º 10
0
 /**
  * @param string $task
  * @return \SobiProCtrl
  */
 function __construct($task)
 {
     $this->_mem = memory_get_usage();
     $this->_time = microtime(true);
     SPLoader::loadClass('base.exception');
     set_error_handler('SPExceptionHandler');
     $this->_err = ini_set('display_errors', 'on');
     $this->_task = $task;
     /* load all needed classes */
     SPLoader::loadClass('base.const');
     SPLoader::loadClass('base.factory');
     SPLoader::loadClass('base.object');
     SPLoader::loadClass('base.filter');
     SPLoader::loadClass('base.request');
     SPLoader::loadClass('sobi');
     SPLoader::loadClass('base.config');
     SPLoader::loadClass('cms.base.lang');
     /* get sid if any */
     $this->_sid = SPRequest::sid();
     /* determine section */
     $access = $this->getSection();
     /* initialise mainframe interface to CMS */
     $this->_mainframe = SPFactory::mainframe();
     /* initialise config */
     $this->createConfig();
     ini_set('display_errors', Sobi::Cfg('debug.display_errors', false));
     $this->_deb = error_reporting(Sobi::Cfg('debug.level', 0));
     /* trigger plugin */
     Sobi::Trigger('Start');
     /* initialise translator and load language files */
     SPLang::setLang(Sobi::Lang(false));
     try {
         SPLang::registerDomain('site');
     } catch (SPException $x) {
         Sobi::Error('CoreCtrl', SPLang::e('Cannot register language domain: %s.', $x->getMessage()), SPC::WARNING, 0, __LINE__, __FILE__);
     }
     if (!$access) {
         if (Sobi::Cfg('redirects.section_enabled', false)) {
             $redirect = Sobi::Cfg('redirects.section_url', null);
             $msg = Sobi::Cfg('redirects.section_msg', SPLang::e('UNAUTHORIZED_ACCESS', SPRequest::task()));
             $msgtype = Sobi::Cfg('redirects.section_msgtype', 'message');
             Sobi::Redirect(Sobi::Url($redirect), Sobi::Txt($msg), $msgtype, true);
         } else {
             SPFactory::mainframe()->runAway('You have no permission to access this site', 403, null, true);
         }
     }
     /* load css and js files */
     SPFactory::header()->initBase();
     $sectionName = SPLang::translateObject($this->_section, 'name', 'section');
     if ($this->_section) {
         SPFactory::registry()->set('current_section_name', SPLang::clean($sectionName[$this->_section]['value']));
     }
     $start = array($this->_mem, $this->_time);
     SPFactory::registry()->set('start', $start);
     /* check if it wasn't plugin custom task */
     if (!Sobi::Trigger('custom', 'task', array(&$this, SPRequest::task()))) {
         /* if not, start to route */
         try {
             $this->route();
         } catch (SPException $x) {
             if (defined('SOBI_TESTS')) {
                 Sobi::Error('CoreCtrl', SPLang::e('Cannot route: %s.', $x->getMessage()), SPC::ERROR, 500, __LINE__, __FILE__);
             } else {
                 SPFactory::mainframe()->setRedirect(Sobi::Reg('live_site'), SPLang::e('PAGE_NOT_FOUND'), SPC::ERROR_MSG, true);
             }
         }
     }
     return true;
 }