Subrion - open source content management system Copyright (C) 2016 Intelliants, LLC This file is part of Subrion. Subrion is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 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 .
Inheritance: extends abstractCore
Exemplo n.º 1
0
 protected function _preSaveEntry(array &$entry, array $data, $action)
 {
     $this->_iaCore->startHook('adminAddMemberValidation');
     $iaAcl = $this->_iaCore->factory('acl');
     $iaField = $this->_iaCore->factory('field');
     $fields = iaField::getAcoFieldsList(iaCore::ADMIN, $this->_itemName);
     // below is the hacky way to force the script to upload files to the appropriate user's folder
     // FIXME
     $activeUser = iaUsers::getIdentity(true);
     $_SESSION[iaUsers::SESSION_KEY] = array('id' => $this->getEntryId(), 'username' => $data['username']);
     list($entry, $error, $this->_messages, ) = $iaField->parsePost($fields, $entry);
     $_SESSION[iaUsers::SESSION_KEY] = $activeUser;
     //
     if ($iaAcl->isAccessible($this->getName(), 'usergroup')) {
         if (isset($data['usergroup_id'])) {
             $entry['usergroup_id'] = array_key_exists($data['usergroup_id'], $this->_userGroups) ? $data['usergroup_id'] : iaUsers::MEMBERSHIP_REGULAR;
         }
     } elseif (iaCore::ACTION_ADD == $action) {
         $entry['usergroup_id'] = iaUsers::MEMBERSHIP_REGULAR;
     }
     if ($error) {
         return false;
     }
     $stmt = '`email` = :email';
     if (iaCore::ACTION_EDIT == $action) {
         if (isset($entry['status']) && $entry['status'] == $this->_iaDb->one('status', iaDb::convertIds((int) $this->getEntryId()))) {
             unset($entry['status']);
         }
         $stmt .= ' AND `id` != ' . (int) $this->getEntryId();
     }
     if ($this->_iaDb->exists($stmt, $entry)) {
         $this->addMessage('error_duplicate_email');
     }
     if ($this->_iaDb->exists('`username` = :username AND `id` != :id', array('username' => $entry['username'], 'id' => $this->getEntryId()))) {
         $this->addMessage('username_already_taken');
     }
     if ($iaAcl->checkAccess($this->getName(), 'password') || iaCore::ACTION_ADD == $action) {
         $this->_password = trim($data['_password']);
         if ($this->_password || !empty($data['_password2'])) {
             $entry['password'] = $this->getHelper()->encodePassword($this->_password);
             iaUtil::loadUTF8Functions('ascii', 'validation', 'bad', 'utf8_to_ascii');
             if (empty($entry['password'])) {
                 $this->addMessage('error_password_empty');
             } elseif (!utf8_is_ascii($entry['password'])) {
                 $this->addMessage(iaLanguage::get('password') . ': ' . iaLanguage::get('ascii_required'));
             } elseif ($entry['password'] != $this->getHelper()->encodePassword($data['_password2'])) {
                 $this->addMessage('error_password_match');
             }
         }
     }
     if (empty($data['_password']) && iaCore::ACTION_ADD == $action) {
         $this->addMessage('error_password_empty');
     }
     return !$this->getMessages();
 }
Exemplo n.º 2
0
function searchableFields($iaDb, $aItems, $types = null)
{
    $result = array();
    $stmt = "`adminonly` = 0 AND `searchable` = 1 AND `item` IN('" . implode("', '", $aItems) . "') ";
    if (is_array($types)) {
        $stmt .= sprintf(" AND `type` IN ('%s') ", implode("', '", $types));
    }
    $fields = $iaDb->all(array('name', 'item', 'values', 'type', 'show_as'), $stmt, null, null, iaField::getTable());
    foreach ($fields as $f) {
        if ('combo' == $f['type'] || 'radio' == $f['type'] || 'checkbox' == $f['type']) {
            $f['type'] = $f['show_as'];
            $values = array();
            foreach (explode(',', $f['values']) as $key) {
                $values[$key] = iaLanguage::get("field_{$f['name']}_{$key}");
            }
            $f['values'] = $values;
        }
        $result[$f['item']][$f['name']] = $f;
    }
    return $result;
}
Exemplo n.º 3
0
     // check password
     if (!$itemData['disable_fields']) {
         if (!$itemData['password']) {
             $error = true;
             $messages[] = iaLanguage::get('error_password_empty');
         } else {
             if ($_POST['password'] != $_POST['password2']) {
                 $error = true;
                 $messages[] = iaLanguage::get('error_password_match');
             }
         }
     } else {
         $itemData['password'] = '';
     }
 } else {
     iaField::keepValues($itemData, $fields);
     $iaView->setMessages($messages);
 }
 if (!$error) {
     $memberId = $iaUsers->register($itemData);
     if ($memberId) {
         $iaCore->factory('log')->write(iaLog::ACTION_CREATE, array('item' => 'member', 'name' => $itemData['fullname'], 'id' => $memberId, 'type' => iaCore::FRONT));
     }
     // process sponsored plan
     if ($memberId && isset($_POST['plan_id']) && is_numeric($_POST['plan_id'])) {
         $plan = $iaPlan->getById($_POST['plan_id']);
         $usergroup = $plan['usergroup'] ? $plan['usergroup'] : iaUsers::MEMBERSHIP_REGULAR;
         $iaDb->update(array('id' => $memberId, 'usergroup_id' => $usergroup), 0, 0, iaUsers::getTable());
         if ($plan['cost'] > 0) {
             $itemData['id'] = $memberId;
             $itemData['member_id'] = $memberId;
Exemplo n.º 4
0
 private function _getFieldsList()
 {
     $this->_iaCore->factory('field');
     $fields = array();
     $rows = $this->_iaDb->all(array('name', 'item', 'for_plan', 'required'), ' 1=1 ORDER BY `for_plan` DESC', null, null, iaField::getTable());
     foreach ($rows as $row) {
         $type = $row['for_plan'];
         if ($row['required'] == 1) {
             $type = 2;
             // required
         }
         if (!isset($fields[$row['item']])) {
             $fields[$row['item']] = array(2 => array(), 1 => array(), 0 => array());
         }
         $fields[$row['item']][$type][] = $row['name'];
     }
     return $fields;
 }
Exemplo n.º 5
0
 // these fields are system and used in system template
 $item = array('status' => 'active', 'account_username' => $_SESSION['user']['username'], 'featured' => true);
 if ('edit' == $pageAction) {
     $item = $iaAlbum->getById((int) $_GET['id']);
     if (empty($item)) {
         iaView::errorPage(iaView::ERROR_NOT_FOUND);
     }
 }
 $fields = iaField::getAllFields(true, '', 'albums');
 if (isset($_POST['save'])) {
     $error = false;
     $errorFields = array();
     $messages = array();
     iaCore::util();
     if ($fields) {
         list($data, $error, $messages, $errorFields) = iaField::parsePost($fields, $item, true);
     }
     // validate account
     if (isset($_POST['account']) && !empty($_POST['account'])) {
         $member_id = $iaDb->one('id', "`username` = '{$_POST['account']}' ", iaUsers::getTable());
         if (!$member_id) {
             $error = true;
             $messages[] = iaLanguage::get('album_incorrect_account');
         } else {
             $data['member_id'] = $member_id;
         }
     } else {
         $data['member_id'] = iaUsers::getIdentity()->id;
     }
     if (!defined('IA_NOUTF')) {
         iaUtf8::loadUTF8Core();
Exemplo n.º 6
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;
 }
Exemplo n.º 7
0
 private function _processParams($params, $processRequestUri = false)
 {
     $data = array();
     $stmt = '`item` = :item AND `searchable` = 1';
     $this->iaDb->bind($stmt, array('item' => $this->_itemName));
     $this->_fieldTypes = $this->iaDb->keyvalue(array('name', 'type'), $stmt, iaField::getTable());
     if ($params && is_array($params)) {
         foreach ($params as $fieldName => $value) {
             empty($this->getOption('columnAlias')->{$fieldName}) || ($fieldName = $this->getOption('columnAlias')->{$fieldName});
             if (empty($value) || !isset($this->_fieldTypes[$fieldName]) && ($this->getOption('customColumns') && !in_array($fieldName, $this->_options['customColumns']))) {
                 continue;
             }
             $data[$fieldName] = $value;
         }
     }
     // support for custom parameters field:value within request URL
     if ($processRequestUri) {
         $captions = array();
         foreach ($this->iaCore->requestPath as $chunk) {
             if (false === strstr($chunk, ':')) {
                 continue;
             }
             $value = explode(':', $chunk);
             $key = array_shift($value);
             empty($this->getOption('columnAlias')->{$key}) || ($key = $this->getOption('columnAlias')->{$key});
             if ($value && isset($this->_fieldTypes[$key])) {
                 switch ($this->_fieldTypes[$key]) {
                     case iaField::NUMBER:
                         if (count($value) > 1) {
                             $data[$key] = array('f' => (int) $value[0], 't' => (int) $value[1]);
                             $captions[] = sprintf('%d-%d', $value[0], $value[1]);
                         } else {
                             $data[$key] = array('f' => (int) $value[0], 't' => (int) $value[0]);
                             $captions[] = $value[0];
                         }
                         break;
                     case iaField::COMBO:
                         foreach ($value as $v) {
                             $title = iaLanguage::get(sprintf('field_%s_%s', $key, $v), false);
                             empty($title) || ($captions[] = $title);
                         }
                         $data[$key] = $value;
                         break;
                     default:
                         $data[$key] = $value;
                         $captions[] = $value;
                 }
             }
         }
         $this->_caption = implode(' ', $captions);
     }
     $this->_params = $data;
 }
Exemplo n.º 8
0
         $messages[] = iaLanguage::get('password_empty');
     }
     if ($newPassword != $_POST['confirm']) {
         $error = true;
         $messages[] = iaLanguage::get('error_password_match');
     }
     if (!$error) {
         $iaUsers->changePassword(iaUsers::getIdentity(true), $newPassword, false);
         $error = false;
         $messages[] = iaLanguage::get('password_changed');
     }
     $iaView->setMessages($messages, $error ? iaView::ERROR : iaView::SUCCESS);
 } elseif ($_POST && (isset($_POST['change_info']) || isset($_POST['plan_id']))) {
     if (isset($_POST['change_info'])) {
         $item = array();
         $fields = iaField::getAcoFieldsList(null, $itemName, null, true, iaUsers::getIdentity(true));
         list($item, $error, $messages, $error_fields) = $iaField->parsePost($fields, iaUsers::getIdentity(true));
         if (!$error) {
             if (isset($_POST['usergroup_id']) && $assignableGroups && in_array((int) $_POST['usergroup_id'], array_keys($assignableGroups))) {
                 $item['usergroup_id'] = $_POST['usergroup_id'];
             }
             $iaDb->update($item, iaDb::convertIds(iaUsers::getIdentity()->id));
             if (0 == $iaDb->getErrorNumber()) {
                 $iaCore->startHook('phpUserProfileUpdate', array('userInfo' => iaUsers::getIdentity(true), 'data' => $item));
                 iaUsers::reloadIdentity();
                 $iaView->setMessages(iaLanguage::get('saved'), iaView::SUCCESS);
             } else {
                 $iaView->setMessages(iaLanguage::get('db_error'));
             }
         } else {
             $iaView->setMessages($messages);
Exemplo n.º 9
0
 private function _getParents($name)
 {
     $result = array();
     if ($parents = $this->_iaDb->all(iaDb::ALL_COLUMNS_SELECTION, "`child` = '{$name}'", 0, null, iaField::getTableRelations())) {
         foreach ($parents as $parent) {
             $result[$parent['item']][$parent['field']][$parent['element']] = true;
         }
     }
     return $result;
 }
Exemplo n.º 10
0
 protected function _processFields(array $fields)
 {
     if (!$fields) {
         return;
     }
     $this->iaCore->factory('field');
     $fieldGroups = $this->iaDb->keyvalue('CONCAT(`item`, `name`) `key`, `id`', null, iaField::getTableGroups());
     $this->iaDb->setTable(iaField::getTable());
     $maxOrder = $this->iaDb->getMaxOrder();
     foreach ($fields as $entry) {
         $stmt = '`item` = :item AND `name` = :name';
         $this->iaDb->bind($stmt, array('item' => $entry['item'], 'name' => $entry['name']));
         if ($row = $this->iaDb->row(array('id', 'extras'), $stmt)) {
             if (false === stripos($row['extras'], $this->itemData['name'])) {
                 $value = ($row['extras'] ? ',' : '') . $this->itemData['name'];
                 $value = sprintf("CONCAT(`extras`, '%s')", $value);
                 $this->iaDb->update(null, iaDb::convertIds($row['id']), array('extras' => $value));
             }
             continue;
         }
         $entry['order'] || ($entry['order'] = ++$maxOrder);
         $entry['fieldgroup_id'] = isset($fieldGroups[$entry['item'] . $entry['group']]) ? $fieldGroups[$entry['item'] . $entry['group']] : 0;
         $this->_addPhrase('field_' . $entry['name'], $entry['title']);
         unset($entry['group'], $entry['title']);
         if (is_array($entry['numberRangeForSearch'])) {
             foreach ($entry['numberRangeForSearch'] as $num) {
                 $this->_addPhrase('field_' . $entry['name'] . '_range_' . $num, $num, iaLanguage::CATEGORY_FRONTEND);
             }
         }
         unset($entry['numberRangeForSearch']);
         if (iaField::RELATION_DEPENDENT == $entry['relation']) {
             $this->iaDb->setTable(iaField::getTableRelations());
             foreach (explode(';', $entry['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' => $entry['name'], 'item' => $entry['item'], 'extras' => $this->itemData['name']);
                         $this->iaDb->insert($entryData);
                     }
                 }
             }
             $this->iaDb->resetTable();
         }
         unset($entry['parent']);
         if (is_array($entry['values'])) {
             foreach ($entry['values'] as $key => $value) {
                 $key = sprintf('field_%s_%s', $entry['name'], $key);
                 $this->_addPhrase($key, $value);
             }
             if ($entry['default']) {
                 // TODO: multiple default values for checkboxes should be implemented
                 if (!in_array($entry['default'], array_keys($entry['values']))) {
                     $entry['default'] = array_search($entry['default'], $entry['values']);
                 }
             }
             $entry['values'] = implode(',', array_keys($entry['values']));
         }
         $fieldPages = $entry['item_pages'] ? $entry['item_pages'] : array();
         $tableName = $entry['table_name'];
         $className = $entry['class_name'];
         unset($entry['item_pages'], $entry['table_name'], $entry['class_name']);
         $fieldId = $this->iaDb->insert($entry);
         $entry['table_name'] = $tableName;
         $entry['class_name'] = $className;
         foreach ($fieldPages as $pageName) {
             if (trim($pageName)) {
                 $row = array('page_name' => $pageName, 'field_id' => $fieldId, 'extras' => $this->itemData['name']);
                 $this->iaDb->insert($row, null, iaField::getTablePages());
             }
         }
         $columnExists = false;
         foreach ($this->iaDb->describe($tableName) as $f) {
             if ($f['Field'] == $entry['name']) {
                 $columnExists = true;
                 break;
             }
         }
         $columnExists || $this->_alterTable($entry);
     }
     $this->iaDb->resetTable();
 }
Exemplo n.º 11
0
     $iaView->assign('album', $album);
     // get artist information
     $iaArtist = $iaCore->factoryPackage('artist', IA_CURRENT_PACKAGE);
     $artist = $iaArtist->getArtist($album['id_artist']);
     $iaView->assign('artist', $artist);
     // get artist albums
     $albums = $iaAlbum->getAlbumsByArtist($album['id_artist'], "AND `id` <> '{$album['id']}'");
     $iaView->assign('albums', $albums);
     // get artist lyrics
     $iaLyric = $iaCore->factoryPackage('lyric', IA_CURRENT_PACKAGE);
     $lyrics = $iaLyric->getLyricsByAlbum($album['id']);
     if ($lyrics) {
         $lyrics = $iaItem->updateItemsFavorites($lyrics, $iaLyric->getItemName());
         // filter fields
         iaCore::fields();
         $fields = iaField::filterFields($lyrics, $iaLyric->getItemName());
         $iaView->assign('fields', $fields);
     }
     $iaView->assign('lyrics', $lyrics);
     // count views
     $iaAlbum->incrementViewsCounter($album['id']);
     // breadcrumb formation
     iaBreadcrumb::add(_t('artists'), 'artists/');
     iaBreadcrumb::add($artist['title'], $iaCore->iaSmarty->ia_url(array('type' => 'url', 'item' => $iaArtist->getItemName(), 'data' => $artist)));
     // set meta keywords and description
     $iaView->set('description', $album['meta_description']);
     $iaView->set('keywords', $album['meta_keywords']);
     $iaView->title($album['title']);
     $iaView->display('albumview');
     break;
 case 'lyric_view':
Exemplo n.º 12
0
            $per_page = $iaCore->get('lyrics_per_page', 10);
            $page = isset($_GET['page']) && 1 < $_GET['page'] ? (int) $_GET['page'] : 1;
            $start = ($page - 1) * $per_page;
            $where = false;
            // gets current page and defines start position
            $num_index = 20;
            $page = !empty($_GET['page']) ? (int) $_GET['page'] : 1;
            $start = (max($page, 1) - 1) * $num_index;
            $search_alphas = array('0-9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
            $alpha = isset($iaCore->requestPath[0]) && in_array($iaCore->requestPath[0], $search_alphas) ? $iaCore->requestPath[0] : false;
            $cause = $alpha ? '0-9' == $alpha ? "(`{$account_by}` REGEXP '^[0-9]') AND " : "(`{$account_by}` LIKE '{$alpha}%') AND " : '';
            // get genres
            $genres = $iaGenre->getGenres($where, $start, $per_page);
            // get total number of genres
            $genres_total = $iaGenre->iaDb->foundRows();
            if ($genres) {
                $iaItem = $iaCore->factory('item');
                $genres = $iaItem->updateItemsFavorites($genres, 'genres');
                // filter fields
                $fields = iaField::filterFields($genres, 'genres');
                $iaView->assign('fields', $fields);
            }
            $iaView->assign('genres', $genres);
            $iaView->assign('aTotal', $genres_total);
            $iaView->assign('aItemsPerPage', $per_page);
            $iaView->assign('aTemplate', IA_URL . 'lyrics/?page={page}');
            break;
        default:
            break;
    }
}
Exemplo n.º 13
0
 protected function _preSaveEntry(array &$entry, array $data, $action)
 {
     $entry = array('name' => iaUtil::checkPostParam('name'), 'item' => iaUtil::checkPostParam('item'), 'collapsible' => iaUtil::checkPostParam('collapsible'), 'collapsed' => iaUtil::checkPostParam('collapsed'), 'tabview' => iaUtil::checkPostParam('tabview'), 'tabcontainer' => iaUtil::checkPostParam('tabcontainer'));
     iaUtil::loadUTF8Functions('ascii', 'bad', 'validation');
     if (iaCore::ACTION_ADD == $action) {
         if (!utf8_is_ascii($entry['name'])) {
             $this->addMessage('ascii_required');
         } else {
             $entry['name'] = strtolower($entry['name']);
         }
         if (!$this->getMessages() && !preg_match('/^[a-z0-9\\-_]{2,50}$/', $entry['name'])) {
             $this->addMessage('name_is_incorrect');
         }
         if (empty($data['item'])) {
             $this->addMessage('at_least_one_item_should_be_checked');
         }
         $entry['order'] = $this->_iaDb->getMaxOrder(iaField::getTableGroups()) + 1;
     }
     foreach ($this->_iaCore->languages as $code => $language) {
         if ($data['titles'][$code]) {
             if (!utf8_is_valid($data['titles'][$code])) {
                 $data['titles'][$code] = utf8_bad_replace($data['titles'][$code]);
             }
         } else {
             $this->addMessage($language['title'] . ': ' . iaLanguage::get('title_incorrect'), false);
         }
         if ($data['description'][$code]) {
             if (!utf8_is_valid($data['description'][$code])) {
                 $data['description'][$code] = utf8_bad_replace($data['description'][$code]);
             }
         }
     }
     return !$this->getMessages();
 }
Exemplo n.º 14
0
     $per_page = $iaCore->get('artists_per_page', 20);
     $page = isset($_GET['page']) && 1 < $_GET['page'] ? (int) $_GET['page'] : 1;
     $start = ($page - 1) * $per_page;
     $search_alphas = iaUtil::getLetters();
     $alpha = isset($iaCore->requestPath[0]) && in_array($iaCore->requestPath[0], $search_alphas) ? $iaCore->requestPath[0] : false;
     $cause = $alpha ? '0-9' == $alpha ? "(`title` REGEXP '^[0-9]') AND " : "(`title` LIKE '{$alpha}%') AND " : '';
     $iaView->assign('search_alphas', $search_alphas);
     $iaView->assign('alpha', $alpha);
     $iaArtist->where = $cause . "`status`='active' ORDER BY `title` ASC ";
     $artists = $iaArtist->getArtists(false, $start, $per_page);
     $total_artists = $iaArtist->count;
     if ($artists) {
         $iaItem = $iaCore->factory('item');
         $artists = $iaItem->updateItemsFavorites($artists, $iaArtist->getItemName());
         // filter fields
         $fields = iaField::filterFields($artists, 'artists');
         $iaView->assign('fields', $fields);
     }
     $iaView->assign('artists', $artists);
     $iaView->assign('aTotal', $total_artists);
     $iaView->assign('aItemsPerPage', $per_page);
     if ($alpha) {
         iaBreadcrumb::add(_t('artists'), IA_PACKAGE_URL . 'artists/');
         iaBreadcrumb::replaceEnd($alpha, '');
         $iaView->assign('aTemplate', IA_URL . 'artists/' . $alpha . '/?page={page}');
     } else {
         $iaView->assign('aTemplate', IA_URL . 'artists/?page={page}');
     }
     break;
 default:
     break;
Exemplo n.º 15
0
                $data['id'] = $iaLyric->add($data);
            } else {
                if (isset($_POST['delete_lyric'])) {
                    $action = 'deleted';
                    $data['id'] = 0;
                    $iaLyric->delete('`id` = ' . $lyric['id']);
                } else {
                    $action = 'updated';
                    $data['id'] = $lyric['id'];
                    $iaLyric->update($data);
                }
            }
            if (!$error) {
                $messages[] = _t('lyric_' . $action . $dmsg);
                iaUtil::redirect(_t('thanks'), $messages, $iaLyric->url('view', $data));
            }
        }
        if (isset($_POST['ajax'])) {
            header('Content-type: text/xml');
            echo '<?xml version="1.0" encoding="' . $iaCore->get('charset') . '" ?>' . '<root><error>' . $error . '</error><msg><![CDATA[<li>' . implode('</li><li>', $messages) . ']]></msg></root>';
            exit;
        }
    }
    $itemInfo = false;
    $sections = iaField::getAcoGroupsFields(false, 'lyrics', '', $itemInfo);
    $iaView->assign('sections', $sections);
    $iaView->assign('fields', $fields);
    $iaView->assign('error_fields', $errorFields);
    $iaView->assign('item', $lyric);
    $iaView->display('manage');
}