protected function _gridRead($params) { $output = array(); $iaDb =& $this->_iaDb; switch ($params['get']) { case 'plugins': if ($plugins = $this->_iaDb->onefield('name', null, null, null, 'extras')) { $output['data'][] = array('value' => iaCore::CORE, 'title' => iaLanguage::get('core', 'Core')); foreach ($plugins as $plugin) { $output['data'][] = array('value' => $plugin, 'title' => iaLanguage::get($plugin, ucfirst($plugin))); } } break; case 'comparison': if (isset($params['lang1']) && isset($params['lang2']) && $params['lang1'] != $params['lang2'] && array_key_exists($params['lang1'], $this->_iaCore->languages) && array_key_exists($params['lang2'], $this->_iaCore->languages)) { $start = isset($params['start']) ? (int) $params['start'] : 0; $limit = isset($params['limit']) ? (int) $params['limit'] : 15; $values = array(); if (!empty($params['key'])) { $conditions[] = '`key` LIKE :key OR `value` LIKE :key'; $values['key'] = '%' . $params['key'] . '%'; } if (!empty($params['category'])) { $conditions[] = '`category` = :category'; $values['category'] = $params['category']; } if (!empty($params['plugin'])) { if (iaCore::CORE == $params['plugin']) { $params['plugin'] = ''; } $conditions[] = '`extras` = :plugin'; $values['plugin'] = $params['plugin']; } $where = empty($conditions) ? iaDb::EMPTY_CONDITION : implode(' AND ', $conditions); $iaDb->bind($where, $values); $rows = $iaDb->all('SQL_CALC_FOUND_ROWS DISTINCT `key`, `category`', $where, $start, $limit); $output = array('data' => array(), 'total' => $iaDb->foundRows()); $keys = array(); foreach ($rows as $row) { $keys[] = $row['key']; } $stmt = "`code` = ':lang' AND `key` IN('" . implode("','", $keys) . "')"; $lang1 = $iaDb->keyvalue(array('key', 'value'), iaDb::printf($stmt, array('lang' => $params['lang1']))); $lang2 = $iaDb->keyvalue(array('key', 'value'), iaDb::printf($stmt, array('lang' => $params['lang2']))); foreach ($rows as $row) { $key = $row['key']; $output['data'][] = array('key' => $key, 'lang1' => isset($lang1[$key]) ? $lang1[$key] : null, 'lang2' => isset($lang2[$key]) ? $lang2[$key] : null, 'category' => $row['category']); } } break; default: $params['lang'] = isset($_GET['lang']) && array_key_exists($_GET['lang'], $this->_iaCore->languages) ? $_GET['lang'] : $this->_iaCore->iaView->language; $output = parent::_gridRead($params); } return $output; }
public function url($action, $data = array()) { $data['action'] = $action; $data['alias'] = isset($data['genre_alias']) ? $data['genre_alias'] : $data['title_alias']; if (!isset($this->_patterns[$action])) { $action = 'view'; } $url = iaDb::printf($this->_patterns[$action], $data); return $this->iaCore->packagesData[self::PACKAGE_NAME]['url'] . $url; }
public function url($action, $data = array(), $generate = false) { $data['action'] = $action; $data['alias'] = isset($data['album_alias']) ? $data['album_alias'] : $data['title_alias']; if (!isset($this->patterns[$action])) { $action = 'view'; } $url = iaDb::printf($this->patterns[$action], $data); return self::get('url') . $url; }
protected function _entryDelete($entryId) { $row = $this->_iaDb->row(array('name', 'item'), iaDb::convertIds($entryId)); $result = parent::_entryDelete($entryId); if ($result && $row) { $stmt = iaDb::printf("`key` = 'fieldgroup_:name' OR `key` = 'fieldgroup_description_:item_:name'", $row); $this->_iaDb->delete($stmt, iaLanguage::getTable()); } return $result; }
protected function _gridQuery($columns, $where, $order, $start, $limit) { foreach (array('amount', 'gateway', 'status') as $joinedColumnName) { if (false !== stripos($order, $joinedColumnName)) { $order = str_replace(' i.`', ' t.`', $order); break; } } $sql = 'SELECT SQL_CALC_FOUND_ROWS ' . 'i.`id`, i.`date_created`, i.`fullname`, ' . 't.`plan_id`, t.`operation`, ' . 't.`status`, CONCAT(t.`amount`, " ", t.`currency`) `amount`, t.`currency`, t.`gateway`, ' . "1 `pdf`, 1 `update`, IF(t.`status` != 'passed', 1, 0) `delete` " . 'FROM `:prefix:table_invoices` i ' . 'LEFT JOIN `:prefix:table_transactions` t ON (t.`id` = i.`transaction_id`) ' . 'LEFT JOIN `:prefix:table_members` m ON (m.`id` = t.`member_id`) ' . ($where ? 'WHERE ' . $where . ' ' : '') . $order . ' ' . 'LIMIT :start, :limit'; $sql = iaDb::printf($sql, array('prefix' => $this->_iaDb->prefix, 'table_invoices' => self::getTable(), 'table_members' => iaUsers::getTable(), 'table_transactions' => 'payment_transactions', 'start' => $start, 'limit' => $limit)); return $this->_iaDb->getAll($sql); }
public function getAddress($transactionId) { $invoice = $this->getBy('transaction_id', $transactionId); if ($invoice && $invoice['address1']) { return $invoice; } // else return an address of the latest populated transaction $iaTransaction = $this->iaCore->factory('transaction'); $sql = 'SELECT SQL_CALC_FOUND_ROWS i.`address1`, i.`address2`, i.`zip`, i.`country` ' . 'FROM `:prefix:table_transactions` t ' . 'LEFT JOIN `:prefix:table_invoices` i ON (i.`transaction_id` = t.`id`) ' . 'WHERE t.`member_id` = :member AND i.`address1` != "" ' . 'ORDER BY t.`date` DESC ' . 'LIMIT 1'; $sql = iaDb::printf($sql, array('prefix' => $this->iaDb->prefix, 'table_transactions' => $iaTransaction::getTable(), 'table_invoices' => self::getTable(), 'member' => iaUsers::getIdentity()->id)); $row = $this->iaDb->getRow($sql); return $row ? $row : array('address1' => '', 'address2' => '', 'zip' => '', 'country' => ''); }
public function url($action, $data = array(), $generate = false) { $data['action'] = $action; $data['alias'] = isset($data['artist_alias']) ? $data['artist_alias'] : $data['title_alias']; if (!isset($this->patterns[$action])) { $action = 'view'; } if ($generate) { $iaUtil = $iaCore->factory('core', 'util'); if (!defined('IA_NOUTF')) { iaUtf8::loadUTF8Core(); iaUtf8::loadUTF8Util('ascii', 'validation', 'bad', 'utf8_to_ascii'); } if (!utf8_is_ascii($data['alias'])) { $data['alias'] = $iaCore->convertStr(utf8_to_ascii($data['alias'])); } } $url = iaDb::printf($this->patterns[$action], $data); return self::get('url') . $url; }
public function url($action, $data = array(), $generate = false) { $data['action'] = $action; $data['alias'] = isset($data['genre_alias']) ? $data['genre_alias'] : $data['title_alias']; if (!isset($this->patterns[$action])) { $action = 'view'; } if ($generate) { iaCore::util(); if (!defined('IA_NOUTF')) { iaUtf8::loadUTF8Core(); iaUtf8::loadUTF8Util('ascii', 'validation', 'bad', 'utf8_to_ascii'); } if (!utf8_is_ascii($data['alias'])) { $data['alias'] = $iaCore->convertStr(utf8_to_ascii($data['alias'])); } } $url = iaDb::printf($this->patterns[$action], $data); return $this->iaCore->packagesData[self::PACKAGE_NAME]['url'] . $url; }
public function delete($id) { $result = false; $this->iaDb->setTable(self::getTable()); // if item exists, then remove it if ($row = $this->iaDb->row_bind(array('title', 'image'), '`id` = :id', array('id' => $id))) { $result[] = (bool) $this->iaDb->delete(iaDb::convertIds($id), self::getTable()); if ($row['image'] && $result) { $iaPicture = $this->iaCore->factory('picture'); $iaPicture->delete($row['image']); } $result[] = (bool) $this->iaDb->delete(iaDb::convertIds($id, 'blog_id'), $this->_tableBlogEntriesTags); $sql = 'DELETE ' . 'FROM `:prefix:table_blog_tags` ' . 'WHERE `id` NOT IN (' . 'SELECT DISTINCT `tag_id` ' . 'FROM `:prefix:table_blog_entries_tags`)'; $sql = iaDb::printf($sql, array('prefix' => $this->_iaDb->prefix, 'table_blog_entries_tags' => 'blog_entries_tags', 'table_blog_tags' => 'blog_tags')); $result[] = (bool) $this->iaDb->query($sql); if ($result) { $this->iaCore->factory('log')->write(iaLog::ACTION_DELETE, array('module' => 'blog', 'item' => 'blog', 'name' => $row['title'], 'id' => (int) $id)); } } $this->iaDb->resetTable(); return $result; }
private function _getAdminToolbarActions() { $result = array(); $stmt = "`pages` REGEXP('[[:<:]]:page(::action)?(,|\$)') AND `type` = 'regular' ORDER BY `order` DESC"; $stmt = iaDb::printf($stmt, array('page' => $this->name(), 'action' => $this->get('action'))); $iaAcl = $this->iaCore->factory('acl'); $rows = $this->iaCore->iaDb->all(array('attributes', 'name', 'icon', 'text', 'url'), $stmt, null, null, 'admin_actions'); foreach ($rows as $entry) { if ($iaAcl->checkAccess(iaAcl::OBJECT_ADMIN_PAGE, $entry['name'])) { $result[] = array('attributes' => $entry['attributes'], 'icon' => empty($entry['icon']) ? '' : 'i-' . $entry['icon'], 'title' => iaLanguage::get($entry['text'], $entry['text']), 'url' => iaDb::printf($entry['url'], $this->iaCore->iaView->get('toolbarActionsReplacements', array()))); } } return $result; }
public function getAuth($userId, $user = null, $password = null) { $sql = 'SELECT u.*, g.`name` `usergroup` ' . 'FROM `:prefix_:table_users` u ' . 'LEFT JOIN `:prefix_:table_groups` g ON (g.`id` = u.`usergroup_id`) ' . 'WHERE :condition ' . 'LIMIT 1'; if ((int) $userId) { $condition = sprintf('u.`id` = %d', $userId); } else { $condition = '(u.`username` = :username OR u.`email` = :email) AND u.`password` = :password'; $this->iaDb->bind($condition, array('username' => preg_replace('/[^a-zA-Z0-9.@_-]/', '', $user), 'email' => $user, 'password' => $this->encodePassword($password))); } $sql = iaDb::printf($sql, array('prefix_' => $this->iaDb->prefix, 'table_users' => self::getTable(), 'table_groups' => self::getUsergroupsTable(), 'condition' => $condition)); $row = $this->iaDb->getRow($sql); if (iaCore::STATUS_ACTIVE == $row['status']) { self::_setIdentity($row); $this->iaDb->update(null, iaDb::convertIds($row['id']), array('date_logged' => iaDb::FUNCTION_NOW), self::getTable()); $this->_assignItem($row); return $row; } return false; }
private function _getPages() { $sql = 'SELECT DISTINCTROW p.*, IF(t.`value` is null, p.`name`, t.`value`) `title` ' . 'FROM `:prefixpages` p ' . 'LEFT JOIN `:prefix:table_language` t ' . "ON (`key` = CONCAT('page_title_', p.`name`) AND t.`code` = ':language') " . "WHERE p.`status` = ':status' AND p.`service` = 0 " . 'ORDER BY t.`value`'; $sql = iaDb::printf($sql, array('prefix' => $this->_iaDb->prefix, 'table_language' => iaLanguage::getTable(), 'language' => $this->_iaCore->iaView->language, 'status' => iaCore::STATUS_ACTIVE)); return $this->_iaDb->getAll($sql); }
private function _getUsersSpecificConfig() { $sql = 'SELECT c.`name`, c.`value` ' . 'FROM `:prefix:table_custom_config` c, `:prefix:table_members` m ' . "WHERE c.`type` = ':type' AND c.`type_id` = m.`usergroup_id` AND m.`id` = :id"; $sql = iaDb::printf($sql, array('prefix' => $this->_iaDb->prefix, 'table_custom_config' => iaCore::getCustomConfigTable(), 'table_members' => iaUsers::getTable(), 'id' => $this->_typeId)); return ($rows = $this->_iaDb->getKeyValue($sql)) ? $rows : array(); }
if ($favorites = $iaItem->getFavoritesByMemberId(iaUsers::getIdentity()->id)) { foreach ($favorites as $itemName => $ids) { $fields = array('id'); $class = iaCore::CORE != $itemsList[$itemName] ? $iaCore->factoryPackage('item', $itemsList[$itemName], iaCore::FRONT, $itemName) : $iaCore->factory('members' == $itemName ? 'users' : $itemName); if ($class && method_exists($class, iaUsers::METHOD_NAME_GET_FAVORITES)) { $favorites[$itemName]['items'] = $class->{iaUsers::METHOD_NAME_GET_FAVORITES}($ids); } else { if ($itemName == $iaUsers->getItemName()) { $fields[] = 'username'; $fields[] = 'fullname'; $fields[] = 'avatar'; $fields[] = 'id` `member_id'; } else { $fields[] = 'member_id'; } $stmt = iaDb::printf("`id` IN (:ids) && `status` = ':status'", array('ids' => implode(',', $ids), 'status' => iaCore::STATUS_ACTIVE)); $favorites[$itemName]['items'] = $iaDb->all('*, 1 `favorite`', $stmt, null, null, $iaItem->getItemTable($itemName)); } // we need this to generate correct template filename $favorites[$itemName]['package'] = iaCore::CORE == $itemsList[$itemName] ? '' : $itemsList[$itemName]; // filter values $favorites[$itemName]['fields'] = $iaField->filter($favorites[$itemName]['items'], $itemName); } } } else { $favorites = isset($_SESSION[iaUsers::SESSION_FAVORITES_KEY]) ? (array) $_SESSION[iaUsers::SESSION_FAVORITES_KEY] : array(); // populate visible fields foreach ($favorites as $itemName => &$items) { if (isset($items['items']) && $items['items']) { // generate correct fields array $favorites[$itemName]['fields'] = $iaField->filter($items['items'], $itemName);
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; }
public function url($action, array $listingData) { $patterns = array('default' => 'album/:artist_alias/:alias/', 'view' => 'album/:artist_alias/:alias/'); $url = iaDb::printf(isset($patterns[$action]) ? $patterns[$action] : $patterns['default'], array('alias' => isset($listingData['title_alias']) ? $listingData['title_alias'] : '', 'artist_alias' => isset($listingData['artist_alias']) ? $listingData['artist_alias'] : '')); return $this->iaCore->packagesData['lyrics']['url'] . $url; }
protected function _gridQuery($columns, $where, $order, $start, $limit) { $sql = 'SELECT SQL_CALC_FOUND_ROWS ' . 't.`id`, t.`item`, t.`item_id`, CONCAT(t.`amount`, " ", t.`currency`) `amount`, ' . 't.`date`, t.`status`, t.`currency`, t.`operation`, t.`plan_id`, t.`reference_id`, ' . "t.`gateway`, IF(t.`fullname` = '', m.`username`, t.`fullname`) `user`, IF(t.`status` != 'passed', 1, 0) `delete` " . 'FROM `:prefix:table_transactions` t ' . 'LEFT JOIN `:prefix:table_members` m ON (m.`id` = t.`member_id`) ' . ($where ? 'WHERE ' . $where . ' ' : '') . $order . ' ' . 'LIMIT :start, :limit'; $sql = iaDb::printf($sql, array('prefix' => $this->_iaDb->prefix, 'table_members' => iaUsers::getTable(), 'table_transactions' => $this->getTable(), 'start' => $start, 'limit' => $limit)); return $this->_iaDb->getAll($sql); }
$iaView->assign('tags', $blogTags); $iaView->assign('blog_entry', $blogEntry); } else { $page = empty($_GET['page']) ? 0 : (int) $_GET['page']; $page = $page < 1 ? 1 : $page; $pageUrl = $iaCore->factory('page', iaCore::FRONT)->getUrlByName('blog'); $pagination = array('start' => ($page - 1) * $iaCore->get('blog_number'), 'limit' => (int) $iaCore->get('blog_number'), 'template' => $pageUrl . '?page={page}'); $order = 'date' == $iaCore->get('blog_order') ? 'ORDER BY `date_added` DESC' : 'ORDER BY `title` ASC'; $stmt = '`status` = :status AND `lang` = :language'; $iaDb->bind($stmt, array('status' => iaCore::STATUS_ACTIVE, 'language' => $iaView->language)); $sql = 'SELECT SQL_CALC_FOUND_ROWS ' . 'b.`id`, b.`title`, b.`date_added`, b.`body`, b.`alias`, b.`image`, m.`fullname` ' . 'FROM `:prefix:table_blog_entries` b ' . 'LEFT JOIN `:prefix:table_members` m ON (b.`member_id` = m.`id`) ' . 'WHERE b.' . $stmt . $order . ' LIMIT :start, :limit'; $sql = iaDb::printf($sql, array('prefix' => $iaDb->prefix, 'table_blog_entries' => 'blog_entries', 'table_members' => 'members', 'start' => $pagination['start'], 'limit' => $pagination['limit'])); $rows = $iaDb->getAll($sql); $pagination['total'] = $iaDb->foundRows(); $sql = 'SELECT bt.`title`, bt.`alias`, bet.`blog_id` ' . 'FROM `:prefix:table_blog_tags` bt ' . 'LEFT JOIN `:prefix:table_blog_entries_tags` bet ON (bt.`id` = bet.`tag_id`) ' . 'ORDER BY bt.`title`'; $sql = iaDb::printf($sql, array('prefix' => $iaDb->prefix, 'table_blog_entries_tags' => 'blog_entries_tags', 'table_blog_tags' => 'blog_tags')); $blogTags = $iaDb->getAll($sql); $iaView->assign('tags', $blogTags); $iaView->assign('blog_entries', $rows); $iaView->assign('pagination', $pagination); } $pageActions[] = array('icon' => 'rss', 'title' => '', 'url' => IA_URL . 'blog.xml', 'classes' => 'btn-warning'); $iaView->set('actions', $pageActions); $iaView->display('index'); } if (iaView::REQUEST_XML == $iaView->getRequestType()) { $output = array('title' => $iaCore->get('site') . ' :: ' . $iaView->title(), 'description' => '', 'url' => IA_URL . 'blog', 'item' => array()); $listings = $iaDb->all(iaDb::ALL_COLUMNS_SELECTION, "`lang`= '" . $iaView->language . "'", 0, 20); $pageUrl = $iaCore->factory('page', iaCore::FRONT)->getUrlByName('blog'); foreach ($listings as $entry) { $output['item'][] = array('title' => $entry['title'], 'link' => $pageUrl . $entry['id'] . '-' . $entry['alias'], 'pubDate' => date('D, d M Y H:i:s T', strtotime($entry['date_modified'])), 'description' => iaSanitize::tags($entry['body']));
public function saveTags($id, $tags) { $tags = array_filter(explode(',', $tags)); $this->iaDb->setTable($this->_tableBlogEntriesTags); $sql = 'DELETE ' . 'FROM `:prefix:table_blog_tags` ' . 'WHERE `id` IN (' . 'SELECT DISTINCT `tag_id` ' . 'FROM `:prefix:table_blog_entries_tags` ' . 'WHERE `tag_id` IN (' . 'SELECT DISTINCT `tag_id` FROM `:prefix:table_blog_entries_tags` ' . 'WHERE `blog_id` = :id) ' . 'GROUP BY 1 ' . 'HAVING COUNT(*) = 1)'; $sql = iaDb::printf($sql, array('prefix' => $this->iaDb->prefix, 'table_blog_tags' => $this->_tableBlogTags, 'table_blog_entries_tags' => $this->_tableBlogEntriesTags, 'id' => $id)); $this->iaDb->query($sql); $sql = 'DELETE ' . 'FROM :prefix:table_blog_entries_tags ' . 'WHERE `blog_id` = :id'; $sql = iaDb::printf($sql, array('prefix' => $this->iaDb->prefix, 'table_blog_entries_tags' => $this->_tableBlogEntriesTags, 'id' => $id)); $this->iaDb->query($sql); $allTagTitles = $this->iaDb->keyvalue(array('title', 'id'), null, $this->_tableBlogTags); foreach ($tags as $tag) { $tagAlias = iaSanitize::alias(strtolower($tag)); $tagEntry = array('title' => $tag, 'alias' => $tagAlias); $tagId = isset($allTagTitles[$tag]) ? $allTagTitles[$tag] : $this->iaDb->insert($tagEntry, null, $this->_tableBlogTags); $tagBlogIds = array('blog_id' => $id, 'tag_id' => $tagId); $this->iaDb->insert($tagBlogIds); } }
protected function _gridQuery($columns, $where, $order, $start, $limit) { $sql = 'SELECT SQL_CALC_FOUND_ROWS ' . 'b.`id`, b.`title`, b.`alias`, b.`date_added`, b.`status`, m.`fullname` `owner`, 1 `update`, 1 `delete` ' . 'FROM `:prefix:table_blog_entries` b ' . 'LEFT JOIN `:prefix:table_members` m ON (b.`member_id` = m.`id`) ' . ($where ? "WHERE " . $where : '') . $order . ' ' . 'LIMIT :start, :limit'; $sql = iaDb::printf($sql, array('prefix' => $this->_iaDb->prefix, 'table_blog_entries' => $this->getTable(), 'table_members' => iaUsers::getTable(), 'start' => $start, 'limit' => $limit)); return $this->_iaDb->getAll($sql); }
protected function _entryDelete($entryId) { $stmt = '`id` = :id AND `id` != :user'; $stmt = iaDb::printf($stmt, array('id' => (int) $entryId, 'user' => (int) iaUsers::getIdentity()->id)); return $this->getHelper()->delete($stmt); }
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; }
protected function _setRelations() { $sql = 'UPDATE `:prefix:table` f ' . "SET f.relation = ':dependent' " . 'WHERE (' . 'SELECT COUNT(*) FROM `:prefix:table_relations` fr WHERE fr.`child` = f.`name`' . ') > 0'; $sql = iaDb::printf($sql, array('prefix' => $this->_iaDb->prefix, 'table' => iaField::getTable(), 'dependent' => iaField::RELATION_DEPENDENT, 'table_relations' => iaField::getTableRelations())); $this->_iaDb->query($sql); }
public function isExtrasExist($extrasName, $type = null) { $stmt = iaDb::printf("`name` = ':name' AND `status` = ':status'", array('name' => $extrasName, 'status' => iaCore::STATUS_ACTIVE)); if ($type) { $stmt .= iaDb::printf(" AND `type` = ':type'", array('type' => $type)); } return (bool) $this->iaDb->exists($stmt, null, self::getExtrasTable()); }
} } if (isset($iaCore->requestPath[0]) && !isset($iaCore->requestPath[1])) { iaBreadcrumb::preEnd('Blog Archive', 'blog/date'); iaBreadcrumb::replaceEnd($iaCore->requestPath[0], IA_SELF); $iaView->title($iaCore->requestPath[0]); } $iaView->assign('show', $show); $iaView->assign('years', $years); $iaView->assign('months', $months); } else { $iaView->setMessages(iaLanguage::get('no_blog_entries'), iaView::ALERT); } } elseif (isset($iaCore->requestPath[0]) && isset($iaCore->requestPath[1])) { $page = empty($_GET['page']) ? 0 : (int) $_GET['page']; $page = $page < 1 ? 1 : $page; $pageUrl = $iaCore->factory('page', iaCore::FRONT)->getUrlByName('blog_date'); $pagination = array('start' => ($page - 1) * $iaCore->get('blog_number'), 'limit' => (int) $iaCore->get('blog_number'), 'template' => $pageUrl . '?page={page}'); $stmt = "`status` = 'active' AND MONTH(b.`date_added`) = '" . $iaCore->requestPath[1] . "' AND YEAR(b.`date_added`) = '" . $iaCore->requestPath[0] . "' "; $order = 'date' == $iaCore->get('blog_order') ? 'ORDER BY b.`date_added` DESC' : 'ORDER BY b.`title` ASC'; $sql = 'SELECT SQL_CALC_FOUND_ROWS ' . 'b.`id`, b.`title`, b.`date_added`, b.`body`, b.`alias`, b.`image`, m.`fullname` ' . 'FROM `:prefix:table_blog_entries` b ' . 'LEFT JOIN `:prefix:table_members` m ON (b.`member_id` = m.`id`) ' . 'WHERE b.' . $stmt . $order . ' LIMIT :start, :limit'; $sql = iaDb::printf($sql, array('prefix' => $iaDb->prefix, 'table_blog_entries' => 'blog_entries', 'table_members' => 'members', 'start' => $pagination['start'], 'limit' => $pagination['limit'])); $blogs = $iaDb->getAll($sql); iaBreadcrumb::toEnd(date("F", mktime(0, 0, 0, $iaCore->requestPath[1], 10))); $pagination['total'] = $iaDb->foundRows(); $iaView->assign('blogs', $blogs); $iaView->assign('pagination', $pagination); $iaView->title(date("F", mktime(0, 0, 0, $iaCore->requestPath[1], 10))); } $iaView->display('date'); }
private function _humanize(array $logEntry) { $params = unserialize($logEntry['params']); if (isset($params['user'])) { $params['user'] = sprintf('<a href="%s" target="_blank">%s</a>', IA_ADMIN_URL . 'members/edit/' . $logEntry['user_id'] . '/', $params['user']); } if (isset($params['name'])) { $params['name'] = iaSanitize::html($params['name']); } $style = 'added'; switch ($logEntry['action']) { case self::ACTION_CREATE: case self::ACTION_UPDATE: case self::ACTION_DELETE: $actionsMap = array(self::ACTION_CREATE => 'create', self::ACTION_UPDATE => 'update', self::ACTION_DELETE => 'remove'); $iconsMap = array('block' => 'grid', 'page' => 'copy', 'member' => 'members', 'blog' => 'quill', 'listing' => 'link', 'menu' => 'menu'); if (isset($params['item']) && isset($params['id']) && isset($params['name']) && self::ACTION_DELETE != $logEntry['action']) { $urlPart = isset($params['path']) ? $params['path'] : $params['item'] . 's'; $params['name'] = sprintf(self::LINK_PATTERN, IA_ADMIN_URL . $urlPart . '/edit/' . $params['id'] . '/', $params['name']); } if (self::ACTION_DELETE == $logEntry['action']) { $params['name'] = '"' . $params['name'] . '"'; $style = 'removed'; } // special case if ('member' == $params['item']) { switch (true) { case self::ACTION_CREATE == $logEntry['action'] && isset($params['type']) && iaCore::FRONT == $params['type']: return array('New member signed up: ' . sprintf(self::LINK_PATTERN, IA_ADMIN_URL . 'members/edit/' . $params['id'] . '/', $params['name']) . '.', $iconsMap[$params['item']], 'default'); case self::ACTION_UPDATE == $logEntry['action'] && iaUsers::getIdentity()->id == $params['id']: return array(sprintf('You updated ' . self::LINK_PATTERN . '.', IA_ADMIN_URL . 'members/edit/' . iaUsers::getIdentity()->id . '/', 'profile of yourself'), $iconsMap[$params['item']], $style); } } return array(iaDb::printf(':item :name :actiond by :user.', array_merge($params, array('action' => $actionsMap[$logEntry['action']], 'item' => ucfirst(iaLanguage::get($params['item'], $params['item']))))), isset($iconsMap[$params['item']]) ? $iconsMap[$params['item']] : 'copy', $style); case self::ACTION_LOGIN: $text = ':user logged in <small class="text-muted"><em>from :ip.</em></small>'; $text .= $logEntry['user_id'] == iaUsers::getIdentity()->id ? ' — you' : ''; $text .= '.'; return array(iaDb::printf($text, $params), 'user', $style); case self::ACTION_INSTALL: switch ($params['type']) { case 'app': return array('Subrion version ' . IA_VERSION . ' installed. Cheers!', 'subrion', 'default'); case 'template': $text = iaDb::printf(':user activated the ":name" template.', $params); return array($text, 'eye', 'default'); } $params['name'] = ucfirst($params['name']); return array(iaDb::printf(':user installed ":name" :type.', $params), 'extensions', $style); case self::ACTION_UNINSTALL: $params['name'] = ucfirst($params['name']); return array(iaDb::printf(':user uninstalled ":name" :type.', $params), 'extensions', 'removed'); case self::ACTION_ENABLE: case self::ACTION_DISABLE: $params['name'] = ucfirst($params['name']); if (self::ACTION_DISABLE == $logEntry['action']) { $style = 'removed'; } $actionsMap = array(self::ACTION_ENABLE => 'activated', self::ACTION_DISABLE => 'deactivated'); return array(iaDb::printf('The ":name" :type :action by :user.', array_merge($params, array('action' => $actionsMap[$logEntry['action']]))), 'extensions', $style); case self::ACTION_UPGRADE: $icon = 'extensions'; switch ($params['type']) { case 'package': case 'plugin': $message = '":name" :type upgraded to :to version.'; $params['name'] = ucfirst($params['name']); break; case 'app': case 'app-forced': $icon = 'subrion'; $message = 'app' == $params['type'] ? 'Subrion version upgraded from :from to :to. The :log is available.' : 'Automated Subrion upgrade from :from to :to. View the :log.'; $link = sprintf(self::LINK_PATTERN, IA_CLEAR_URL . 'uploads' . IA_URL_DELIMITER . $params['file'], 'log'); $params['log'] = $link; } $message = iaDb::printf($message, array_merge($params)); return array($message, $icon, 'default'); } }
* Subrion is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Subrion. If not, see <http://www.gnu.org/licenses/>. * * * @link http://www.subrion.org/ * ******************************************************************************/ if (iaView::REQUEST_HTML == $iaView->getRequestType()) { if ($iaView->blockExists('blogroll') || $iaView->blockExists('new_blog_posts')) { $stmt = 'b.`status` = :status AND `lang` = :language ORDER BY b.`date_added` DESC'; $iaDb->bind($stmt, array('status' => iaCore::STATUS_ACTIVE, 'language' => $iaView->language)); $sql = 'SELECT b.`id`, b.`title`, b.`date_added`, b.`alias`, b.`body`, b.`image`, m.`fullname` ' . 'FROM `:prefix:table_blog_entries` b ' . 'LEFT JOIN `:prefix:table_members` m ON (b.`member_id` = m.`id`) ' . 'WHERE :condition ' . 'LIMIT :start, :limit'; $sql = iaDb::printf($sql, array('prefix' => $iaDb->prefix, 'table_blog_entries' => 'blog_entries', 'table_members' => 'members', 'condition' => $stmt, 'start' => 0, 'limit' => $iaCore->get('blog_number_block'))); $array = $iaDb->getAll($sql); $iaView->assign('block_blog_entries', $array); } if ($iaView->blockExists('blogs_archive')) { $data = array(); if ($array = $iaDb->all('DISTINCT(MONTH(`date_added`)) `month`, YEAR(`date_added`) `year`', "`status` = 'active' GROUP BY `date_added` ORDER BY `date_added` DESC", 0, 6, 'blog_entries')) { foreach ($array as $date) { $data[] = array('url' => IA_URL . 'blog/date/' . $date['year'] . IA_URL_DELIMITER . $date['month'] . IA_URL_DELIMITER, 'month' => $date['month'], 'year' => $date['year']); } } $iaView->assign('blogs_archive', $data); } }
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; }
public function getTags($id) { $sql = 'SELECT GROUP_CONCAT(`title`) ' . 'FROM `:prefix:table_blog_tags` bt ' . 'WHERE `id` IN (' . 'SELECT `tag_id` ' . 'FROM `:prefix:table_blog_entries_tags` ' . 'WHERE `blog_id` = :id)'; $sql = iaDb::printf($sql, array('prefix' => $this->_iaDb->prefix, 'table_blog_tags' => $this->_tableBlogTags, 'table_blog_entries_tags' => $this->_tableBlogEntriesTags, 'id' => $id)); return $this->_iaDb->getOne($sql); }
protected function _getQueryStmtByParams() { $this->iaCore->factory('field'); $statements = array(); foreach ($this->_params as $fieldName => $value) { if ($this->getOption('customColumns') && in_array($fieldName, $this->_options['customColumns'])) { $statements[] = $this->_performCustomColumnTranslation($fieldName, $value); continue; } $column = ':column'; $condition = '='; $val = is_string($value) ? "'" . iaSanitize::sql($value) . "'" : ''; switch ($this->_fieldTypes[$fieldName]) { case iaField::CHECKBOX: foreach ($value as $v) { $expr = sprintf("FIND_IN_SET('%s', :column)", iaSanitize::sql($v)); $statements[] = array('col' => $expr, 'cond' => '>', 'val' => 0, 'field' => $fieldName); } continue 2; case iaField::NUMBER: empty($value['f']) || ($statements[] = array('col' => $column, 'cond' => '>=', 'val' => (double) $value['f'], 'field' => $fieldName)); empty($value['t']) || ($statements[] = array('col' => $column, 'cond' => '<=', 'val' => (double) $value['t'], 'field' => $fieldName)); continue 2; case iaField::COMBO: case iaField::TREE: $array = array(); $value = is_array($value) ? $value : array($value); foreach ($value as $v) { if (trim($v)) { $v = "'" . iaSanitize::sql($v) . "'"; $array[] = array('col' => $column, 'cond' => $condition, 'val' => $v, 'field' => $fieldName); } } empty($array) || ($statements[] = $array); continue 2; case iaField::TEXT: case iaField::TEXTAREA: case iaField::URL: $condition = 'LIKE'; $val = "'%" . iaSanitize::sql($value) . "%'"; break; case iaField::PICTURES: case iaField::IMAGE: case iaField::STORAGE: $condition = '!='; $val = "''"; break; case iaField::DATE: } $statements[] = array('col' => $column, 'cond' => $condition, 'val' => $val, 'field' => $fieldName); } if (!$statements) { return iaDb::EMPTY_CONDITION; } $tableAlias = $this->getOption('tableAlias') ? $this->getOption('tableAlias') . '.' : ''; foreach ($statements as &$stmt) { if (isset($stmt['field'])) { $stmt = iaDb::printf(':column :condition :value', array('column' => str_replace(':column', sprintf('%s`%s`', $tableAlias, $stmt['field']), $stmt['col']), 'condition' => $stmt['cond'], 'value' => $stmt['val'])); } else { $s = array(); foreach ($stmt as $innerStmt) { $s[] = iaDb::printf(':column :condition :value', array('column' => str_replace(':column', sprintf('%s`%s`', $tableAlias, $innerStmt['field']), $innerStmt['col']), 'condition' => $innerStmt['cond'], 'value' => $innerStmt['val'])); } $stmt = '(' . implode(' OR ', $s) . ')'; } } return '(' . implode(' AND ', $statements) . ')'; }