getConfigGroupsTable() public static method

Get config groups table name
public static getConfigGroupsTable ( ) : string
return string
Ejemplo n.º 1
0
 protected function _indexPage(&$iaView)
 {
     if (!empty($_GET['group'])) {
         $this->_type = 'group';
         $this->_typeId = (int) $_GET['group'];
         iaBreadcrumb::preEnd(iaLanguage::get('usergroups'), IA_ADMIN_URL . 'usergroups/');
     } elseif (!empty($_GET['user'])) {
         $this->_type = 'user';
         $this->_typeId = (int) $_GET['user'];
         iaBreadcrumb::preEnd(iaLanguage::get('members'), IA_ADMIN_URL . 'members/');
     }
     $groupName = isset($this->_iaCore->requestPath[0]) ? $this->_iaCore->requestPath[0] : 'general';
     $groupData = $this->_iaDb->row_bind(iaDb::ALL_COLUMNS_SELECTION, '`name` = :name', array('name' => $groupName), iaCore::getConfigGroupsTable());
     if (empty($groupData)) {
         return iaView::errorPage(iaView::ERROR_NOT_FOUND);
     }
     $this->_setGroup($iaView, $groupData);
     if (isset($_POST['save'])) {
         $this->_save($iaView);
     }
     $iaView->assign('custom', (bool) $this->_type);
     $iaView->assign('group', $groupData);
     $iaView->assign('params', $this->_getParams($groupName));
     $iaView->assign('tooltips', iaLanguage::getTooltips());
 }
Ejemplo n.º 2
0
 public function getAdminMenu()
 {
     $iaDb =& $this->iaCore->iaDb;
     $result = array();
     $menuGroups = array();
     $extras = $this->iaCore->get('extras');
     $stmt = "`extras` IN ('', '" . implode("','", $extras) . "')";
     $rows = $iaDb->all(array('id', 'name', 'title'), $stmt . ' ORDER BY `order`', null, null, 'admin_pages_groups');
     foreach ($rows as $row) {
         $menuGroups[$row['id']] = array_merge($row, array('items' => array()));
     }
     $this->iaCore->factory('item');
     $sql = 'SELECT g.`name` `config`, e.`type`, ' . 'p.`id`, p.`group`, p.`name`, p.`parent`, p.`title`, p.`attr`, p.`alias`, p.`extras` ' . 'FROM `:prefix:table_admin_pages` p ' . 'LEFT JOIN `:prefix:table_config_groups` g ON ' . "(p.`extras` IN (':extras') AND p.`extras` = g.`extras`) " . 'LEFT JOIN `:prefix:table_extras` e ON ' . "(p.`extras` = e.`name`) " . 'WHERE p.`group` IN (:groups) ' . "AND FIND_IN_SET('menu', p.`menus`) " . "AND p.`status` = ':status' " . "AND p.`extras` IN ('',':extras') " . 'ORDER BY p.`order`';
     $sql = iaDb::printf($sql, array('prefix' => $iaDb->prefix, 'table_admin_pages' => 'admin_pages', 'table_config_groups' => iaCore::getConfigGroupsTable(), 'table_extras' => iaItem::getExtrasTable(), 'groups' => implode(',', array_keys($menuGroups)), 'status' => iaCore::STATUS_ACTIVE, 'extras' => implode("','", $extras)));
     $rows = $iaDb->getAll($sql);
     foreach ($rows as $row) {
         $menuGroups[$row['group']]['items'][] = $row;
     }
     $iaAcl = $this->iaCore->factory('acl');
     // config groups to be included as menu items
     $rows = $iaDb->all(array('name', 'title', 'extras'), "`name` != 'email_templates' AND " . $stmt . ' ORDER BY `order`', null, null, iaCore::getConfigGroupsTable());
     $configGroups = array();
     $templateName = $this->iaCore->get('tmpl');
     foreach ($rows as $row) {
         switch (true) {
             case $templateName == $row['extras']:
                 $configGroups['template'] = $row['name'];
                 break;
             case $row['extras']:
                 $row['config'] = $row['name'];
                 $configGroups['plugins'][$row['extras']] = $row;
                 break;
             default:
                 $row['url'] = 'configuration' . IA_URL_DELIMITER . $row['name'] . IA_URL_DELIMITER;
                 $row['name'] = 'configuration_' . $row['name'];
                 $configGroups['common'][] = $row;
         }
     }
     //
     foreach ($menuGroups as $group) {
         if (!$group['items']) {
             continue;
         }
         $separatorsCount = 0;
         $menuEntry = $group;
         $menuEntry['items'] = array();
         if (1 == $group['id']) {
             $menuEntry['items'] = $configGroups['common'];
         }
         foreach ($group['items'] as $item) {
             if ($iaAcl->checkAccess(iaAcl::OBJECT_ADMIN_PAGE . iaAcl::SEPARATOR . iaCore::ACTION_READ, $item['name'])) {
                 $title = iaLanguage::get($item['title'], $item['title']);
                 $data = array('name' => $item['name'], 'parent' => isset($item['parent']) ? $item['parent'] : null, 'title' => $title);
                 if ($item['alias']) {
                     $data['url'] = IA_ADMIN_URL . $item['alias'];
                 }
                 if (isset($item['attr']) && $item['attr']) {
                     $data['attr'] = $item['attr'];
                 }
                 if ($item['type'] != iaItem::TYPE_PACKAGE && isset($item['config']) && $item['config']) {
                     $data['config'] = $item['config'];
                 }
                 if ('templates' == $item['name'] && isset($configGroups['template'])) {
                     $data['config'] = $configGroups['template'];
                 }
                 if (isset($configGroups['plugins'][$item['extras']])) {
                     unset($configGroups['plugins'][$item['extras']]);
                 }
                 $menuEntry['items'][] = $data;
                 if (empty($item['name'])) {
                     $separatorsCount++;
                 }
             }
         }
         // delete separators if no elements allowed
         if ($separatorsCount == count($menuEntry['items'])) {
             unset($menuEntry['items']);
         }
         if (isset($menuEntry['items'][0]['name']) && $menuEntry['items'][0]['name']) {
             $menuHeading = array('name' => null, 'title' => iaLanguage::get('global'));
             if (iaItem::TYPE_PACKAGE == $item['type']) {
                 $menuHeading['config'] = $item['extras'];
             }
             array_unshift($menuEntry['items'], $menuHeading);
         }
         $result[$group['name']] = $menuEntry;
     }
     if (!empty($configGroups['plugins'])) {
         $result['extensions']['items'] = array_merge($result['extensions']['items'], array_values($configGroups['plugins']));
     }
     return $result;
 }
Ejemplo n.º 3
0
 public function install()
 {
     $iaDb =& $this->iaDb;
     $this->iaCore->startHook('phpExtrasInstallBefore', array('extra' => $this->itemData['name']));
     $extrasList = array();
     $array = $iaDb->all(array('id', 'name', 'version'), "`status` = 'active'", null, null, self::getTable());
     foreach ($array as $item) {
         $extrasList[$item['name']] = $item;
     }
     // TODO: check for relations and deactivate all needed extras
     if ($this->itemData['requirements']) {
         $messages = array();
         foreach ($this->itemData['requirements'] as $requirement) {
             if ($requirement['min'] || $requirement['max']) {
                 $min = $max = false;
                 if (isset($extrasList[$requirement['name']])) {
                     $info = $extrasList[$requirement['name']];
                     $min = $requirement['min'] ? version_compare($requirement['min'], $info['version'], '<=') : true;
                     $max = $requirement['max'] ? version_compare($requirement['max'], $info['version'], '>=') : true;
                 }
                 if (!$max || !$min) {
                     $ver = '';
                     if ($requirement['min']) {
                         $ver .= $requirement['min'];
                     }
                     if ($requirement['max']) {
                         if ($requirement['min']) {
                             $ver .= '-';
                         }
                         $ver .= $requirement['max'];
                     }
                     $values = array(':extra' => $requirement['type'], ':name' => $requirement['name'], ':version' => $ver);
                     $messages[] = iaLanguage::getf('required_extras_error', $values);
                     $this->error = true;
                 } else {
                     // TODO: add relations in database to deactivate when parent is uninstalled
                 }
             }
         }
         if ($this->error) {
             $this->setMessage(implode('<br />', $messages));
             return false;
         }
     }
     $this->uninstall($this->itemData['name']);
     if (false !== stristr('update', $this->itemData['name'])) {
         $this->isUpdate = true;
     }
     if ($this->itemData['groups']) {
         $iaDb->setTable('admin_pages_groups');
         $maxOrder = $iaDb->getMaxOrder();
         foreach ($this->itemData['groups'] as $block) {
             $iaDb->insert($block, array('order' => ++$maxOrder));
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['pages']['admin']) {
         $iaDb->setTable('admin_pages');
         $order = (int) $iaDb->one('MAX(`order`)', "`menus` IN ('menu')");
         $order = max($order, 1);
         foreach ($this->itemData['pages']['admin'] as $page) {
             if (is_null($page['order'])) {
                 $order += 5;
                 $page['order'] = $order;
             }
             if ($page['group']) {
                 $this->_menuGroups[] = $page['group'];
             }
             $page['group'] = $this->_lookupGroupId($page['group']);
             $iaDb->insert($page);
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['actions']) {
         $iaDb->setTable('admin_actions');
         foreach ($this->itemData['actions'] as $action) {
             $action['name'] = strtolower(str_replace(' ', '_', $action['name']));
             if ($action['name'] && !$iaDb->exists('`name` = :name', array('name' => $action['name']))) {
                 $action['order'] = empty($action['order']) || !is_numeric($action['order']) ? $iaDb->getMaxOrder() + 1 : $action['order'];
                 $iaDb->insert($action);
             }
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['phrases']) {
         $this->_processPhrases($this->itemData['phrases']);
     }
     if ($this->itemData['config_groups']) {
         $iaDb->setTable(iaCore::getConfigGroupsTable());
         $maxOrder = $iaDb->getMaxOrder();
         foreach ($this->itemData['config_groups'] as $config) {
             $iaDb->insert($config, array('order' => ++$maxOrder));
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['objects']) {
         $iaDb->setTable('acl_objects');
         foreach ($this->itemData['objects'] as $obj) {
             if ($obj['title']) {
                 $key = ($obj['object'] == $obj['pre_object'] ? '' : $obj['pre_object'] . '-') . $obj['object'] . '--' . $obj['action'];
                 iaLanguage::addPhrase($key, $obj['title'], null, $this->itemData['name'], iaLanguage::CATEGORY_COMMON, false);
                 unset($obj['title']);
             }
             $iaDb->insert($obj);
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['permissions']) {
         $iaDb->setTable('acl_privileges');
         foreach ($this->itemData['permissions'] as $permission) {
             $iaDb->insert($permission);
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['config']) {
         $iaDb->setTable('config');
         $maxOrder = $iaDb->getMaxOrder();
         foreach ($this->itemData['config'] as $config) {
             $iaDb->insert($config, array('order' => ++$maxOrder));
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['pages']['custom'] && $this->itemData['type'] == self::TYPE_PACKAGE) {
         $iaDb->setTable('items_pages');
         foreach ($this->itemData['pages']['custom'] as $page) {
             $iaDb->insert(array('page_name' => $page['name'], 'item' => $page['item']));
         }
         $iaDb->resetTable();
     }
     $iaBlock = $this->iaCore->factory('block', iaCore::ADMIN);
     $extraPages = array();
     if ($this->itemData['pages']['front']) {
         $pageGroups = $iaDb->keyvalue(array('name', 'id'), null, 'admin_pages_groups');
         $iaDb->setTable('pages');
         $maxOrder = $iaDb->getMaxOrder();
         $existPages = $iaDb->keyvalue(array('name', 'id'));
         foreach ($this->itemData['pages']['front'] as $page) {
             if (!isset($existPages[$page['name']])) {
                 if (self::TYPE_PACKAGE == $this->itemData['type'] && $page['fields_item']) {
                     $iaDb->insert(array('page_name' => $page['name'], 'item' => $page['fields_item']), null, 'items_pages');
                 }
                 $title = isset($page['title']) && $page['title'] ? $page['title'] : false;
                 $blocks = isset($page['blocks']) && $page['blocks'] ? $page['blocks'] : false;
                 $menus = isset($page['menus']) && $page['menus'] ? explode(',', $page['menus']) : array();
                 $contents = isset($page['contents']) && $page['contents'] ? $page['contents'] : false;
                 unset($page['title'], $page['blocks'], $page['menus'], $page['contents']);
                 $page['group'] = $pageGroups[$page['group']];
                 $pageId = $iaDb->insert($page, array('order' => ++$maxOrder, 'last_updated' => iaDb::FUNCTION_NOW));
                 empty($title) || $this->_addPhrase('page_title_' . $page['name'], $title, iaLanguage::CATEGORY_PAGE);
                 // TODO: should be handled by iaBlock
                 if ($blocks) {
                     $blocks = $iaDb->keyvalue(array('name', 'id'), "`name` IN ('" . implode("','", $blocks) . "')", iaBlock::getTable(), 0, 1);
                     foreach ($blocks as $blockId) {
                         $iaDb->insert(array('object_type' => 'blocks', 'object' => $blockId, 'page_name' => $page['name']), null, 'objects_pages');
                     }
                 }
                 if (!is_int($page['group'])) {
                     $page['group'] = $this->_lookupGroupId($page['group']);
                 }
                 if ($menus) {
                     $iaDb->setTable(iaBlock::getTable());
                     $added = array();
                     $items = array();
                     $menusData = $iaDb->keyvalue(array('id', 'name'), "`type` = 'menu'");
                     $db = false;
                     foreach ($menusData as $id => $name) {
                         if (in_array($name, $menus)) {
                             $added[] = $name;
                             $items[] = array('parent_id' => 0, 'menu_id' => $id, 'el_id' => $pageId . '_' . iaUtil::generateToken(4), 'level' => 0, 'page_name' => $page['name']);
                             $db = true;
                             $this->iaCore->iaCache->remove('menu_' . $id . '.inc');
                         }
                     }
                     if ($db) {
                         $iaDb->insert($items, null, iaBlock::getMenusTable());
                     }
                     foreach ($menus as $val) {
                         if (!in_array($val, $added)) {
                             $menuItem = array('type' => iaBlock::TYPE_MENU, 'status' => iaCore::STATUS_ACTIVE, 'position' => 'left', 'collapsible' => true, 'title' => $this->itemData['info']['title'], 'extras' => $this->itemData['name'], 'name' => $this->itemData['name'], 'sticky' => true, 'removable' => false);
                             $menuItem['id'] = $iaBlock->insert($menuItem);
                             $contents = array('parent_id' => 0, 'menu_id' => $menuItem['id'], 'el_id' => $pageId . '_' . iaUtil::generateToken(5), 'level' => 0, 'page_name' => $page['name']);
                             $iaDb->insert($contents, null, iaBlock::getMenusTable());
                         }
                     }
                     $iaDb->resetTable();
                 }
                 empty($contents) || $this->_addPhrase('page_content_' . $page['name'], $contents, iaLanguage::CATEGORY_PAGE);
                 $extraPages[] = $page['name'];
             }
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['blocks']) {
         $iaBlock = $this->iaCore->factory('block', iaCore::ADMIN);
         foreach ($this->itemData['blocks'] as $block) {
             $iaBlock->insert($block);
         }
     }
     if ($this->itemData['hooks']) {
         $iaDb->setTable('hooks');
         $maxOrder = $iaDb->getMaxOrder();
         foreach ($this->itemData['hooks'] as $hook) {
             $array = explode(',', $hook['name']);
             foreach ($array as $hookName) {
                 if (trim($hookName)) {
                     $hook['name'] = $hookName;
                     if (isset($hook['code']) && $hook['code']) {
                         $hook['code'] = str_replace('{extras}', $this->itemData['name'], $hook['code']);
                     }
                     $rawValues = array();
                     if (!isset($hook['order'])) {
                         $rawValues['order'] = ++$maxOrder;
                     }
                     $iaDb->insert($hook, $rawValues);
                 }
             }
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['usergroups']) {
         $this->iaCore->factory('acl');
         $iaDb->setTable(iaUsers::getUsergroupsTable());
         foreach ($this->itemData['usergroups'] as $item) {
             if (!$iaDb->exists('`name` = :name', array('name' => $item['name']))) {
                 $configs = $item['configs'];
                 $permissions = $item['permissions'];
                 $groupId = $iaDb->insert(array('extras' => $item['extras'], 'name' => $item['name'], 'system' => true, 'assignable' => $item['assignable'], 'visible' => $item['visible']));
                 // update language records
                 $this->_addPhrase('usergroup_' . $item['name'], $item['title']);
                 $iaDb->setTable(iaCore::getCustomConfigTable());
                 $iaDb->delete('`type` = :type AND `type_id` = :id', null, array('type' => iaAcl::GROUP, 'id' => $groupId));
                 foreach ($configs as $config) {
                     $data = array('name' => $config['name'], 'value' => $config['value'], 'type' => iaAcl::GROUP, 'type_id' => $groupId, 'extras' => $this->itemData['name']);
                     $iaDb->insert($data);
                 }
                 $iaDb->resetTable();
                 $iaDb->setTable('acl_privileges');
                 $iaDb->delete('`type` = :type AND `type_id` = :id', null, array('type' => iaAcl::GROUP, 'id' => $groupId));
                 foreach ($permissions as $permission) {
                     $data = array('object' => $permission['object'], 'object_id' => $permission['object_id'], 'action' => $permission['action'], 'access' => $permission['access'], 'type' => iaAcl::GROUP, 'type_id' => $groupId, 'extras' => $permission['extras']);
                     $iaDb->insert($data);
                 }
                 $iaDb->resetTable();
             }
         }
         $iaDb->resetTable();
     }
     $extraEntry = array_merge($this->itemData['info'], array('name' => $this->itemData['name'], 'type' => $this->itemData['type']));
     unset($extraEntry['date']);
     if ($this->itemData['sql']['uninstall']) {
         $extraEntry['uninstall_sql'] = serialize($this->itemData['sql']['uninstall']);
     }
     if ($this->itemData['code']['uninstall']) {
         $extraEntry['uninstall_code'] = $this->itemData['code']['uninstall'];
     }
     if ($this->itemData['sql']['install']) {
         $this->_processQueries($this->itemData['sql']['install']);
     }
     if (self::TYPE_PACKAGE == $this->itemData['type']) {
         $extraEntry['url'] = $this->_url;
     }
     if ($this->itemData['items']) {
         $extraEntry['items'] = serialize($this->itemData['items']);
         $iaDb->setTable('items');
         foreach ($this->itemData['items'] as $item) {
             $iaDb->insert(array_merge($item, array('package' => $this->itemData['name'])));
         }
         $iaDb->resetTable();
     }
     $this->iaCore->factory('field');
     $fieldGroups = $iaDb->keyvalue('CONCAT(`item`, `name`) `key`, `id`', null, iaField::getTableGroups());
     if ($this->itemData['item_field_groups']) {
         $maxOrder = $iaDb->getMaxOrder(iaField::getTableGroups());
         foreach ($this->itemData['item_field_groups'] as $item) {
             $item['order'] || ($item['order'] = ++$maxOrder);
             if ($item['title'] && !$iaDb->exists("`key` = 'fieldgroup_{$item['name']}' AND `code`='" . $this->iaView->language . "'", null, iaLanguage::getTable())) {
                 $this->_addPhrase('fieldgroup_' . $item['name'], $item['title']);
             }
             unset($item['title']);
             $description = 'fieldgroup_description_' . $item['item'] . '_' . $item['name'];
             if (!$iaDb->exists('`key` = :key AND `code` = :language', array('key' => $description, 'language' => $this->iaView->language), iaLanguage::getTable())) {
                 // insert fieldgroup description
                 iaLanguage::addPhrase($description, $item['description'], null, $this->itemData['name'], iaLanguage::CATEGORY_COMMON, false);
             }
             unset($item['description']);
             $fieldGroups[$item['item'] . $item['name']] = $iaDb->insert($item, null, iaField::getTableGroups());
         }
     }
     if ($this->itemData['item_fields']) {
         $iaDb->setTable(iaField::getTable());
         $maxOrder = $iaDb->getMaxOrder(iaField::getTable());
         foreach ($this->itemData['item_fields'] as $item) {
             if (!$iaDb->exists('`item` = :item AND `name` = :name', array('item' => $item['item'], 'name' => $item['name']))) {
                 $item['order'] || ($item['order'] = ++$maxOrder);
                 $item['fieldgroup_id'] = isset($fieldGroups[$item['item'] . $item['group']]) ? $fieldGroups[$item['item'] . $item['group']] : 0;
                 $this->_addPhrase('field_' . $item['name'], $item['title']);
                 unset($item['group'], $item['title']);
                 if (is_array($item['numberRangeForSearch'])) {
                     foreach ($item['numberRangeForSearch'] as $num) {
                         $this->_addPhrase('field_' . $item['name'] . '_range_' . $num, $num, iaLanguage::CATEGORY_FRONTEND);
                     }
                 }
                 unset($item['numberRangeForSearch']);
                 if ('dependent' == $item['relation']) {
                     $iaDb->setTable(iaField::getTableRelations());
                     foreach (explode(';', $item['parent']) as $parent) {
                         $list = explode(':', $parent);
                         if (2 == count($list)) {
                             list($fieldName, $fieldValues) = $list;
                             foreach (explode(',', $fieldValues) as $fieldValue) {
                                 $entryData = array('field' => $fieldName, 'element' => $fieldValue, 'child' => $item['name'], 'item' => $item['item'], 'extras' => $this->itemData['name']);
                                 $iaDb->insert($entryData);
                             }
                         }
                     }
                     $iaDb->resetTable();
                 }
                 unset($item['parent']);
                 if (is_array($item['values'])) {
                     foreach ($item['values'] as $key => $value) {
                         $key = sprintf('field_%s_%s', $item['name'], $key);
                         $this->_addPhrase($key, $value);
                     }
                     if ($item['default']) {
                         // TODO: multiple default values for checkboxes should be implemented
                         if (!in_array($item['default'], array_keys($item['values']))) {
                             $item['default'] = array_search($item['default'], $item['values']);
                         }
                     }
                     $item['values'] = implode(',', array_keys($item['values']));
                 }
                 $fieldPages = $item['item_pages'] ? $item['item_pages'] : array();
                 $tableName = $item['table_name'];
                 $className = $item['class_name'];
                 unset($item['item_pages'], $item['table_name'], $item['class_name']);
                 $fieldId = $iaDb->insert($item);
                 $item['table_name'] = $tableName;
                 $item['class_name'] = $className;
                 if ($fieldPages) {
                     foreach ($fieldPages as $pageName) {
                         if (trim($pageName) != '') {
                             $iaDb->insert(array('page_name' => $pageName, 'field_id' => $fieldId, 'extras' => $this->itemData['name']), null, iaField::getTablePages());
                         }
                     }
                 }
                 $iaDb->setTable($tableName);
                 $tableFields = $iaDb->describe();
                 $isExist = false;
                 foreach ($tableFields as $f) {
                     if ($f['Field'] == $item['name']) {
                         $isExist = true;
                         break;
                     }
                 }
                 if (!$isExist) {
                     $this->_addAlter($item);
                 }
                 $iaDb->resetTable();
             } else {
                 $stmt = '`item` = :item AND `name` = :name';
                 $iaDb->bind($stmt, $item);
                 $iaDb->update(null, $stmt, array('extras' => "CONCAT(`extras`, ',', '" . $this->itemData['name'] . "')"));
             }
         }
         $iaDb->resetTable();
     }
     $rollbackData = array();
     if ($this->itemData['changeset']) {
         $tablesMapping = array('block' => 'blocks', 'field' => 'fields', 'menu' => 'blocks');
         foreach ($this->itemData['changeset'] as $entry) {
             if (!isset($tablesMapping[$entry['type']])) {
                 continue;
             }
             switch ($entry['type']) {
                 case 'field':
                     list($fieldName, $itemName) = explode('-', $entry['name']);
                     if (empty($fieldName) || empty($itemName)) {
                         continue;
                     }
                     $stmt = iaDb::printf("`name` = ':name' AND `item` = ':item'", array('name' => $fieldName, 'item' => $itemName));
                     break;
                 default:
                     $stmt = iaDb::printf("`name` = ':name'", $entry);
             }
             $tableName = $tablesMapping[$entry['type']];
             $name = $entry['name'];
             unset($entry['type'], $entry['name']);
             $entryData = $iaDb->row('`' . implode('`,`', array_keys($entry)) . '`', $stmt, $tableName);
             if ($iaDb->update($entry, $stmt, null, $tableName)) {
                 $rollbackData[$tableName][$name] = $entryData;
             }
         }
     }
     $extraEntry['rollback_data'] = empty($rollbackData) ? '' : serialize($rollbackData);
     if (self::TYPE_PLUGIN == $this->itemData['type']) {
         $extraEntry['removable'] = !in_array($this->itemData['name'], $this->_builtinPlugins);
     }
     if (!$this->isUpdate) {
         $this->iaCore->startHook('phpExtrasInstallBeforeSql', array('extra' => $this->itemData['name'], 'data' => &$this->itemData['info']));
         $iaDb->insert($extraEntry, array('date' => iaDb::FUNCTION_NOW), self::getTable());
     }
     $this->_processCategory($extraEntry);
     if ($this->itemData['code']['install']) {
         $this->_runPhpCode($this->itemData['code']['install']);
     }
     if ($this->itemData['cron_jobs']) {
         $this->iaCore->factory('cron');
         foreach ($this->itemData['cron_jobs'] as $job) {
             $job['extras'] = $this->itemData['name'];
             $iaDb->insert($job, null, iaCron::getTable());
         }
     }
     $this->iaCore->startHook('phpExtrasInstallAfter', array('extra' => $this->itemData['name']));
     $this->iaCore->factory('cache')->clearAll();
     return true;
 }
Ejemplo n.º 4
0
 public function install($type = self::SETUP_REPLACE)
 {
     $iaDb =& $this->iaDb;
     // TODO: check for relations and deactivate all needed extras
     if ($this->_requires) {
         $messages = array();
         foreach ($this->_requires as $require) {
             if ($require['min'] || $require['max']) {
                 $min = $max = false;
                 if (isset($extrasList[$require['name']])) {
                     $info = $extrasList[$require['name']];
                     $min = $require['min'] ? version_compare($require['min'], $info['version'], '<=') : true;
                     $max = $require['max'] ? version_compare($require['max'], $info['version'], '>=') : true;
                 }
                 if (!$max || !$min) {
                     $ver = '';
                     if ($require['min']) {
                         $ver .= $require['min'];
                     }
                     if ($require['max']) {
                         if ($require['min']) {
                             $ver .= '-';
                         }
                         $ver .= $require['max'];
                     }
                     $replace = array(':extra' => $require['type'], ':name' => $require['name'], ':version' => $ver);
                     $messages[] = iaLanguage::getf('required_template_error', $replace);
                     $this->error = true;
                 } else {
                     // TODO: add relations in database to deactivate when parent is uninstalled
                 }
             }
         }
         if ($this->error) {
             $this->_message = implode('<br>', $messages);
             return false;
         }
     }
     if (self::SETUP_REPLACE == $type) {
         $template = $iaDb->one('value', "`name` = 'tmpl'", iaCore::getConfigTable());
         $tablesList = array('hooks', 'blocks', iaLanguage::getTable(), 'pages', iaCore::getConfigTable(), iaCore::getConfigGroupsTable(), iaCore::getCustomConfigTable());
         $iaDb->cascadeDelete($tablesList, "`extras` = '{$template}'");
         $iaDb->cascadeDelete($tablesList, "`extras` = '{$this->name}'");
     }
     $iaDb->update(array('value' => $this->name), "`name` = 'tmpl'", null, iaCore::getConfigTable());
     if ($this->_phrases) {
         $this->_processPhrases();
     }
     if ($this->_config) {
         $iaDb->setTable(iaCore::getConfigTable());
         $maxOrder = $iaDb->one_bind('MAX(`order`) + 1', '`extras` = :extras', array('extras' => $this->name));
         $maxOrder = $maxOrder ? (int) $maxOrder : 1;
         foreach ($this->_config as $entry) {
             $id = $this->iaDb->one(iaDb::ID_COLUMN_SELECTION, iaDb::convertIds($entry['name'], 'name'));
             $entry['order'] = isset($entry['order']) ? $entry['order'] : ++$maxOrder;
             if (!$id || empty($entry['name'])) {
                 $this->iaDb->insert($entry);
             } elseif ($id) {
                 if (isset($entry['value'])) {
                     unset($entry['value']);
                 }
                 $this->iaDb->update($entry, iaDb::convertIds($id));
             }
         }
         $iaDb->resetTable();
     }
     if ($this->_configGroups) {
         $iaDb->setTable(iaCore::getConfigGroupsTable());
         $maxOrder = $iaDb->getMaxOrder() + 1;
         foreach ($this->_configGroups as $title => $entry) {
             $iaDb->insert($entry, array('order' => $maxOrder));
             $this->_addPhrase('config_group_' . $entry['name'], $title, iaLanguage::CATEGORY_ADMIN);
             $maxOrder++;
         }
         $iaDb->resetTable();
     }
     if ($this->_hooks) {
         $iaDb->setTable('hooks');
         $maxOrder = $iaDb->one('MAX(`order`) + 1');
         $maxOrder = $maxOrder ? $maxOrder : 1;
         foreach ($this->_hooks as $hook) {
             $array = explode(',', $hook['name']);
             foreach ($array as $hookName) {
                 if (trim($hookName)) {
                     $hook['name'] = $hookName;
                     if (isset($hook['code']) && $hook['code']) {
                         $hook['code'] = str_replace('{extras}', $this->name, $hook['code']);
                     }
                     $iaDb->insert($hook, array('order' => $maxOrder));
                     $maxOrder++;
                 }
             }
         }
         $iaDb->resetTable();
     }
     $positionsList = array();
     if ($this->_positions) {
         $positionPages = array();
         $iaDb->setTable('positions');
         $iaDb->truncate();
         foreach ($this->_positions as $position) {
             $positionsList[] = $position['name'];
             $iaDb->insert(array('name' => $position['name'], 'menu' => (int) $position['menu'], 'movable' => (int) $position['movable']));
             if (null != $position['default_access']) {
                 $positionPages[] = array('object_type' => 'positions', 'page_name' => '', 'object' => $position['name'], 'access' => (int) $position['default_access']);
             }
             if ($position['pages']) {
                 $pages = explode(',', $position['pages']);
                 foreach ($pages as $page) {
                     $positionPages[] = array('object_type' => 'positions', 'page_name' => $page, 'object' => $position['name'], 'access' => (int) $position['access']);
                 }
             }
         }
         $iaDb->resetTable();
         if ($positionPages) {
             $iaDb->delete("`object_type` = 'positions'", 'objects_pages');
             foreach ($positionPages as $positionPage) {
                 $iaDb->insert($positionPage, null, 'objects_pages');
             }
         }
     }
     $iaBlock = $this->iaCore->factory('block', iaCore::ADMIN);
     if ($this->blocks) {
         $iaDb->setTable($iaBlock::getTable());
         $maxOrder = $iaDb->one('MAX(`order`)');
         $maxOrder = $maxOrder ? $maxOrder : 1;
         foreach ($this->blocks as $block) {
             if (!$block['order']) {
                 $maxOrder++;
                 $block['order'] = $maxOrder;
             } else {
                 $block['order'] = (int) $block['order'];
             }
             if (!empty($block['filename'])) {
                 $block['external'] = 1;
             }
             $blockPages = $block['pages'];
             unset($block['pages'], $block['added']);
             if (!in_array($block['position'], $positionsList)) {
                 $block['position'] = $positionsList[0];
             }
             if (isset($block['contents']) && $block['contents']) {
                 $block['contents'] = str_replace('{extras}', $this->name, $block['contents']);
             }
             $id = $iaDb->insert($block);
             if ($blockPages) {
                 $iaBlock->setVisibility($id, $block['sticky'], explode(',', $blockPages));
             }
         }
         $iaDb->resetTable();
     }
     $rollbackData = array();
     if ($this->_changeset) {
         $tablesMapping = array('block' => 'blocks', 'field' => 'fields', 'menu' => 'blocks', 'page' => 'pages');
         foreach ($this->_changeset as $changeset) {
             if (!isset($tablesMapping[$changeset['type']])) {
                 continue;
             }
             $entity = $changeset['type'];
             $name = $changeset['name'];
             unset($changeset['type'], $changeset['name']);
             switch ($entity) {
                 case 'field':
                     list($fieldName, $itemName) = explode('-', $name);
                     if (empty($fieldName) || empty($itemName)) {
                         continue;
                     }
                     $stmt = iaDb::printf("`name` = ':name' AND `item` = ':item'", array('name' => $fieldName, 'item' => $itemName));
                     break;
                 case 'block':
                 case 'menu':
                     $pagesList = isset($changeset['pages']) ? explode(',', $changeset['pages']) : array();
                     unset($changeset['pages']);
                     // intentionally missing break stmt
                 // intentionally missing break stmt
                 default:
                     $stmt = iaDb::printf("`name` = ':name'", array('name' => $name));
             }
             $tableName = $tablesMapping[$entity];
             $entryData = $iaDb->row('`id`, `' . implode('`,`', array_keys($changeset)) . '`', $stmt, $tableName);
             if ($iaDb->update($changeset, $stmt, null, $tableName)) {
                 if (isset($changeset['sticky']) && ('block' == $entity || 'menu' == $entity)) {
                     $iaBlock->setVisibility($entryData['id'], $changeset['sticky'], $pagesList);
                 }
                 unset($entryData['id']);
                 $rollbackData[$tableName][$name] = $entryData;
             }
         }
     }
     $rollbackData = empty($rollbackData) ? '' : serialize($rollbackData);
     $this->iaCore->set(self::CONFIG_LAYOUT_DATA, serialize($this->_layout), true);
     $this->iaCore->set(self::CONFIG_ROLLBACK_DATA, $rollbackData, true);
     if (self::SETUP_INITIAL != $type) {
         setcookie('template_color_scheme', '', time() - 3600, '/');
     }
     return true;
 }
Ejemplo n.º 5
0
 public function install()
 {
     $iaDb =& $this->iaDb;
     $this->iaCore->startHook('phpExtrasInstallBefore', array('extra' => $this->itemData['name']));
     $extrasList = array();
     $array = $iaDb->all(array('id', 'name', 'version'), "`status` = 'active'", null, null, self::getTable());
     foreach ($array as $item) {
         $extrasList[$item['name']] = $item;
     }
     // TODO: check for relations and deactivate all needed extras
     if ($this->itemData['requirements']) {
         $messages = array();
         foreach ($this->itemData['requirements'] as $requirement) {
             if ($requirement['min'] || $requirement['max']) {
                 $min = $max = false;
                 if (isset($extrasList[$requirement['name']])) {
                     $info = $extrasList[$requirement['name']];
                     $min = $requirement['min'] ? version_compare($requirement['min'], $info['version'], '<=') : true;
                     $max = $requirement['max'] ? version_compare($requirement['max'], $info['version'], '>=') : true;
                 }
                 if (!$max || !$min) {
                     $ver = '';
                     if ($requirement['min']) {
                         $ver .= $requirement['min'];
                     }
                     if ($requirement['max']) {
                         if ($requirement['min']) {
                             $ver .= '-';
                         }
                         $ver .= $requirement['max'];
                     }
                     $values = array(':extra' => $requirement['type'], ':name' => $requirement['name'], ':version' => $ver);
                     $messages[] = iaLanguage::getf('required_extras_error', $values);
                     $this->error = true;
                 } else {
                     // TODO: add relations in database to deactivate when parent is uninstalled
                 }
             }
         }
         if ($this->error) {
             $this->setMessage(implode('<br />', $messages));
             return false;
         }
     }
     $this->uninstall($this->itemData['name']);
     if (false !== stristr('update', $this->itemData['name'])) {
         $this->isUpdate = true;
     }
     $this->_processQueries('install', self::SQL_STAGE_START);
     if ($this->itemData['groups']) {
         $iaDb->setTable('admin_pages_groups');
         $maxOrder = $iaDb->getMaxOrder();
         foreach ($this->itemData['groups'] as $title => $entry) {
             $iaDb->insert($entry, array('order' => ++$maxOrder));
             $this->_addPhrase('pages_group_' . $entry['name'], $title, iaLanguage::CATEGORY_ADMIN);
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['pages']['admin']) {
         $this->_processAdminPages($this->itemData['pages']['admin']);
     }
     if ($this->itemData['actions']) {
         $iaDb->setTable('admin_actions');
         foreach ($this->itemData['actions'] as $action) {
             $action['name'] = strtolower(str_replace(' ', '_', $action['name']));
             if ($action['name'] && !$iaDb->exists('`name` = :name', array('name' => $action['name']))) {
                 $action['order'] = empty($action['order']) || !is_numeric($action['order']) ? $iaDb->getMaxOrder() + 1 : $action['order'];
                 $iaDb->insert($action);
             }
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['phrases']) {
         $this->_processPhrases($this->itemData['phrases']);
     }
     if ($this->itemData['config_groups']) {
         $iaDb->setTable(iaCore::getConfigGroupsTable());
         $maxOrder = $iaDb->getMaxOrder();
         foreach ($this->itemData['config_groups'] as $title => $entry) {
             $iaDb->insert($entry, array('order' => ++$maxOrder));
             $this->_addPhrase('config_group_' . $entry['name'], $title, iaLanguage::CATEGORY_ADMIN);
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['objects']) {
         $iaDb->setTable('acl_objects');
         foreach ($this->itemData['objects'] as $obj) {
             if ($obj['title']) {
                 $key = ($obj['object'] == $obj['pre_object'] ? '' : $obj['pre_object'] . '-') . $obj['object'] . '--' . $obj['action'];
                 iaLanguage::addPhrase($key, $obj['title'], null, $this->itemData['name'], iaLanguage::CATEGORY_COMMON, false);
                 unset($obj['title']);
             }
             $iaDb->insert($obj);
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['permissions']) {
         $iaDb->setTable('acl_privileges');
         foreach ($this->itemData['permissions'] as $permission) {
             $iaDb->insert($permission);
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['config']) {
         $this->_processConfig($this->itemData['config']);
     }
     if ($this->itemData['pages']['custom'] && $this->itemData['type'] == self::TYPE_PACKAGE) {
         $iaDb->setTable('items_pages');
         foreach ($this->itemData['pages']['custom'] as $page) {
             $iaDb->insert(array('page_name' => $page['name'], 'item' => $page['item']));
         }
         $iaDb->resetTable();
     }
     $iaBlock = $this->iaCore->factory('block', iaCore::ADMIN);
     $extraPages = array();
     if ($this->itemData['pages']['front']) {
         $pageGroups = $iaDb->keyvalue(array('name', 'id'), null, 'admin_pages_groups');
         $iaDb->setTable('pages');
         $maxOrder = $iaDb->getMaxOrder();
         $existPages = $iaDb->keyvalue(array('name', 'id'));
         foreach ($this->itemData['pages']['front'] as $title => $page) {
             if (!isset($existPages[$page['name']])) {
                 if (self::TYPE_PACKAGE == $this->itemData['type'] && $page['fields_item']) {
                     $iaDb->insert(array('page_name' => $page['name'], 'item' => $page['fields_item']), null, 'items_pages');
                 }
                 $blocks = empty($page['blocks']) ? false : $page['blocks'];
                 $menus = empty($page['menus']) ? array() : explode(',', $page['menus']);
                 $contents = empty($page['contents']) ? false : $page['contents'];
                 unset($page['blocks'], $page['menus'], $page['contents']);
                 $page['group'] = $pageGroups[$page['group']];
                 $pageId = $iaDb->insert($page, array('order' => ++$maxOrder, 'last_updated' => iaDb::FUNCTION_NOW));
                 empty($title) || $this->_addPhrase('page_title_' . $page['name'], $title, iaLanguage::CATEGORY_PAGE);
                 if ($blocks && ($ids = $this->iaDb->onefield(iaDb::ID_COLUMN_SELECTION, "`name` IN ('" . implode("','", $blocks) . "')", null, null, iaBlock::getTable()))) {
                     foreach ($ids as $blockId) {
                         $iaBlock->setVisibility($blockId, true, array($page['name']), false);
                     }
                 }
                 if (!is_int($page['group'])) {
                     $page['group'] = $this->_lookupGroupId($page['group']);
                 }
                 if ($menus) {
                     $iaDb->setTable(iaBlock::getTable());
                     $added = array();
                     $items = array();
                     $menusData = $iaDb->keyvalue(array('id', 'name'), "`type` = 'menu'");
                     $db = false;
                     foreach ($menusData as $id => $name) {
                         if (in_array($name, $menus)) {
                             $added[] = $name;
                             $items[] = array('parent_id' => 0, 'menu_id' => $id, 'el_id' => $pageId . '_' . iaUtil::generateToken(4), 'level' => 0, 'page_name' => $page['name']);
                             $db = true;
                             $this->iaCore->iaCache->remove('menu_' . $id . '.inc');
                         }
                     }
                     if ($db) {
                         $iaDb->insert($items, null, iaBlock::getMenusTable());
                     }
                     foreach ($menus as $val) {
                         if (!in_array($val, $added)) {
                             $menuItem = array('type' => iaBlock::TYPE_MENU, 'status' => iaCore::STATUS_ACTIVE, 'position' => 'left', 'collapsible' => true, 'title' => $this->itemData['info']['title'], 'extras' => $this->itemData['name'], 'name' => $this->itemData['name'], 'sticky' => true, 'removable' => false);
                             $menuItem['id'] = $iaBlock->insert($menuItem);
                             $entry = array('parent_id' => 0, 'menu_id' => $menuItem['id'], 'el_id' => $pageId . '_' . iaUtil::generateToken(5), 'level' => 0, 'page_name' => $page['name']);
                             $iaDb->insert($entry, null, iaBlock::getMenusTable());
                         }
                     }
                     $iaDb->resetTable();
                 }
                 empty($contents) || $this->_addPhrase('page_content_' . $page['name'], $contents, iaLanguage::CATEGORY_PAGE);
                 $extraPages[] = $page['name'];
             }
         }
         $iaDb->resetTable();
     }
     $iaBlock = $this->iaCore->factory('block', iaCore::ADMIN);
     if ($this->itemData['blocks']) {
         foreach ($this->itemData['blocks'] as $block) {
             $iaBlock->insert($block);
         }
     }
     if ($this->itemData['hooks']) {
         $iaDb->setTable('hooks');
         $maxOrder = $iaDb->getMaxOrder();
         foreach ($this->itemData['hooks'] as $hook) {
             $array = explode(',', $hook['name']);
             foreach ($array as $hookName) {
                 if (trim($hookName)) {
                     $hook['name'] = $hookName;
                     if (isset($hook['code']) && $hook['code']) {
                         $hook['code'] = str_replace('{extras}', $this->itemData['name'], $hook['code']);
                     }
                     $rawValues = array();
                     if (!isset($hook['order'])) {
                         $rawValues['order'] = ++$maxOrder;
                     }
                     $iaDb->insert($hook, $rawValues);
                 }
             }
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['usergroups']) {
         $this->iaCore->factory('acl');
         $iaDb->setTable(iaUsers::getUsergroupsTable());
         foreach ($this->itemData['usergroups'] as $item) {
             if (!$iaDb->exists('`name` = :name', array('name' => $item['name']))) {
                 $configs = $item['configs'];
                 $permissions = $item['permissions'];
                 $groupId = $iaDb->insert(array('extras' => $item['extras'], 'name' => $item['name'], 'system' => true, 'assignable' => $item['assignable'], 'visible' => $item['visible']));
                 // update language records
                 $this->_addPhrase('usergroup_' . $item['name'], $item['title']);
                 $iaDb->setTable(iaCore::getCustomConfigTable());
                 $iaDb->delete('`type` = :type AND `type_id` = :id', null, array('type' => iaAcl::GROUP, 'id' => $groupId));
                 foreach ($configs as $config) {
                     $data = array('name' => $config['name'], 'value' => $config['value'], 'type' => iaAcl::GROUP, 'type_id' => $groupId, 'extras' => $this->itemData['name']);
                     $iaDb->insert($data);
                 }
                 $iaDb->resetTable();
                 $iaDb->setTable('acl_privileges');
                 $iaDb->delete('`type` = :type AND `type_id` = :id', null, array('type' => iaAcl::GROUP, 'id' => $groupId));
                 foreach ($permissions as $permission) {
                     $data = array('object' => $permission['object'], 'object_id' => $permission['object_id'], 'action' => $permission['action'], 'access' => $permission['access'], 'type' => iaAcl::GROUP, 'type_id' => $groupId, 'extras' => $permission['extras']);
                     $iaDb->insert($data);
                 }
                 $iaDb->resetTable();
             }
         }
         $iaDb->resetTable();
     }
     $extraEntry = array_merge($this->itemData['info'], array('name' => $this->itemData['name'], 'type' => $this->itemData['type']));
     unset($extraEntry['date']);
     if ($this->itemData['sql']['uninstall']) {
         $extraEntry['uninstall_sql'] = serialize($this->itemData['sql']['uninstall']);
     }
     if ($this->itemData['code']['uninstall']) {
         $extraEntry['uninstall_code'] = $this->itemData['code']['uninstall'];
     }
     $this->_processQueries('install', self::SQL_STAGE_MIDDLE);
     if (self::TYPE_PACKAGE == $this->itemData['type']) {
         $extraEntry['url'] = $this->_url;
     }
     if ($this->itemData['items']) {
         $extraEntry['items'] = serialize($this->itemData['items']);
         $iaDb->setTable('items');
         foreach ($this->itemData['items'] as $item) {
             $iaDb->insert(array_merge($item, array('package' => $this->itemData['name'])));
         }
         $iaDb->resetTable();
     }
     $this->iaCore->factory('field');
     if ($this->itemData['item_field_groups']) {
         $iaDb->setTable(iaField::getTableGroups());
         $maxOrder = $iaDb->getMaxOrder();
         foreach ($this->itemData['item_field_groups'] as $entry) {
             $entry['order'] || ($entry['order'] = ++$maxOrder);
             $title = $entry['title'];
             $description = $entry['description'];
             unset($entry['title'], $entry['description']);
             if ($iaDb->insert($entry)) {
                 $this->_addPhrase('fieldgroup_' . $entry['name'], $title);
                 $this->_addPhrase('fieldgroup_description_' . $entry['item'] . '_' . $entry['name'], $description);
             }
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['item_fields']) {
         $this->_processFields($this->itemData['item_fields']);
     }
     if ($this->itemData['cron_jobs']) {
         $this->iaCore->factory('cron');
         foreach ($this->itemData['cron_jobs'] as $job) {
             $job['extras'] = $this->itemData['name'];
             $iaDb->insert($job, null, iaCron::getTable());
         }
     }
     $rollbackData = array();
     if ($this->itemData['changeset']) {
         $tablesMapping = array('block' => 'blocks', 'field' => 'fields', 'menu' => 'blocks');
         foreach ($this->itemData['changeset'] as $entry) {
             if (!isset($tablesMapping[$entry['type']])) {
                 continue;
             }
             switch ($entry['type']) {
                 case 'field':
                     list($fieldName, $itemName) = explode('-', $entry['name']);
                     if (empty($fieldName) || empty($itemName)) {
                         continue;
                     }
                     $stmt = iaDb::printf("`name` = ':name' AND `item` = ':item'", array('name' => $fieldName, 'item' => $itemName));
                     break;
                 default:
                     $stmt = iaDb::printf("`name` = ':name'", $entry);
             }
             $tableName = $tablesMapping[$entry['type']];
             $name = $entry['name'];
             $pages = isset($entry['pages']) ? explode(',', $entry['pages']) : array();
             unset($entry['type'], $entry['name'], $entry['pages']);
             $entryData = $iaDb->row('`id`, `' . implode('`,`', array_keys($entry)) . '`', $stmt, $tableName);
             if ($iaDb->update($entry, $stmt, null, $tableName)) {
                 if ('field' != $entry['type'] && isset($entry['sticky'])) {
                     $iaBlock->setVisibility($entryData['id'], $entry['sticky'], $pages);
                 }
                 unset($entryData['id']);
                 $rollbackData[$tableName][$name] = $entryData;
             }
         }
     }
     $extraEntry['rollback_data'] = empty($rollbackData) ? '' : serialize($rollbackData);
     if (self::TYPE_PLUGIN == $this->itemData['type']) {
         $extraEntry['removable'] = !in_array($this->itemData['name'], $this->_builtinPlugins);
     }
     if (!$this->isUpdate) {
         $this->iaCore->startHook('phpExtrasInstallBeforeSql', array('extra' => $this->itemData['name'], 'data' => &$this->itemData['info']));
         $iaDb->insert($extraEntry, array('date' => iaDb::FUNCTION_NOW), self::getTable());
     }
     $this->_processCategory($extraEntry);
     $this->_processQueries('install', self::SQL_STAGE_END);
     if ($this->itemData['code']['install']) {
         $this->_runPhpCode($this->itemData['code']['install']);
     }
     $this->iaCore->startHook('phpExtrasInstallAfter', array('extra' => $this->itemData['name']));
     $this->iaCore->factory('cache')->clearAll();
     return true;
 }
Ejemplo n.º 6
0
 protected function _indexPage(&$iaView)
 {
     $type = null;
     $customEntryId = false;
     if (isset($_GET['group'])) {
         $type = 'group';
         $customEntryId = (int) $_GET['group'];
         iaBreadcrumb::preEnd(iaLanguage::get('usergroups'), IA_ADMIN_URL . 'usergroups/');
     } elseif (isset($_GET['user'])) {
         $type = 'user';
         $customEntryId = (int) $_GET['user'];
         iaBreadcrumb::preEnd(iaLanguage::get('members'), IA_ADMIN_URL . 'members/');
     }
     if (isset($_POST['save'])) {
         $this->_save($iaView, $type, $customEntryId);
     }
     $iaItem = $this->_iaCore->factory('item');
     $groupName = isset($this->_iaCore->requestPath[0]) ? $this->_iaCore->requestPath[0] : 'general';
     $groupData = $this->_iaDb->row_bind(iaDb::ALL_COLUMNS_SELECTION, '`name` = :name', array('name' => $groupName), iaCore::getConfigGroupsTable());
     if (empty($groupData)) {
         return iaView::errorPage(iaView::ERROR_NOT_FOUND);
     }
     $this->_setGroup($iaView, $iaItem, $groupData);
     $where = "`config_group` = '{$groupName}' AND `type` != 'hidden' " . ($type ? 'AND `custom` = 1' : '') . ' ORDER BY `order`';
     $params = $this->_iaDb->all(iaDb::ALL_COLUMNS_SELECTION, $where, null, null, iaCore::getConfigTable());
     if ($type) {
         $custom = 'user' == $type ? $this->_iaCore->getCustomConfig($customEntryId) : $this->_iaCore->getCustomConfig(false, $customEntryId);
         $custom2 = array();
         if ('user' == $type) {
             $custom2 = $this->_iaDb->getKeyValue('SELECT d.`name`, d.`value` ' . "FROM `{$this->_iaCore->iaDb->prefix}config_custom` d, `{$this->_iaCore->iaDb->prefix}members` a " . "WHERE d.`type` = 'group' AND d.`type_id` = a.`usergroup_id` AND a.`id` = '{$customEntryId}'");
         }
     }
     $itemsList = $iaItem->getItems();
     foreach ($params as $index => $item) {
         $className = 'default';
         if ($type) {
             $className = 'custom';
             if (self::TYPE_DIVIDER != $item['type']) {
                 if (isset($custom2[$item['name']])) {
                     $params[$index]['dtype'] = 'usergroup';
                     $params[$index]['default'] = $custom2[$item['name']];
                     $params[$index]['value'] = $custom2[$item['name']];
                 } else {
                     $params[$index]['dtype'] = 'core';
                     $params[$index]['default'] = $this->_iaCore->get($item['name']);
                 }
                 if (isset($custom[$item['name']])) {
                     $className = 'common';
                     $params[$index]['value'] = $custom[$item['name']];
                 }
             }
         }
         if ('itemscheckbox' == $item['type']) {
             $array = $this->_iaCore->get($item['extras'] . '_items_implemented');
             $array = $array ? explode(',', $array) : array();
             $array = array_values(array_intersect($array, $itemsList));
             if ($array) {
                 $enabledItems = $iaItem->getEnabledItemsForPlugin($item['extras']);
                 for ($i = 0; $i < count($array); $i++) {
                     $array[$i] = trim($array[$i]);
                     $params[$index]['items'][] = array('name' => $array[$i], 'title' => iaLanguage::get($array[$i]), 'checked' => (int) in_array($array[$i], $enabledItems));
                 }
             }
         }
         if ('select' == $item['type']) {
             switch ($item['name']) {
                 case 'timezone':
                     $params[$index]['values'] = iaUtil::getFormattedTimezones();
                     break;
                 case 'lang':
                     $params[$index]['values'] = $this->_iaCore->languages;
                     break;
                 default:
                     $params[$index]['values'] = explode(',', $item['multiple_values']);
             }
         }
         $params[$index]['classname'] = $className;
     }
     $customUrl = '';
     if ($type) {
         $customUrl = isset($_GET['user']) ? '?user='******'user'] : '******' . $_GET['group'];
         $customUrl = iaSanitize::html($customUrl);
     }
     $iaView->assign('group', $groupData);
     $iaView->assign('params', $params);
     $iaView->assign('tooltips', iaLanguage::getTooltips());
     $iaView->assign('url_custom', $customUrl);
 }
Ejemplo n.º 7
0
 protected function _getGroupByName($groupName)
 {
     $result = $this->_iaDb->row_bind(iaDb::ALL_COLUMNS_SELECTION, '`name` = :name', array('name' => $groupName), iaCore::getConfigGroupsTable());
     empty($result) || ($result['title'] = iaLanguage::get('config_group_' . $result['name']));
     return $result;
 }