Ejemplo n.º 1
0
 protected function _preSaveEntry(array &$entry, array $data, $action)
 {
     $iaAcl = $this->_iaCore->factory('acl');
     iaUtil::loadUTF8Functions('ascii', 'validation', 'bad', 'utf8_to_ascii');
     $entry['id'] = $iaAcl->obtainFreeId();
     $entry['assignable'] = $data['visible'];
     $entry['visible'] = $data['visible'];
     if (iaCore::ACTION_ADD == $action) {
         if (empty($data['name'])) {
             $this->addMessage('error_usergroup_incorrect');
         } else {
             $entry['name'] = strtolower(iaSanitize::paranoid($data['name']));
             if (!iaValidate::isAlphaNumericValid($entry['name'])) {
                 $this->addMessage('error_usergroup_incorrect');
             } elseif ($this->_iaDb->exists('`name` = :name', array('name' => $entry['name']))) {
                 $this->addMessage('error_usergroup_exists');
             }
         }
     }
     foreach ($this->_iaCore->languages as $iso => $title) {
         if (empty($data['title'][$iso])) {
             $this->addMessage(iaLanguage::getf('error_lang_title', array('lang' => $this->_iaCore->languages[$iso])), false);
         } elseif (!utf8_is_valid($data['title'][$iso])) {
             $data['title'][$iso] = utf8_bad_replace($data['title'][$iso]);
         }
     }
     if (!$this->getMessages()) {
         foreach ($this->_iaCore->languages as $iso => $title) {
             iaLanguage::addPhrase('usergroup_' . $entry['name'], $data['title'][$iso], $iso);
         }
     }
     return !$this->getMessages();
 }
Ejemplo n.º 2
0
 public static function lang($params)
 {
     $key = isset($params['key']) ? $params['key'] : '';
     $default = isset($params['default']) ? $params['default'] : null;
     if (count($params) > 1 && !isset($params['default'])) {
         unset($params['key']);
         return iaLanguage::getf($key, $params);
     }
     return iaLanguage::get($key, $default);
 }
 function httpCheckFile($url)
 {
     $curl = curl_init($url);
     curl_setopt($curl, CURLOPT_NOBODY, true);
     curl_setopt($curl, CURLOPT_HEADER, true);
     curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
     curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
     curl_exec($curl);
     $info = curl_getinfo($curl);
     curl_close($curl);
     if (200 !== $info['http_code']) {
         return array(false, iaLanguage::getf('http_status_error', array('code' => $info['http_code'])));
     } elseif (0 !== $info['redirect_count']) {
         return array(false, iaLanguage::get('extra_redirects_error'));
     } elseif (0 !== $info['download_content_length'] && -1 != $info['download_content_length']) {
         return array(false, iaLanguage::getf('remote_file_is_not_empty', array('bytes' => $info['download_content_length'])));
     } else {
         return array(true, iaLanguage::get('remote_file_validation_success'));
     }
 }
Ejemplo n.º 4
0
 protected function _preSaveEntry(array &$entry, array $data, $action)
 {
     $entry['assignable'] = (int) $data['visible'];
     $entry['visible'] = (int) $data['visible'];
     if (iaCore::ACTION_ADD == $action) {
         if (empty($data['name'])) {
             $this->addMessage('error_usergroup_incorrect');
         } else {
             $entry['name'] = strtolower(iaSanitize::paranoid($data['name']));
             if (!iaValidate::isAlphaNumericValid($entry['name'])) {
                 $this->addMessage('error_usergroup_incorrect');
             } elseif ($this->_iaDb->exists('`name` = :name', array('name' => $entry['name']))) {
                 $this->addMessage('error_usergroup_exists');
             }
         }
     }
     foreach ($this->_iaCore->languages as $code => $language) {
         if (empty($data['title'][$code])) {
             $this->addMessage(iaLanguage::getf('error_lang_title', array('lang' => $language['title'])), false);
         }
     }
     return !$this->getMessages();
 }
Ejemplo n.º 5
0
 public function gridDelete($params, $languagePhraseKey = 'deleted')
 {
     $result = array('result' => false, 'message' => iaLanguage::get('invalid_parameters'));
     if (isset($params['id']) && is_array($params['id']) && $params['id']) {
         $total = count($params['id']);
         $affected = 0;
         foreach ($params['id'] as $id) {
             if ($this->delete($id)) {
                 $affected++;
             }
         }
         if ($affected) {
             $result['result'] = true;
             if (1 == $total) {
                 $result['message'] = iaLanguage::get($languagePhraseKey);
             } else {
                 $result['message'] = $affected == $total ? iaLanguage::getf('items_deleted', array('num' => $affected)) : iaLanguage::getf('items_deleted_of', array('num' => $affected, 'total' => $total));
             }
         } else {
             $result['message'] = iaLanguage::get('db_error');
         }
     }
     return $result;
 }
Ejemplo n.º 6
0
         return iaView::errorPage(iaView::ERROR_FORBIDDEN);
     }
 }
 if (isset($_POST['data-blog-entry'])) {
     $result = false;
     $messages = array();
     iaUtil::loadUTF8Functions('ascii', 'validation', 'bad', 'utf8_to_ascii');
     $entry['title'] = $_POST['title'];
     utf8_is_valid($entry['title']) || ($entry['title'] = utf8_bad_replace($entry['title']));
     if (empty($entry['title'])) {
         $messages[] = iaLanguage::get('title_is_empty');
     }
     $entry['body'] = $_POST['body'];
     utf8_is_valid($entry['body']) || ($entry['body'] = utf8_bad_replace($entry['body']));
     if (empty($entry['body'])) {
         $messages[] = iaLanguage::getf('field_is_empty', array('field' => iaLanguage::get('body')));
     }
     $entry['alias'] = $iaBlog->titleAlias(empty($_POST['alias']) ? $entry['title'] : $_POST['alias']);
     if (!$messages) {
         if (isset($_FILES['image']['tmp_name']) && $_FILES['image']['tmp_name']) {
             $iaPicture = $iaCore->factory('picture');
             $info = array('image_width' => 1000, 'image_height' => 750, 'thumb_width' => 250, 'thumb_height' => 250, 'resize_mode' => iaPicture::CROP);
             if ($image = $iaPicture->processImage($_FILES['image'], iaUtil::getAccountDir(), iaUtil::generateToken(), $info)) {
                 if ($entry['image']) {
                     $iaPicture = $iaCore->factory('picture');
                     $iaPicture->delete($entry['image']);
                 }
                 $entry['image'] = $image;
             }
         }
         $result = iaCore::ACTION_ADD == $pageAction ? $iaBlog->insert($entry) : $iaBlog->update($entry, $id);
Ejemplo n.º 7
0
 private function _importPage(&$iaView)
 {
     if (isset($_POST['import'])) {
         $filename = isset($_POST['sqlfile']) ? $_POST['sqlfile'] : '';
         $extension = '';
         if ($_FILES) {
             $filename = $_FILES['sql_file']['tmp_name'];
             $extension = end(explode('.', $_FILES['sql_file']['name']));
         }
         if (!is_file($filename)) {
             $this->_error = true;
             $this->addMessage('no_file');
         } elseif ($extension && 'sql' != $extension) {
             $this->_error = true;
             $this->addMessage(iaLanguage::getf('cant_open_incorrect_format', array('filename' => $filename)), false);
         } elseif (!($f = fopen($filename, 'r'))) {
             $this->_error = true;
             $this->addMessage(iaLanguage::getf('cant_open_sql', array('filename' => $filename)), false);
         } else {
             $sql = '';
             while ($s = fgets($f, 10240)) {
                 $s = trim($s);
                 if ($s) {
                     if ($s[0] == '#' || $s[0] == '') {
                         continue;
                     }
                 } else {
                     continue;
                 }
                 if ($s[strlen($s) - 1] == ';') {
                     $sql .= $s;
                 } else {
                     $sql .= $s;
                     continue;
                 }
                 $this->_iaDb->query(str_replace('{prefix}', $this->_iaDb->prefix, $sql));
                 $sql = '';
             }
             fclose($f);
             $this->addMessage('upgrade_completed');
             $this->_iaCore->iaCache->clearAll();
         }
     }
     // generate list of available folders for dump files
     $dumpFolders = array('Updates' => IA_HOME . 'updates' . IA_DS);
     $packages = $this->_iaDb->onefield('name', "`type` = 'package' AND `status` = 'active'", null, null, 'extras');
     foreach ($packages as $package) {
         $dumpFolders[iaLanguage::get($package)] = IA_PACKAGES . $package . IA_DS . 'includes' . IA_DS . 'dumps' . IA_DS;
     }
     // generate list of available dump files
     $dumpFiles = array();
     foreach ($dumpFolders as $name => $path) {
         if (is_dir($path)) {
             $files = scandir($path);
             foreach ($files as $file) {
                 if (substr($file, 0, 1) != '.' && is_file($path . $file)) {
                     $dumpFiles[$name][] = array('filename' => $path . $file, 'title' => substr($file, 0, count($file) - 5));
                 }
             }
         }
     }
     $iaView->assign('dumpFiles', $dumpFiles);
 }
Ejemplo n.º 8
0
 protected function _preSaveEntry(array &$entry, array $data, $action)
 {
     $entry['item'] = in_array($data['item'], $this->_items) ? $data['item'] : null;
     if (!$entry['item']) {
         $this->addMessage('incorrect_item');
     }
     if ($entry['item'] == iaUsers::getItemName()) {
         if (isset($data['usergroup'])) {
             $entry['usergroup'] = (int) $data['usergroup'];
         }
     }
     if (isset($this->_fields[$entry['item']])) {
         $entry['data'] = array();
         if (!empty($data['fields']) && !$this->getMessages()) {
             $f = $this->_fields[$entry['item']];
             $array = array();
             foreach ($data['fields'] as $field) {
                 if (in_array($field, $f[0])) {
                     $entry['data']['fields'][] = $field;
                     $array[] = $field;
                 } elseif (in_array($field, $f[1])) {
                     $entry['data']['fields'][] = $field;
                 }
             }
             if ($array) {
                 $this->_iaDb->update(array('for_plan' => 1), "`name` IN ('" . implode("','", $entry['data']['fields']) . "')", null, iaField::getTable());
             }
         }
         $entry['data'] = serialize($entry['data']);
     }
     $this->_iaCore->startHook('phpAdminAddPlanValidation');
     iaUtil::loadUTF8Functions('ascii', 'validation', 'bad', 'utf8_to_ascii');
     $lang = array('title' => $data['title'], 'description' => $data['description']);
     foreach ($this->_iaCore->languages as $code => $language) {
         if (isset($lang['title'][$code])) {
             if (empty($lang['title'][$code])) {
                 $this->addMessage(iaLanguage::getf('error_lang_title', array('lang' => $language['title'])), false);
             } elseif (!utf8_is_valid($lang['title'][$code])) {
                 $lang['title'][$code] = utf8_bad_replace($lang['title'][$code]);
             }
         }
         if (isset($lang['description'][$code])) {
             if (empty($lang['description'][$code])) {
                 $this->addMessage(iaLanguage::getf('error_lang_description', array('lang' => $language['title'])), false);
             } elseif (!utf8_is_valid($lang['description'][$code])) {
                 $lang['description'][$code] = utf8_bad_replace($lang['description'][$code]);
             }
         }
     }
     $this->_languages = $lang;
     $entry['duration'] = isset($data['duration']) ? $data['duration'] : 0;
     if (!is_numeric($entry['duration'])) {
         $this->addMessage('error_plan_duration');
     }
     $entry['cost'] = (double) $data['cost'];
     $entry['cycles'] = (int) $data['cycles'];
     $entry['unit'] = $data['unit'];
     $entry['status'] = $data['status'];
     $entry['recurring'] = (int) $data['recurring'];
     $entry['expiration_status'] = $data['expiration_status'];
     $this->_iaCore->startHook('phpAdminPlanCommonFieldFilled', array('item' => &$entry));
     $entry['cost'] || ($this->_phraseAddSuccess = 'free_plan_added');
     return !$this->getMessages();
 }
Ejemplo n.º 9
0
 protected static function _processFileField(array $field, array $file, $path)
 {
     $error = false;
     $message = null;
     list($filename, $extension) = self::_generateFileName($file['name'], $field['file_prefix'], false);
     $filename = $path . $filename . '.' . $extension;
     // get available extensions
     $allowedExtensions = empty($field['file_types']) ? false : explode(',', str_replace(' ', '', $field['file_types']));
     if ($extension && $allowedExtensions && in_array($extension, $allowedExtensions)) {
         move_uploaded_file($file['tmp_name'], IA_UPLOADS . $filename);
         chmod(IA_UPLOADS . $filename, 0644);
     } else {
         $error = true;
         $message = iaLanguage::getf('file_type_error', array('extension' => $field['file_types']));
     }
     return array($filename, $error, $message);
 }
Ejemplo n.º 10
0
 protected function _setPageTitle(&$iaView, array $entryData, $action)
 {
     if (in_array($action, array(iaCore::ACTION_ADD, iaCore::ACTION_EDIT))) {
         $entryName = empty($entryData['name']) ? '' : iaLanguage::get('field_' . $entryData['name']);
         $title = iaLanguage::getf($action . '_field', array('field' => $entryName));
         $iaView->title($title);
     }
 }
Ejemplo n.º 11
0
 public function install()
 {
     $iaDb =& $this->iaDb;
     $this->iaCore->startHook('phpExtrasInstallBefore', array('extra' => $this->itemData['name']));
     $extrasList = array();
     $array = $iaDb->all(array('id', 'name', 'version'), "`status` = 'active'", null, null, self::getTable());
     foreach ($array as $item) {
         $extrasList[$item['name']] = $item;
     }
     // TODO: check for relations and deactivate all needed extras
     if ($this->itemData['requirements']) {
         $messages = array();
         foreach ($this->itemData['requirements'] as $requirement) {
             if ($requirement['min'] || $requirement['max']) {
                 $min = $max = false;
                 if (isset($extrasList[$requirement['name']])) {
                     $info = $extrasList[$requirement['name']];
                     $min = $requirement['min'] ? version_compare($requirement['min'], $info['version'], '<=') : true;
                     $max = $requirement['max'] ? version_compare($requirement['max'], $info['version'], '>=') : true;
                 }
                 if (!$max || !$min) {
                     $ver = '';
                     if ($requirement['min']) {
                         $ver .= $requirement['min'];
                     }
                     if ($requirement['max']) {
                         if ($requirement['min']) {
                             $ver .= '-';
                         }
                         $ver .= $requirement['max'];
                     }
                     $values = array(':extra' => $requirement['type'], ':name' => $requirement['name'], ':version' => $ver);
                     $messages[] = iaLanguage::getf('required_extras_error', $values);
                     $this->error = true;
                 } else {
                     // TODO: add relations in database to deactivate when parent is uninstalled
                 }
             }
         }
         if ($this->error) {
             $this->setMessage(implode('<br />', $messages));
             return false;
         }
     }
     $this->uninstall($this->itemData['name']);
     if (false !== stristr('update', $this->itemData['name'])) {
         $this->isUpdate = true;
     }
     $this->_processQueries('install', self::SQL_STAGE_START);
     if ($this->itemData['groups']) {
         $iaDb->setTable('admin_pages_groups');
         $maxOrder = $iaDb->getMaxOrder();
         foreach ($this->itemData['groups'] as $title => $entry) {
             $iaDb->insert($entry, array('order' => ++$maxOrder));
             $this->_addPhrase('pages_group_' . $entry['name'], $title, iaLanguage::CATEGORY_ADMIN);
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['pages']['admin']) {
         $this->_processAdminPages($this->itemData['pages']['admin']);
     }
     if ($this->itemData['actions']) {
         $iaDb->setTable('admin_actions');
         foreach ($this->itemData['actions'] as $action) {
             $action['name'] = strtolower(str_replace(' ', '_', $action['name']));
             if ($action['name'] && !$iaDb->exists('`name` = :name', array('name' => $action['name']))) {
                 $action['order'] = empty($action['order']) || !is_numeric($action['order']) ? $iaDb->getMaxOrder() + 1 : $action['order'];
                 $iaDb->insert($action);
             }
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['phrases']) {
         $this->_processPhrases($this->itemData['phrases']);
     }
     if ($this->itemData['config_groups']) {
         $iaDb->setTable(iaCore::getConfigGroupsTable());
         $maxOrder = $iaDb->getMaxOrder();
         foreach ($this->itemData['config_groups'] as $title => $entry) {
             $iaDb->insert($entry, array('order' => ++$maxOrder));
             $this->_addPhrase('config_group_' . $entry['name'], $title, iaLanguage::CATEGORY_ADMIN);
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['objects']) {
         $iaDb->setTable('acl_objects');
         foreach ($this->itemData['objects'] as $obj) {
             if ($obj['title']) {
                 $key = ($obj['object'] == $obj['pre_object'] ? '' : $obj['pre_object'] . '-') . $obj['object'] . '--' . $obj['action'];
                 iaLanguage::addPhrase($key, $obj['title'], null, $this->itemData['name'], iaLanguage::CATEGORY_COMMON, false);
                 unset($obj['title']);
             }
             $iaDb->insert($obj);
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['permissions']) {
         $iaDb->setTable('acl_privileges');
         foreach ($this->itemData['permissions'] as $permission) {
             $iaDb->insert($permission);
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['config']) {
         $this->_processConfig($this->itemData['config']);
     }
     if ($this->itemData['pages']['custom'] && $this->itemData['type'] == self::TYPE_PACKAGE) {
         $iaDb->setTable('items_pages');
         foreach ($this->itemData['pages']['custom'] as $page) {
             $iaDb->insert(array('page_name' => $page['name'], 'item' => $page['item']));
         }
         $iaDb->resetTable();
     }
     $iaBlock = $this->iaCore->factory('block', iaCore::ADMIN);
     $extraPages = array();
     if ($this->itemData['pages']['front']) {
         $pageGroups = $iaDb->keyvalue(array('name', 'id'), null, 'admin_pages_groups');
         $iaDb->setTable('pages');
         $maxOrder = $iaDb->getMaxOrder();
         $existPages = $iaDb->keyvalue(array('name', 'id'));
         foreach ($this->itemData['pages']['front'] as $title => $page) {
             if (!isset($existPages[$page['name']])) {
                 if (self::TYPE_PACKAGE == $this->itemData['type'] && $page['fields_item']) {
                     $iaDb->insert(array('page_name' => $page['name'], 'item' => $page['fields_item']), null, 'items_pages');
                 }
                 $blocks = empty($page['blocks']) ? false : $page['blocks'];
                 $menus = empty($page['menus']) ? array() : explode(',', $page['menus']);
                 $contents = empty($page['contents']) ? false : $page['contents'];
                 unset($page['blocks'], $page['menus'], $page['contents']);
                 $page['group'] = $pageGroups[$page['group']];
                 $pageId = $iaDb->insert($page, array('order' => ++$maxOrder, 'last_updated' => iaDb::FUNCTION_NOW));
                 empty($title) || $this->_addPhrase('page_title_' . $page['name'], $title, iaLanguage::CATEGORY_PAGE);
                 if ($blocks && ($ids = $this->iaDb->onefield(iaDb::ID_COLUMN_SELECTION, "`name` IN ('" . implode("','", $blocks) . "')", null, null, iaBlock::getTable()))) {
                     foreach ($ids as $blockId) {
                         $iaBlock->setVisibility($blockId, true, array($page['name']), false);
                     }
                 }
                 if (!is_int($page['group'])) {
                     $page['group'] = $this->_lookupGroupId($page['group']);
                 }
                 if ($menus) {
                     $iaDb->setTable(iaBlock::getTable());
                     $added = array();
                     $items = array();
                     $menusData = $iaDb->keyvalue(array('id', 'name'), "`type` = 'menu'");
                     $db = false;
                     foreach ($menusData as $id => $name) {
                         if (in_array($name, $menus)) {
                             $added[] = $name;
                             $items[] = array('parent_id' => 0, 'menu_id' => $id, 'el_id' => $pageId . '_' . iaUtil::generateToken(4), 'level' => 0, 'page_name' => $page['name']);
                             $db = true;
                             $this->iaCore->iaCache->remove('menu_' . $id . '.inc');
                         }
                     }
                     if ($db) {
                         $iaDb->insert($items, null, iaBlock::getMenusTable());
                     }
                     foreach ($menus as $val) {
                         if (!in_array($val, $added)) {
                             $menuItem = array('type' => iaBlock::TYPE_MENU, 'status' => iaCore::STATUS_ACTIVE, 'position' => 'left', 'collapsible' => true, 'title' => $this->itemData['info']['title'], 'extras' => $this->itemData['name'], 'name' => $this->itemData['name'], 'sticky' => true, 'removable' => false);
                             $menuItem['id'] = $iaBlock->insert($menuItem);
                             $entry = array('parent_id' => 0, 'menu_id' => $menuItem['id'], 'el_id' => $pageId . '_' . iaUtil::generateToken(5), 'level' => 0, 'page_name' => $page['name']);
                             $iaDb->insert($entry, null, iaBlock::getMenusTable());
                         }
                     }
                     $iaDb->resetTable();
                 }
                 empty($contents) || $this->_addPhrase('page_content_' . $page['name'], $contents, iaLanguage::CATEGORY_PAGE);
                 $extraPages[] = $page['name'];
             }
         }
         $iaDb->resetTable();
     }
     $iaBlock = $this->iaCore->factory('block', iaCore::ADMIN);
     if ($this->itemData['blocks']) {
         foreach ($this->itemData['blocks'] as $block) {
             $iaBlock->insert($block);
         }
     }
     if ($this->itemData['hooks']) {
         $iaDb->setTable('hooks');
         $maxOrder = $iaDb->getMaxOrder();
         foreach ($this->itemData['hooks'] as $hook) {
             $array = explode(',', $hook['name']);
             foreach ($array as $hookName) {
                 if (trim($hookName)) {
                     $hook['name'] = $hookName;
                     if (isset($hook['code']) && $hook['code']) {
                         $hook['code'] = str_replace('{extras}', $this->itemData['name'], $hook['code']);
                     }
                     $rawValues = array();
                     if (!isset($hook['order'])) {
                         $rawValues['order'] = ++$maxOrder;
                     }
                     $iaDb->insert($hook, $rawValues);
                 }
             }
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['usergroups']) {
         $this->iaCore->factory('acl');
         $iaDb->setTable(iaUsers::getUsergroupsTable());
         foreach ($this->itemData['usergroups'] as $item) {
             if (!$iaDb->exists('`name` = :name', array('name' => $item['name']))) {
                 $configs = $item['configs'];
                 $permissions = $item['permissions'];
                 $groupId = $iaDb->insert(array('extras' => $item['extras'], 'name' => $item['name'], 'system' => true, 'assignable' => $item['assignable'], 'visible' => $item['visible']));
                 // update language records
                 $this->_addPhrase('usergroup_' . $item['name'], $item['title']);
                 $iaDb->setTable(iaCore::getCustomConfigTable());
                 $iaDb->delete('`type` = :type AND `type_id` = :id', null, array('type' => iaAcl::GROUP, 'id' => $groupId));
                 foreach ($configs as $config) {
                     $data = array('name' => $config['name'], 'value' => $config['value'], 'type' => iaAcl::GROUP, 'type_id' => $groupId, 'extras' => $this->itemData['name']);
                     $iaDb->insert($data);
                 }
                 $iaDb->resetTable();
                 $iaDb->setTable('acl_privileges');
                 $iaDb->delete('`type` = :type AND `type_id` = :id', null, array('type' => iaAcl::GROUP, 'id' => $groupId));
                 foreach ($permissions as $permission) {
                     $data = array('object' => $permission['object'], 'object_id' => $permission['object_id'], 'action' => $permission['action'], 'access' => $permission['access'], 'type' => iaAcl::GROUP, 'type_id' => $groupId, 'extras' => $permission['extras']);
                     $iaDb->insert($data);
                 }
                 $iaDb->resetTable();
             }
         }
         $iaDb->resetTable();
     }
     $extraEntry = array_merge($this->itemData['info'], array('name' => $this->itemData['name'], 'type' => $this->itemData['type']));
     unset($extraEntry['date']);
     if ($this->itemData['sql']['uninstall']) {
         $extraEntry['uninstall_sql'] = serialize($this->itemData['sql']['uninstall']);
     }
     if ($this->itemData['code']['uninstall']) {
         $extraEntry['uninstall_code'] = $this->itemData['code']['uninstall'];
     }
     $this->_processQueries('install', self::SQL_STAGE_MIDDLE);
     if (self::TYPE_PACKAGE == $this->itemData['type']) {
         $extraEntry['url'] = $this->_url;
     }
     if ($this->itemData['items']) {
         $extraEntry['items'] = serialize($this->itemData['items']);
         $iaDb->setTable('items');
         foreach ($this->itemData['items'] as $item) {
             $iaDb->insert(array_merge($item, array('package' => $this->itemData['name'])));
         }
         $iaDb->resetTable();
     }
     $this->iaCore->factory('field');
     if ($this->itemData['item_field_groups']) {
         $iaDb->setTable(iaField::getTableGroups());
         $maxOrder = $iaDb->getMaxOrder();
         foreach ($this->itemData['item_field_groups'] as $entry) {
             $entry['order'] || ($entry['order'] = ++$maxOrder);
             $title = $entry['title'];
             $description = $entry['description'];
             unset($entry['title'], $entry['description']);
             if ($iaDb->insert($entry)) {
                 $this->_addPhrase('fieldgroup_' . $entry['name'], $title);
                 $this->_addPhrase('fieldgroup_description_' . $entry['item'] . '_' . $entry['name'], $description);
             }
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['item_fields']) {
         $this->_processFields($this->itemData['item_fields']);
     }
     if ($this->itemData['cron_jobs']) {
         $this->iaCore->factory('cron');
         foreach ($this->itemData['cron_jobs'] as $job) {
             $job['extras'] = $this->itemData['name'];
             $iaDb->insert($job, null, iaCron::getTable());
         }
     }
     $rollbackData = array();
     if ($this->itemData['changeset']) {
         $tablesMapping = array('block' => 'blocks', 'field' => 'fields', 'menu' => 'blocks');
         foreach ($this->itemData['changeset'] as $entry) {
             if (!isset($tablesMapping[$entry['type']])) {
                 continue;
             }
             switch ($entry['type']) {
                 case 'field':
                     list($fieldName, $itemName) = explode('-', $entry['name']);
                     if (empty($fieldName) || empty($itemName)) {
                         continue;
                     }
                     $stmt = iaDb::printf("`name` = ':name' AND `item` = ':item'", array('name' => $fieldName, 'item' => $itemName));
                     break;
                 default:
                     $stmt = iaDb::printf("`name` = ':name'", $entry);
             }
             $tableName = $tablesMapping[$entry['type']];
             $name = $entry['name'];
             $pages = isset($entry['pages']) ? explode(',', $entry['pages']) : array();
             unset($entry['type'], $entry['name'], $entry['pages']);
             $entryData = $iaDb->row('`id`, `' . implode('`,`', array_keys($entry)) . '`', $stmt, $tableName);
             if ($iaDb->update($entry, $stmt, null, $tableName)) {
                 if ('field' != $entry['type'] && isset($entry['sticky'])) {
                     $iaBlock->setVisibility($entryData['id'], $entry['sticky'], $pages);
                 }
                 unset($entryData['id']);
                 $rollbackData[$tableName][$name] = $entryData;
             }
         }
     }
     $extraEntry['rollback_data'] = empty($rollbackData) ? '' : serialize($rollbackData);
     if (self::TYPE_PLUGIN == $this->itemData['type']) {
         $extraEntry['removable'] = !in_array($this->itemData['name'], $this->_builtinPlugins);
     }
     if (!$this->isUpdate) {
         $this->iaCore->startHook('phpExtrasInstallBeforeSql', array('extra' => $this->itemData['name'], 'data' => &$this->itemData['info']));
         $iaDb->insert($extraEntry, array('date' => iaDb::FUNCTION_NOW), self::getTable());
     }
     $this->_processCategory($extraEntry);
     $this->_processQueries('install', self::SQL_STAGE_END);
     if ($this->itemData['code']['install']) {
         $this->_runPhpCode($this->itemData['code']['install']);
     }
     $this->iaCore->startHook('phpExtrasInstallAfter', array('extra' => $this->itemData['name']));
     $this->iaCore->factory('cache')->clearAll();
     return true;
 }
Ejemplo n.º 12
0
 public function gridDelete($params, $languagePhraseKey = 'deleted')
 {
     $result = array('result' => false, 'message' => iaLanguage::get('invalid_parameters'));
     if (isset($params['id']) && is_array($params['id']) && $params['id']) {
         $total = count($params['id']);
         $affected = $this->_iaDb->delete('`id` IN (' . implode(',', $params['id']) . ')');
         if (1 == $total) {
             $result['result'] = 1 == $affected;
             $result['message'] = $result['result'] ? iaLanguage::get($languagePhraseKey) : iaLanguage::get('db_error');
         } else {
             $result['result'] = $affected == $total;
             $result['message'] = $result['result'] ? iaLanguage::getf('items_deleted', array('num' => $affected)) : iaLanguage::getf('items_deleted_of', array('num' => $affected, 'total' => $total));
         }
     }
     return $result;
 }
Ejemplo n.º 13
0
 protected function _preSaveEntry(array &$entry, array $data, $action)
 {
     $this->_iaCore->startHook('adminAddBlockValidation');
     iaUtil::loadUTF8Functions('ascii', 'validation', 'bad', 'utf8_to_ascii');
     // validate block name
     if (iaCore::ACTION_ADD == $action) {
         if (empty($data['name'])) {
             $entry['name'] = 'block_' . mt_rand(1000, 9999);
         } else {
             $entry['name'] = strtolower(iaSanitize::paranoid($data['name']));
             if (!iaValidate::isAlphaNumericValid($entry['name'])) {
                 $this->addMessage('error_block_name');
             } elseif ($this->_iaDb->exists('`name` = :name', array('name' => $entry['name']))) {
                 $this->addMessage('error_block_name_duplicate');
             }
         }
     }
     $entry['classname'] = $data['classname'];
     $entry['position'] = $data['position'];
     $entry['type'] = $data['type'];
     $entry['status'] = isset($data['status']) ? in_array($data['status'], array(iaCore::STATUS_ACTIVE, iaCore::STATUS_INACTIVE)) ? $data['status'] : iaCore::STATUS_ACTIVE : iaCore::STATUS_ACTIVE;
     $entry['header'] = (int) $data['header'];
     $entry['collapsible'] = (int) $data['collapsible'];
     $entry['collapsed'] = (int) $data['collapsed'];
     $entry['multilingual'] = (int) $data['multilingual'];
     $entry['sticky'] = (int) $data['sticky'];
     $entry['external'] = (int) $data['external'];
     $entry['filename'] = $data['filename'];
     $entry['pages'] = isset($data['pages']) ? $data['pages'] : array();
     $entry['title'] = $data['title'];
     $entry['contents'] = $data['content'];
     if ($entry['multilingual']) {
         if (empty($entry['title'])) {
             $this->addMessage('title_is_empty');
         } elseif (!utf8_is_valid($entry['title'])) {
             $entry['title'] = utf8_bad_replace($entry['title']);
         }
         if (empty($entry['contents']) && !$entry['external']) {
             $this->addMessage('error_contents');
         } elseif (empty($entry['filename']) && $entry['external']) {
             $this->addMessage('error_filename');
         }
         if (iaBlock::TYPE_HTML != $entry['type']) {
             if (!utf8_is_valid($entry['contents'])) {
                 $entry['contents'] = utf8_bad_replace($entry['contents']);
             }
         }
     } else {
         $this->_multilingualContent = $data['content'];
         if (isset($data['languages']) && $data['languages']) {
             $entry['languages'] = $data['languages'];
             $entry['titles'] = $data['titles'];
             $entry['contents'] = $data['contents'];
             foreach ($entry['languages'] as $langCode) {
                 if (isset($entry['titles'][$langCode])) {
                     if (empty($entry['titles'][$langCode])) {
                         $this->addMessage(iaLanguage::getf('error_lang_title', array('lang' => $this->_iaCore->languages[$langCode]['title'])), false);
                     } elseif (!utf8_is_valid($entry['titles'][$langCode])) {
                         $entry['titles'][$langCode] = utf8_bad_replace($entry['titles'][$langCode]);
                     }
                 }
                 if (isset($entry['contents'][$langCode])) {
                     if (empty($entry['contents'][$langCode])) {
                         $this->addMessage(iaLanguage::getf('error_lang_contents', array('lang' => $this->_iaCore->languages[$langCode]['title'])), false);
                     }
                     if (iaBlock::TYPE_HTML != $entry['type']) {
                         if (!utf8_is_valid($entry['contents'][$langCode])) {
                             $entry['contents'][$langCode] = utf8_bad_replace($entry['contents'][$langCode]);
                         }
                     }
                 }
             }
         } else {
             $this->addMessage('block_languages_empty');
         }
     }
     $this->_iaCore->startHook('phpAdminBlocksEdit', array('block' => &$entry));
     return !$this->getMessages();
 }
Ejemplo n.º 14
0
 protected function _preSaveEntry(array &$entry, array $data, $action)
 {
     $this->_iaCore->startHook('phpAdminAddPageValidation', array('entry' => &$entry));
     iaUtil::loadUTF8Functions('ascii', 'bad', 'utf8_to_ascii', 'validation');
     $entry['name'] = preg_replace('#[^a-z0-9-_]#iu', '', strtolower($data['name'] = !utf8_is_ascii($data['name']) ? utf8_to_ascii($data['name']) : $data['name']));
     $entry['meta_description'] = utf8_is_valid($data['meta_description']) ? $data['meta_description'] : utf8_bad_replace($data['meta_description']);
     $entry['meta_keywords'] = utf8_is_valid($data['meta_keywords']) ? $data['meta_keywords'] : utf8_bad_replace($data['meta_keywords']);
     $entry['status'] = isset($data['preview']) ? iaCore::STATUS_DRAFT : $data['status'];
     if (iaCore::ACTION_ADD == $action) {
         $entry['group'] = 2;
         $entry['filename'] = 'page';
     }
     foreach ($data['titles'] as $key => $title) {
         if (empty($title)) {
             $this->addMessage(iaLanguage::getf('field_is_empty', array('field' => iaLanguage::get('title') . ' (' . $key . ')')), false);
             break;
         }
     }
     if (!isset($data['service']) || !$data['service']) {
         $entry['alias'] = empty($data['alias']) ? $data['name'] : $data['alias'];
         $entry['custom_url'] = empty($data['custom_url']) ? '' : $data['custom_url'];
         $entry['passw'] = empty($data['passw']) ? '' : $data['passw'];
         $entry['alias'] = utf8_is_ascii($entry['alias']) ? $entry['alias'] : utf8_to_ascii($entry['alias']);
         $entry['alias'] = empty($entry['alias']) ? '' : iaSanitize::alias($entry['alias']);
         $entry['alias'] .= $data['extension'];
         if ($data['parent_id']) {
             $parentPage = $this->getById($data['parent_id']);
             $parentAlias = empty($parentPage['alias']) ? $parentPage['name'] . IA_URL_DELIMITER : $parentPage['alias'];
             $entry['parent'] = $parentPage['name'];
             $entry['alias'] = $parentAlias . (IA_URL_DELIMITER == substr($parentAlias, -1, 1) ? '' : IA_URL_DELIMITER) . $entry['alias'];
         } else {
             $entry['parent'] = '';
         }
         if ($this->_iaDb->exists('`id` != :id AND `alias` = :alias', array('id' => $this->getEntryId(), 'alias' => $entry['alias']))) {
             $this->addMessage('page_alias_exists');
         }
         if (isset($data['nofollow'])) {
             $entry['nofollow'] = (int) $data['nofollow'];
         }
         if (isset($data['new_window'])) {
             $entry['new_window'] = (int) $data['new_window'];
         }
         // delete custom url
         if (isset($data['unique']) && 0 == $data['unique']) {
             $entry['custom_url'] = '';
         }
         if (isset($data['custom_tpl']) && $data['custom_tpl']) {
             $entry['custom_tpl'] = (int) $data['custom_tpl'];
             $entry['template_filename'] = $data['template_filename'];
             if (!$data['template_filename']) {
                 $this->addMessage('page_incorrect_template_filename');
             }
         } else {
             $entry['custom_tpl'] = 0;
             $entry['template_filename'] = '';
         }
     }
     if (empty($entry['name'])) {
         $this->addMessage(iaLanguage::getf('field_is_empty', array('field' => iaLanguage::get('name'))), false);
     } elseif (iaCore::ACTION_ADD == $action && $this->_iaDb->exists('`name` = :name', array('name' => $entry['name']))) {
         $this->addMessage('page_name_exists');
     }
     return !$this->getMessages();
 }
Ejemplo n.º 15
0
         $iaView->assign('items', $iaInvoice->getItemsByInvoiceId($invoice['id']));
         $iaView->disableLayout();
         echo $iaView->display('invoice');
         return;
     } else {
         return iaView::errorPage(iaView::ERROR_NOT_FOUND);
     }
 }
 iaUsers::reloadIdentity();
 if (isset($_POST['amount'])) {
     $amount = (double) $_POST['amount'];
     if ($amount > 0) {
         if ($amount >= (double) $iaCore->get('funds_min_deposit') && $amount <= (double) $iaCore->get('funds_max_deposit')) {
             $iaTransaction->createInvoice(iaLanguage::get('funds'), $amount, iaTransaction::TRANSACTION_MEMBER_BALANCE, iaUsers::getIdentity(true), $profilePageUrl);
         } else {
             iaLanguage::set('amount_incorrect', iaLanguage::getf('amount_incorrect', array('min' => $iaCore->get('funds_min_deposit'), 'max' => $iaCore->get('funds_max_deposit'), 'currency' => $iaCore->get('currency'))));
             $iaView->setMessages(iaLanguage::get('amount_incorrect'));
         }
     } else {
         $iaView->setMessages(iaLanguage::get('amount_incorrect'));
     }
 }
 $pagination = array('page' => 1, 'limit' => 10, 'total' => 0, 'template' => $profilePageUrl . 'funds/?page={page}');
 $pagination['page'] = isset($_GET['page']) && 1 < $_GET['page'] ? (int) $_GET['page'] : $pagination['page'];
 $pagination['page'] = ($pagination['page'] - 1) * $pagination['limit'];
 $transactions = $iaDb->all('SQL_CALC_FOUND_ROWS *', '`member_id` = ' . iaUsers::getIdentity()->id . ' ORDER BY `status`', $pagination['page'], $pagination['limit'], iaTransaction::getTable());
 $pagination['total'] = $iaDb->foundRows();
 $iaView->caption($iaView->title() . ': ' . number_format(iaUsers::getIdentity()->funds, 2, '.', '') . ' ' . $iaCore->get('currency'));
 $iaView->assign('pagination', $pagination);
 $iaView->assign('transactions', $transactions);
 $iaView->display('transactions');
Ejemplo n.º 16
0
 protected function _preSaveEntry(array &$entry, array $data, $action)
 {
     parent::_preSaveEntry($entry, $data, $action);
     iaUtil::loadUTF8Functions('ascii', 'validation', 'bad', 'utf8_to_ascii');
     if (!utf8_is_valid($entry['title'])) {
         $entry['title'] = utf8_bad_replace($entry['title']);
     }
     if (empty($entry['title'])) {
         $this->addMessage('title_is_empty');
     }
     if (!utf8_is_valid($entry['body'])) {
         $entry['body'] = utf8_bad_replace($entry['body']);
     }
     if (empty($entry['body'])) {
         $this->addMessage(iaLanguage::getf('field_is_empty', array('field' => iaLanguage::get('body'))));
     }
     if (empty($entry['date_added'])) {
         $entry['date_added'] = date(iaDb::DATETIME_FORMAT);
     }
     $entry['alias'] = $this->getHelper()->titleAlias(empty($entry['alias']) ? $entry['title'] : $entry['alias']);
     if (!empty($data['owner'])) {
         if ($memberId = $this->_iaCore->iaDb->one_bind('id', '`username` = :name OR `fullname` = :name', array('name' => iaSanitize::sql($_POST['owner'])), iaUsers::getTable())) {
             $entry['member_id'] = $memberId;
         } else {
             $this->addMessage('incorrect_owner_specified');
         }
     } else {
         $entry['member_id'] = iaUsers::getIdentity()->id;
     }
     if ($this->getMessages()) {
         return false;
     }
     unset($entry['owner']);
     if (isset($_FILES['image']['tmp_name']) && $_FILES['image']['tmp_name']) {
         $iaPicture = $this->_iaCore->factory('picture');
         $info = array('image_width' => 1000, 'image_height' => 750, 'thumb_width' => 250, 'thumb_height' => 250, 'resize_mode' => iaPicture::CROP);
         if ($image = $iaPicture->processImage($_FILES['image'], iaUtil::getAccountDir(), iaUtil::generateToken(), $info)) {
             empty($entry['image']) || $iaPicture->delete($entry['image']);
             // already has an assigned image
             $entry['image'] = $image;
         }
     }
     unset($entry['tags']);
     return true;
 }
Ejemplo n.º 17
0
 private function _checkForUpdates()
 {
     $url = sprintf(iaUtil::REMOTE_TOOLS_URL . 'get/updates/%s/', IA_VERSION);
     $content = iaUtil::getPageContent($url);
     if (!$content) {
         return;
     }
     $content = iaUtil::jsonDecode($content);
     if (is_array($content) && $content) {
         $messages = array();
         foreach ($content as $entry) {
             switch ($entry['type']) {
                 case self::UPDATE_TYPE_INFO:
                     $messages[] = array($entry['id'], $entry['message']);
                     break;
                 case self::UPDATE_TYPE_PATCH:
                     $version = explode('.', $entry['version']);
                     if (count($version) > 3) {
                         if ($this->_iaCore->get('auto_apply_critical_upgrades')) {
                             $result = iaSystem::forceUpgrade($entry['version']);
                             if (is_bool($result) && $result) {
                                 $this->_iaCore->factory('cache')->clearGlobalCache();
                                 $message = iaLanguage::getf('script_upgraded', array('version' => $entry['version']));
                                 $this->_iaCore->iaView->setMessages($message, iaView::SUCCESS);
                                 iaUtil::go_to(IA_SELF);
                             } else {
                                 iaDebug::debug($result, 'Forced upgrade to the version ' . $entry['version']);
                             }
                         }
                     } else {
                         $url = sprintf('%sinstall/upgrade/check/%s/', IA_CLEAR_URL, $entry['version']);
                         $this->_iaCore->iaView->setMessages(iaLanguage::getf('upgrade_available', array('url' => $url, 'version' => $entry['version'])), iaView::SYSTEM);
                     }
             }
         }
         $this->_iaCore->iaView->assign('updatesInfo', $messages);
     }
 }
Ejemplo n.º 18
0
 protected static function _humanFriendlyDate($date)
 {
     $minutes = ceil((time() - strtotime($date)) / 60);
     // get the time difference in minutes
     switch (true) {
         case 1 == $minutes:
             return iaLanguage::get('just_now');
         case 60 > $minutes:
             return iaLanguage::getf('minutes_ago', array('minutes' => $minutes));
         case 59 < $minutes && $minutes < 121:
             return iaLanguage::get('one_hour_ago');
         case 60 * 24 > $minutes:
             return iaLanguage::getf('hours_ago', array('hours' => floor($minutes / 60)));
         case $minutes > 1439 && $minutes < 2881:
             return iaLanguage::get('one_day_ago');
         default:
             return iaLanguage::getf('days_ago', array('days' => floor($minutes / (60 * 24))));
     }
 }
Ejemplo n.º 19
0
 public function install()
 {
     $iaDb =& $this->iaDb;
     $this->iaCore->startHook('phpExtrasInstallBefore', array('extra' => $this->itemData['name']));
     $extrasList = array();
     $array = $iaDb->all(array('id', 'name', 'version'), "`status` = 'active'", null, null, self::getTable());
     foreach ($array as $item) {
         $extrasList[$item['name']] = $item;
     }
     // TODO: check for relations and deactivate all needed extras
     if ($this->itemData['requirements']) {
         $messages = array();
         foreach ($this->itemData['requirements'] as $requirement) {
             if ($requirement['min'] || $requirement['max']) {
                 $min = $max = false;
                 if (isset($extrasList[$requirement['name']])) {
                     $info = $extrasList[$requirement['name']];
                     $min = $requirement['min'] ? version_compare($requirement['min'], $info['version'], '<=') : true;
                     $max = $requirement['max'] ? version_compare($requirement['max'], $info['version'], '>=') : true;
                 }
                 if (!$max || !$min) {
                     $ver = '';
                     if ($requirement['min']) {
                         $ver .= $requirement['min'];
                     }
                     if ($requirement['max']) {
                         if ($requirement['min']) {
                             $ver .= '-';
                         }
                         $ver .= $requirement['max'];
                     }
                     $values = array(':extra' => $requirement['type'], ':name' => $requirement['name'], ':version' => $ver);
                     $messages[] = iaLanguage::getf('required_extras_error', $values);
                     $this->error = true;
                 } else {
                     // TODO: add relations in database to deactivate when parent is uninstalled
                 }
             }
         }
         if ($this->error) {
             $this->setMessage(implode('<br />', $messages));
             return false;
         }
     }
     $this->uninstall($this->itemData['name']);
     if (false !== stristr('update', $this->itemData['name'])) {
         $this->isUpdate = true;
     }
     if ($this->itemData['groups']) {
         $iaDb->setTable('admin_pages_groups');
         $maxOrder = $iaDb->getMaxOrder();
         foreach ($this->itemData['groups'] as $block) {
             $iaDb->insert($block, array('order' => ++$maxOrder));
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['pages']['admin']) {
         $iaDb->setTable('admin_pages');
         $order = (int) $iaDb->one('MAX(`order`)', "`menus` IN ('menu')");
         $order = max($order, 1);
         foreach ($this->itemData['pages']['admin'] as $page) {
             if (is_null($page['order'])) {
                 $order += 5;
                 $page['order'] = $order;
             }
             if ($page['group']) {
                 $this->_menuGroups[] = $page['group'];
             }
             $page['group'] = $this->_lookupGroupId($page['group']);
             $iaDb->insert($page);
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['actions']) {
         $iaDb->setTable('admin_actions');
         foreach ($this->itemData['actions'] as $action) {
             $action['name'] = strtolower(str_replace(' ', '_', $action['name']));
             if ($action['name'] && !$iaDb->exists('`name` = :name', array('name' => $action['name']))) {
                 $action['order'] = empty($action['order']) || !is_numeric($action['order']) ? $iaDb->getMaxOrder() + 1 : $action['order'];
                 $iaDb->insert($action);
             }
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['phrases']) {
         $this->_processPhrases($this->itemData['phrases']);
     }
     if ($this->itemData['config_groups']) {
         $iaDb->setTable(iaCore::getConfigGroupsTable());
         $maxOrder = $iaDb->getMaxOrder();
         foreach ($this->itemData['config_groups'] as $config) {
             $iaDb->insert($config, array('order' => ++$maxOrder));
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['objects']) {
         $iaDb->setTable('acl_objects');
         foreach ($this->itemData['objects'] as $obj) {
             if ($obj['title']) {
                 $key = ($obj['object'] == $obj['pre_object'] ? '' : $obj['pre_object'] . '-') . $obj['object'] . '--' . $obj['action'];
                 iaLanguage::addPhrase($key, $obj['title'], null, $this->itemData['name'], iaLanguage::CATEGORY_COMMON, false);
                 unset($obj['title']);
             }
             $iaDb->insert($obj);
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['permissions']) {
         $iaDb->setTable('acl_privileges');
         foreach ($this->itemData['permissions'] as $permission) {
             $iaDb->insert($permission);
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['config']) {
         $iaDb->setTable('config');
         $maxOrder = $iaDb->getMaxOrder();
         foreach ($this->itemData['config'] as $config) {
             $iaDb->insert($config, array('order' => ++$maxOrder));
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['pages']['custom'] && $this->itemData['type'] == self::TYPE_PACKAGE) {
         $iaDb->setTable('items_pages');
         foreach ($this->itemData['pages']['custom'] as $page) {
             $iaDb->insert(array('page_name' => $page['name'], 'item' => $page['item']));
         }
         $iaDb->resetTable();
     }
     $iaBlock = $this->iaCore->factory('block', iaCore::ADMIN);
     $extraPages = array();
     if ($this->itemData['pages']['front']) {
         $pageGroups = $iaDb->keyvalue(array('name', 'id'), null, 'admin_pages_groups');
         $iaDb->setTable('pages');
         $maxOrder = $iaDb->getMaxOrder();
         $existPages = $iaDb->keyvalue(array('name', 'id'));
         foreach ($this->itemData['pages']['front'] as $page) {
             if (!isset($existPages[$page['name']])) {
                 if (self::TYPE_PACKAGE == $this->itemData['type'] && $page['fields_item']) {
                     $iaDb->insert(array('page_name' => $page['name'], 'item' => $page['fields_item']), null, 'items_pages');
                 }
                 $title = isset($page['title']) && $page['title'] ? $page['title'] : false;
                 $blocks = isset($page['blocks']) && $page['blocks'] ? $page['blocks'] : false;
                 $menus = isset($page['menus']) && $page['menus'] ? explode(',', $page['menus']) : array();
                 $contents = isset($page['contents']) && $page['contents'] ? $page['contents'] : false;
                 unset($page['title'], $page['blocks'], $page['menus'], $page['contents']);
                 $page['group'] = $pageGroups[$page['group']];
                 $pageId = $iaDb->insert($page, array('order' => ++$maxOrder, 'last_updated' => iaDb::FUNCTION_NOW));
                 empty($title) || $this->_addPhrase('page_title_' . $page['name'], $title, iaLanguage::CATEGORY_PAGE);
                 // TODO: should be handled by iaBlock
                 if ($blocks) {
                     $blocks = $iaDb->keyvalue(array('name', 'id'), "`name` IN ('" . implode("','", $blocks) . "')", iaBlock::getTable(), 0, 1);
                     foreach ($blocks as $blockId) {
                         $iaDb->insert(array('object_type' => 'blocks', 'object' => $blockId, 'page_name' => $page['name']), null, 'objects_pages');
                     }
                 }
                 if (!is_int($page['group'])) {
                     $page['group'] = $this->_lookupGroupId($page['group']);
                 }
                 if ($menus) {
                     $iaDb->setTable(iaBlock::getTable());
                     $added = array();
                     $items = array();
                     $menusData = $iaDb->keyvalue(array('id', 'name'), "`type` = 'menu'");
                     $db = false;
                     foreach ($menusData as $id => $name) {
                         if (in_array($name, $menus)) {
                             $added[] = $name;
                             $items[] = array('parent_id' => 0, 'menu_id' => $id, 'el_id' => $pageId . '_' . iaUtil::generateToken(4), 'level' => 0, 'page_name' => $page['name']);
                             $db = true;
                             $this->iaCore->iaCache->remove('menu_' . $id . '.inc');
                         }
                     }
                     if ($db) {
                         $iaDb->insert($items, null, iaBlock::getMenusTable());
                     }
                     foreach ($menus as $val) {
                         if (!in_array($val, $added)) {
                             $menuItem = array('type' => iaBlock::TYPE_MENU, 'status' => iaCore::STATUS_ACTIVE, 'position' => 'left', 'collapsible' => true, 'title' => $this->itemData['info']['title'], 'extras' => $this->itemData['name'], 'name' => $this->itemData['name'], 'sticky' => true, 'removable' => false);
                             $menuItem['id'] = $iaBlock->insert($menuItem);
                             $contents = array('parent_id' => 0, 'menu_id' => $menuItem['id'], 'el_id' => $pageId . '_' . iaUtil::generateToken(5), 'level' => 0, 'page_name' => $page['name']);
                             $iaDb->insert($contents, null, iaBlock::getMenusTable());
                         }
                     }
                     $iaDb->resetTable();
                 }
                 empty($contents) || $this->_addPhrase('page_content_' . $page['name'], $contents, iaLanguage::CATEGORY_PAGE);
                 $extraPages[] = $page['name'];
             }
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['blocks']) {
         $iaBlock = $this->iaCore->factory('block', iaCore::ADMIN);
         foreach ($this->itemData['blocks'] as $block) {
             $iaBlock->insert($block);
         }
     }
     if ($this->itemData['hooks']) {
         $iaDb->setTable('hooks');
         $maxOrder = $iaDb->getMaxOrder();
         foreach ($this->itemData['hooks'] as $hook) {
             $array = explode(',', $hook['name']);
             foreach ($array as $hookName) {
                 if (trim($hookName)) {
                     $hook['name'] = $hookName;
                     if (isset($hook['code']) && $hook['code']) {
                         $hook['code'] = str_replace('{extras}', $this->itemData['name'], $hook['code']);
                     }
                     $rawValues = array();
                     if (!isset($hook['order'])) {
                         $rawValues['order'] = ++$maxOrder;
                     }
                     $iaDb->insert($hook, $rawValues);
                 }
             }
         }
         $iaDb->resetTable();
     }
     if ($this->itemData['usergroups']) {
         $this->iaCore->factory('acl');
         $iaDb->setTable(iaUsers::getUsergroupsTable());
         foreach ($this->itemData['usergroups'] as $item) {
             if (!$iaDb->exists('`name` = :name', array('name' => $item['name']))) {
                 $configs = $item['configs'];
                 $permissions = $item['permissions'];
                 $groupId = $iaDb->insert(array('extras' => $item['extras'], 'name' => $item['name'], 'system' => true, 'assignable' => $item['assignable'], 'visible' => $item['visible']));
                 // update language records
                 $this->_addPhrase('usergroup_' . $item['name'], $item['title']);
                 $iaDb->setTable(iaCore::getCustomConfigTable());
                 $iaDb->delete('`type` = :type AND `type_id` = :id', null, array('type' => iaAcl::GROUP, 'id' => $groupId));
                 foreach ($configs as $config) {
                     $data = array('name' => $config['name'], 'value' => $config['value'], 'type' => iaAcl::GROUP, 'type_id' => $groupId, 'extras' => $this->itemData['name']);
                     $iaDb->insert($data);
                 }
                 $iaDb->resetTable();
                 $iaDb->setTable('acl_privileges');
                 $iaDb->delete('`type` = :type AND `type_id` = :id', null, array('type' => iaAcl::GROUP, 'id' => $groupId));
                 foreach ($permissions as $permission) {
                     $data = array('object' => $permission['object'], 'object_id' => $permission['object_id'], 'action' => $permission['action'], 'access' => $permission['access'], 'type' => iaAcl::GROUP, 'type_id' => $groupId, 'extras' => $permission['extras']);
                     $iaDb->insert($data);
                 }
                 $iaDb->resetTable();
             }
         }
         $iaDb->resetTable();
     }
     $extraEntry = array_merge($this->itemData['info'], array('name' => $this->itemData['name'], 'type' => $this->itemData['type']));
     unset($extraEntry['date']);
     if ($this->itemData['sql']['uninstall']) {
         $extraEntry['uninstall_sql'] = serialize($this->itemData['sql']['uninstall']);
     }
     if ($this->itemData['code']['uninstall']) {
         $extraEntry['uninstall_code'] = $this->itemData['code']['uninstall'];
     }
     if ($this->itemData['sql']['install']) {
         $this->_processQueries($this->itemData['sql']['install']);
     }
     if (self::TYPE_PACKAGE == $this->itemData['type']) {
         $extraEntry['url'] = $this->_url;
     }
     if ($this->itemData['items']) {
         $extraEntry['items'] = serialize($this->itemData['items']);
         $iaDb->setTable('items');
         foreach ($this->itemData['items'] as $item) {
             $iaDb->insert(array_merge($item, array('package' => $this->itemData['name'])));
         }
         $iaDb->resetTable();
     }
     $this->iaCore->factory('field');
     $fieldGroups = $iaDb->keyvalue('CONCAT(`item`, `name`) `key`, `id`', null, iaField::getTableGroups());
     if ($this->itemData['item_field_groups']) {
         $maxOrder = $iaDb->getMaxOrder(iaField::getTableGroups());
         foreach ($this->itemData['item_field_groups'] as $item) {
             $item['order'] || ($item['order'] = ++$maxOrder);
             if ($item['title'] && !$iaDb->exists("`key` = 'fieldgroup_{$item['name']}' AND `code`='" . $this->iaView->language . "'", null, iaLanguage::getTable())) {
                 $this->_addPhrase('fieldgroup_' . $item['name'], $item['title']);
             }
             unset($item['title']);
             $description = 'fieldgroup_description_' . $item['item'] . '_' . $item['name'];
             if (!$iaDb->exists('`key` = :key AND `code` = :language', array('key' => $description, 'language' => $this->iaView->language), iaLanguage::getTable())) {
                 // insert fieldgroup description
                 iaLanguage::addPhrase($description, $item['description'], null, $this->itemData['name'], iaLanguage::CATEGORY_COMMON, false);
             }
             unset($item['description']);
             $fieldGroups[$item['item'] . $item['name']] = $iaDb->insert($item, null, iaField::getTableGroups());
         }
     }
     if ($this->itemData['item_fields']) {
         $iaDb->setTable(iaField::getTable());
         $maxOrder = $iaDb->getMaxOrder(iaField::getTable());
         foreach ($this->itemData['item_fields'] as $item) {
             if (!$iaDb->exists('`item` = :item AND `name` = :name', array('item' => $item['item'], 'name' => $item['name']))) {
                 $item['order'] || ($item['order'] = ++$maxOrder);
                 $item['fieldgroup_id'] = isset($fieldGroups[$item['item'] . $item['group']]) ? $fieldGroups[$item['item'] . $item['group']] : 0;
                 $this->_addPhrase('field_' . $item['name'], $item['title']);
                 unset($item['group'], $item['title']);
                 if (is_array($item['numberRangeForSearch'])) {
                     foreach ($item['numberRangeForSearch'] as $num) {
                         $this->_addPhrase('field_' . $item['name'] . '_range_' . $num, $num, iaLanguage::CATEGORY_FRONTEND);
                     }
                 }
                 unset($item['numberRangeForSearch']);
                 if ('dependent' == $item['relation']) {
                     $iaDb->setTable(iaField::getTableRelations());
                     foreach (explode(';', $item['parent']) as $parent) {
                         $list = explode(':', $parent);
                         if (2 == count($list)) {
                             list($fieldName, $fieldValues) = $list;
                             foreach (explode(',', $fieldValues) as $fieldValue) {
                                 $entryData = array('field' => $fieldName, 'element' => $fieldValue, 'child' => $item['name'], 'item' => $item['item'], 'extras' => $this->itemData['name']);
                                 $iaDb->insert($entryData);
                             }
                         }
                     }
                     $iaDb->resetTable();
                 }
                 unset($item['parent']);
                 if (is_array($item['values'])) {
                     foreach ($item['values'] as $key => $value) {
                         $key = sprintf('field_%s_%s', $item['name'], $key);
                         $this->_addPhrase($key, $value);
                     }
                     if ($item['default']) {
                         // TODO: multiple default values for checkboxes should be implemented
                         if (!in_array($item['default'], array_keys($item['values']))) {
                             $item['default'] = array_search($item['default'], $item['values']);
                         }
                     }
                     $item['values'] = implode(',', array_keys($item['values']));
                 }
                 $fieldPages = $item['item_pages'] ? $item['item_pages'] : array();
                 $tableName = $item['table_name'];
                 $className = $item['class_name'];
                 unset($item['item_pages'], $item['table_name'], $item['class_name']);
                 $fieldId = $iaDb->insert($item);
                 $item['table_name'] = $tableName;
                 $item['class_name'] = $className;
                 if ($fieldPages) {
                     foreach ($fieldPages as $pageName) {
                         if (trim($pageName) != '') {
                             $iaDb->insert(array('page_name' => $pageName, 'field_id' => $fieldId, 'extras' => $this->itemData['name']), null, iaField::getTablePages());
                         }
                     }
                 }
                 $iaDb->setTable($tableName);
                 $tableFields = $iaDb->describe();
                 $isExist = false;
                 foreach ($tableFields as $f) {
                     if ($f['Field'] == $item['name']) {
                         $isExist = true;
                         break;
                     }
                 }
                 if (!$isExist) {
                     $this->_addAlter($item);
                 }
                 $iaDb->resetTable();
             } else {
                 $stmt = '`item` = :item AND `name` = :name';
                 $iaDb->bind($stmt, $item);
                 $iaDb->update(null, $stmt, array('extras' => "CONCAT(`extras`, ',', '" . $this->itemData['name'] . "')"));
             }
         }
         $iaDb->resetTable();
     }
     $rollbackData = array();
     if ($this->itemData['changeset']) {
         $tablesMapping = array('block' => 'blocks', 'field' => 'fields', 'menu' => 'blocks');
         foreach ($this->itemData['changeset'] as $entry) {
             if (!isset($tablesMapping[$entry['type']])) {
                 continue;
             }
             switch ($entry['type']) {
                 case 'field':
                     list($fieldName, $itemName) = explode('-', $entry['name']);
                     if (empty($fieldName) || empty($itemName)) {
                         continue;
                     }
                     $stmt = iaDb::printf("`name` = ':name' AND `item` = ':item'", array('name' => $fieldName, 'item' => $itemName));
                     break;
                 default:
                     $stmt = iaDb::printf("`name` = ':name'", $entry);
             }
             $tableName = $tablesMapping[$entry['type']];
             $name = $entry['name'];
             unset($entry['type'], $entry['name']);
             $entryData = $iaDb->row('`' . implode('`,`', array_keys($entry)) . '`', $stmt, $tableName);
             if ($iaDb->update($entry, $stmt, null, $tableName)) {
                 $rollbackData[$tableName][$name] = $entryData;
             }
         }
     }
     $extraEntry['rollback_data'] = empty($rollbackData) ? '' : serialize($rollbackData);
     if (self::TYPE_PLUGIN == $this->itemData['type']) {
         $extraEntry['removable'] = !in_array($this->itemData['name'], $this->_builtinPlugins);
     }
     if (!$this->isUpdate) {
         $this->iaCore->startHook('phpExtrasInstallBeforeSql', array('extra' => $this->itemData['name'], 'data' => &$this->itemData['info']));
         $iaDb->insert($extraEntry, array('date' => iaDb::FUNCTION_NOW), self::getTable());
     }
     $this->_processCategory($extraEntry);
     if ($this->itemData['code']['install']) {
         $this->_runPhpCode($this->itemData['code']['install']);
     }
     if ($this->itemData['cron_jobs']) {
         $this->iaCore->factory('cron');
         foreach ($this->itemData['cron_jobs'] as $job) {
             $job['extras'] = $this->itemData['name'];
             $iaDb->insert($job, null, iaCron::getTable());
         }
     }
     $this->iaCore->startHook('phpExtrasInstallAfter', array('extra' => $this->itemData['name']));
     $this->iaCore->factory('cache')->clearAll();
     return true;
 }
Ejemplo n.º 20
0
 public function install($type = self::SETUP_REPLACE)
 {
     $iaDb =& $this->iaDb;
     // TODO: check for relations and deactivate all needed extras
     if ($this->_requires) {
         $messages = array();
         foreach ($this->_requires as $require) {
             if ($require['min'] || $require['max']) {
                 $min = $max = false;
                 if (isset($extrasList[$require['name']])) {
                     $info = $extrasList[$require['name']];
                     $min = $require['min'] ? version_compare($require['min'], $info['version'], '<=') : true;
                     $max = $require['max'] ? version_compare($require['max'], $info['version'], '>=') : true;
                 }
                 if (!$max || !$min) {
                     $ver = '';
                     if ($require['min']) {
                         $ver .= $require['min'];
                     }
                     if ($require['max']) {
                         if ($require['min']) {
                             $ver .= '-';
                         }
                         $ver .= $require['max'];
                     }
                     $replace = array(':extra' => $require['type'], ':name' => $require['name'], ':version' => $ver);
                     $messages[] = iaLanguage::getf('required_template_error', $replace);
                     $this->error = true;
                 } else {
                     // TODO: add relations in database to deactivate when parent is uninstalled
                 }
             }
         }
         if ($this->error) {
             $this->_message = implode('<br>', $messages);
             return false;
         }
     }
     if (self::SETUP_REPLACE == $type) {
         $template = $iaDb->one('value', "`name` = 'tmpl'", iaCore::getConfigTable());
         $tablesList = array('hooks', 'blocks', iaLanguage::getTable(), 'pages', iaCore::getConfigTable(), iaCore::getConfigGroupsTable(), iaCore::getCustomConfigTable());
         $iaDb->cascadeDelete($tablesList, "`extras` = '{$template}'");
         $iaDb->cascadeDelete($tablesList, "`extras` = '{$this->name}'");
     }
     $iaDb->update(array('value' => $this->name), "`name` = 'tmpl'", null, iaCore::getConfigTable());
     if ($this->_phrases) {
         $this->_processPhrases();
     }
     if ($this->_config) {
         $iaDb->setTable(iaCore::getConfigTable());
         $maxOrder = $iaDb->one_bind('MAX(`order`) + 1', '`extras` = :extras', array('extras' => $this->name));
         $maxOrder = $maxOrder ? (int) $maxOrder : 1;
         foreach ($this->_config as $entry) {
             $id = $this->iaDb->one(iaDb::ID_COLUMN_SELECTION, iaDb::convertIds($entry['name'], 'name'));
             $entry['order'] = isset($entry['order']) ? $entry['order'] : ++$maxOrder;
             if (!$id || empty($entry['name'])) {
                 $this->iaDb->insert($entry);
             } elseif ($id) {
                 if (isset($entry['value'])) {
                     unset($entry['value']);
                 }
                 $this->iaDb->update($entry, iaDb::convertIds($id));
             }
         }
         $iaDb->resetTable();
     }
     if ($this->_configGroups) {
         $iaDb->setTable(iaCore::getConfigGroupsTable());
         $maxOrder = $iaDb->getMaxOrder() + 1;
         foreach ($this->_configGroups as $title => $entry) {
             $iaDb->insert($entry, array('order' => $maxOrder));
             $this->_addPhrase('config_group_' . $entry['name'], $title, iaLanguage::CATEGORY_ADMIN);
             $maxOrder++;
         }
         $iaDb->resetTable();
     }
     if ($this->_hooks) {
         $iaDb->setTable('hooks');
         $maxOrder = $iaDb->one('MAX(`order`) + 1');
         $maxOrder = $maxOrder ? $maxOrder : 1;
         foreach ($this->_hooks as $hook) {
             $array = explode(',', $hook['name']);
             foreach ($array as $hookName) {
                 if (trim($hookName)) {
                     $hook['name'] = $hookName;
                     if (isset($hook['code']) && $hook['code']) {
                         $hook['code'] = str_replace('{extras}', $this->name, $hook['code']);
                     }
                     $iaDb->insert($hook, array('order' => $maxOrder));
                     $maxOrder++;
                 }
             }
         }
         $iaDb->resetTable();
     }
     $positionsList = array();
     if ($this->_positions) {
         $positionPages = array();
         $iaDb->setTable('positions');
         $iaDb->truncate();
         foreach ($this->_positions as $position) {
             $positionsList[] = $position['name'];
             $iaDb->insert(array('name' => $position['name'], 'menu' => (int) $position['menu'], 'movable' => (int) $position['movable']));
             if (null != $position['default_access']) {
                 $positionPages[] = array('object_type' => 'positions', 'page_name' => '', 'object' => $position['name'], 'access' => (int) $position['default_access']);
             }
             if ($position['pages']) {
                 $pages = explode(',', $position['pages']);
                 foreach ($pages as $page) {
                     $positionPages[] = array('object_type' => 'positions', 'page_name' => $page, 'object' => $position['name'], 'access' => (int) $position['access']);
                 }
             }
         }
         $iaDb->resetTable();
         if ($positionPages) {
             $iaDb->delete("`object_type` = 'positions'", 'objects_pages');
             foreach ($positionPages as $positionPage) {
                 $iaDb->insert($positionPage, null, 'objects_pages');
             }
         }
     }
     $iaBlock = $this->iaCore->factory('block', iaCore::ADMIN);
     if ($this->blocks) {
         $iaDb->setTable($iaBlock::getTable());
         $maxOrder = $iaDb->one('MAX(`order`)');
         $maxOrder = $maxOrder ? $maxOrder : 1;
         foreach ($this->blocks as $block) {
             if (!$block['order']) {
                 $maxOrder++;
                 $block['order'] = $maxOrder;
             } else {
                 $block['order'] = (int) $block['order'];
             }
             if (!empty($block['filename'])) {
                 $block['external'] = 1;
             }
             $blockPages = $block['pages'];
             unset($block['pages'], $block['added']);
             if (!in_array($block['position'], $positionsList)) {
                 $block['position'] = $positionsList[0];
             }
             if (isset($block['contents']) && $block['contents']) {
                 $block['contents'] = str_replace('{extras}', $this->name, $block['contents']);
             }
             $id = $iaDb->insert($block);
             if ($blockPages) {
                 $iaBlock->setVisibility($id, $block['sticky'], explode(',', $blockPages));
             }
         }
         $iaDb->resetTable();
     }
     $rollbackData = array();
     if ($this->_changeset) {
         $tablesMapping = array('block' => 'blocks', 'field' => 'fields', 'menu' => 'blocks', 'page' => 'pages');
         foreach ($this->_changeset as $changeset) {
             if (!isset($tablesMapping[$changeset['type']])) {
                 continue;
             }
             $entity = $changeset['type'];
             $name = $changeset['name'];
             unset($changeset['type'], $changeset['name']);
             switch ($entity) {
                 case 'field':
                     list($fieldName, $itemName) = explode('-', $name);
                     if (empty($fieldName) || empty($itemName)) {
                         continue;
                     }
                     $stmt = iaDb::printf("`name` = ':name' AND `item` = ':item'", array('name' => $fieldName, 'item' => $itemName));
                     break;
                 case 'block':
                 case 'menu':
                     $pagesList = isset($changeset['pages']) ? explode(',', $changeset['pages']) : array();
                     unset($changeset['pages']);
                     // intentionally missing break stmt
                 // intentionally missing break stmt
                 default:
                     $stmt = iaDb::printf("`name` = ':name'", array('name' => $name));
             }
             $tableName = $tablesMapping[$entity];
             $entryData = $iaDb->row('`id`, `' . implode('`,`', array_keys($changeset)) . '`', $stmt, $tableName);
             if ($iaDb->update($changeset, $stmt, null, $tableName)) {
                 if (isset($changeset['sticky']) && ('block' == $entity || 'menu' == $entity)) {
                     $iaBlock->setVisibility($entryData['id'], $changeset['sticky'], $pagesList);
                 }
                 unset($entryData['id']);
                 $rollbackData[$tableName][$name] = $entryData;
             }
         }
     }
     $rollbackData = empty($rollbackData) ? '' : serialize($rollbackData);
     $this->iaCore->set(self::CONFIG_LAYOUT_DATA, serialize($this->_layout), true);
     $this->iaCore->set(self::CONFIG_ROLLBACK_DATA, $rollbackData, true);
     if (self::SETUP_INITIAL != $type) {
         setcookie('template_color_scheme', '', time() - 3600, '/');
     }
     return true;
 }
Ejemplo n.º 21
0
 private function _save(&$iaView)
 {
     $iaAcl = $this->_iaCore->factory('acl');
     if (!$iaAcl->checkAccess($iaView->name() . iaAcl::SEPARATOR . iaCore::ACTION_EDIT)) {
         return iaView::accessDenied();
     }
     $where = "`type` != 'hidden' " . ($this->_type ? 'AND `custom` = 1' : '');
     $params = $this->_iaDb->keyvalue(array('name', 'type'), $where, iaCore::getConfigTable());
     // correct admin dashboard URL generation
     $adminPage = $this->_iaCore->get('admin_page');
     iaUtil::loadUTF8Functions('ascii', 'validation', 'bad', 'utf8_to_ascii');
     $messages = array();
     $error = false;
     if ($_POST['v'] && is_array($_POST['v'])) {
         $values = $_POST['v'];
         $this->_iaCore->startHook('phpConfigurationChange', array('configurationValues' => &$values));
         $this->_iaDb->setTable(iaCore::getConfigTable());
         foreach ($values as $key => $value) {
             $s = strpos($key, '_items_enabled');
             if ($s !== false) {
                 $p = $this->_iaCore->get($key, '', !is_null($this->_type));
                 $array = $p ? explode(',', $p) : array();
                 $data = array();
                 array_shift($value);
                 if ($diff = array_diff($value, $array)) {
                     foreach ($diff as $item) {
                         array_push($data, array('action' => '+', 'item' => $item));
                     }
                 }
                 if ($diff = array_diff($array, $value)) {
                     foreach ($diff as $item) {
                         array_push($data, array('action' => '-', 'item' => $item));
                     }
                 }
                 $extra = substr($key, 0, $s);
                 $this->_iaCore->startHook('phpPackageItemChangedForPlugin', array('data' => $data), $extra);
             }
             if (is_array($value)) {
                 $value = implode(',', $value);
             }
             if (!utf8_is_valid($value)) {
                 $value = utf8_bad_replace($value);
                 trigger_error('Bad UTF-8 detected (replacing with "?") in configuration', E_USER_NOTICE);
             }
             if (self::TYPE_IMAGE == $params[$key]) {
                 if (isset($_POST['delete'][$key])) {
                     $value = '';
                 } elseif (!empty($_FILES[$key]['name'])) {
                     if (!(bool) $_FILES[$key]['error']) {
                         if (@is_uploaded_file($_FILES[$key]['tmp_name'])) {
                             $ext = strtolower(utf8_substr($_FILES[$key]['name'], -3));
                             // if jpeg
                             if ($ext == 'peg') {
                                 $ext = 'jpg';
                             }
                             if (!array_key_exists(strtolower($_FILES[$key]['type']), $this->_imageTypes) || !in_array($ext, $this->_imageTypes, true) || !getimagesize($_FILES[$key]['tmp_name'])) {
                                 $error = true;
                                 $messages[] = iaLanguage::getf('file_type_error', array('extension' => implode(', ', array_unique($this->_imageTypes))));
                             } else {
                                 if ($this->_iaCore->get($key) && file_exists(IA_UPLOADS . $this->_iaCore->get($key))) {
                                     iaUtil::deleteFile(IA_UPLOADS . $this->_iaCore->get($key));
                                 }
                                 $value = $fileName = $key . '.' . $ext;
                                 @move_uploaded_file($_FILES[$key]['tmp_name'], IA_UPLOADS . $fileName);
                                 @chmod(IA_UPLOADS . $fileName, 0777);
                             }
                         }
                     }
                 } else {
                     $value = $this->_iaCore->get($key, '', !is_null($this->_type));
                 }
             }
             if ($this->_type) {
                 $where = sprintf("`name` = '%s' AND `type` = '%s' AND `type_id` = %d", $key, $this->_type, $this->_typeId);
                 $this->_iaDb->setTable(iaCore::getCustomConfigTable());
                 if ($_POST['c'][$key]) {
                     $values = array('name' => $key, 'value' => $value, 'type' => $this->_type, 'type_id' => $this->_typeId);
                     if ($this->_iaDb->exists($where)) {
                         unset($values['value']);
                         $this->_iaDb->bind($where, $values);
                         $this->_iaDb->update(array('value' => $value), $where);
                     } else {
                         $this->_iaDb->insert($values);
                     }
                 } else {
                     $this->_iaDb->delete($where);
                 }
                 $this->_iaDb->resetTable();
             } else {
                 $this->_iaDb->update(array('value' => $value), iaDb::convertIds($key, 'name'));
             }
         }
         $this->_iaDb->resetTable();
         $this->_iaCore->iaCache->clearAll();
     }
     if (!$error) {
         $iaView->setMessages(iaLanguage::get('saved'), iaView::SUCCESS);
         if (isset($_POST['param']['admin_page']) && $_POST['param']['admin_page'] != $adminPage) {
             iaUtil::go_to(IA_URL . $_POST['param']['admin_page'] . '/configuration/general/');
         }
     } elseif ($messages) {
         $iaView->setMessages($messages);
     }
 }
Ejemplo n.º 22
0
 private function _install($pluginName, $action)
 {
     $result = array('error' => true);
     if (isset($_POST['mode']) && 'remote' == $_POST['mode']) {
         $pluginsTempFolder = IA_TMP . 'plugins' . IA_DS;
         is_dir($pluginsTempFolder) || mkdir($pluginsTempFolder);
         $filePath = $pluginsTempFolder . $pluginName;
         $fileName = $filePath . '.zip';
         // save remote plugin file
         iaUtil::downloadRemoteContent(iaUtil::REMOTE_TOOLS_URL . 'install/' . $pluginName . IA_URL_DELIMITER . IA_VERSION, $fileName);
         if (file_exists($fileName)) {
             if (is_writable($this->_folder)) {
                 // delete previous folder
                 if (is_dir($this->_folder . $pluginName)) {
                     unlink($this->_folder . $pluginName);
                 }
                 include_once IA_INCLUDES . 'utils' . IA_DS . 'pclzip.lib.php';
                 $pclZip = new PclZip($fileName);
                 $pclZip->extract(PCLZIP_OPT_PATH, IA_PLUGINS . $pluginName);
                 $this->_iaCore->iaCache->remove('subrion_plugins.inc');
             } else {
                 $result['message'] = iaLanguage::get('upload_plugin_error');
             }
         }
     }
     $iaExtra = $this->getHelper();
     $installationFile = $this->_folder . $pluginName . IA_DS . iaExtra::INSTALL_FILE_NAME;
     if (!file_exists($installationFile)) {
         $result['message'] = iaLanguage::get('file_doesnt_exist');
     } else {
         $iaExtra->setXml(file_get_contents($installationFile));
         $result['error'] = false;
     }
     $iaExtra->parse();
     $installationPossible = false;
     $version = explode('-', $iaExtra->itemData['compatibility']);
     if (!isset($version[1])) {
         if (version_compare($version[0], IA_VERSION, '<=')) {
             $installationPossible = true;
         }
     } else {
         if (version_compare($version[0], IA_VERSION, '<=') && version_compare($version[1], IA_VERSION, '>=')) {
             $installationPossible = true;
         }
     }
     if (!$installationPossible) {
         $result['message'] = iaLanguage::get('incompatible');
         $result['error'] = true;
     }
     if (!$result['error']) {
         $iaExtra->doAction(iaExtra::ACTION_INSTALL);
         if ($iaExtra->error) {
             $result['message'] = $iaExtra->getMessage();
             $result['error'] = true;
         } else {
             $iaLog = $this->_iaCore->factory('log');
             if ($iaExtra->isUpgrade) {
                 $result['message'] = iaLanguage::get('plugin_updated');
                 $iaLog->write(iaLog::ACTION_UPGRADE, array('type' => iaExtra::TYPE_PLUGIN, 'name' => $iaExtra->itemData['info']['title'], 'to' => $iaExtra->itemData['info']['version']));
             } else {
                 $result['groups'] = $iaExtra->getMenuGroups();
                 $result['message'] = iaExtra::ACTION_INSTALL == $action ? iaLanguage::getf('plugin_installed', array('name' => $iaExtra->itemData['info']['title'])) : iaLanguage::getf('plugin_reinstalled', array('name' => $iaExtra->itemData['info']['title']));
                 $iaLog->write(iaLog::ACTION_INSTALL, array('type' => iaExtra::TYPE_PLUGIN, 'name' => $iaExtra->itemData['info']['title']));
             }
             empty($iaExtra->itemData['notes']) || ($result['message'][] = $iaExtra->itemData['notes']);
             $this->_iaCore->getConfig(true);
         }
     }
     $result['result'] = !$result['error'];
     unset($result['error']);
     return $result;
 }
Ejemplo n.º 23
0
 public function defineOutput()
 {
     $this->_setBreadcrumb();
     if (self::REQUEST_HTML == $this->getRequestType()) {
         if (iaCore::ACCESS_ADMIN == $this->iaCore->getAccessType()) {
             if (preg_match('/MSIE 7/', $_SERVER['HTTP_USER_AGENT'])) {
                 $this->setMessages(iaLanguage::get('ie_update_warning'), self::ALERT);
             }
             $installerPath = 'install/modules/module.install.php';
             if (file_exists(IA_HOME . $installerPath)) {
                 $this->setMessages(iaLanguage::getf('install_not_deleted', array('file' => $installerPath)), self::SYSTEM);
             }
             if (version_compare(IA_VERSION, $this->iaCore->get('version'), '>')) {
                 $this->setMessages(iaLanguage::get('core_and_db_versions_mismatch'), self::SYSTEM);
             }
             if (!is_writable(IA_UPLOADS)) {
                 $this->setMessages(iaLanguage::get('upload_writable_permission'), self::SYSTEM);
             }
             if (0 == $this->get('group')) {
                 $quickLinks = $this->iaCore->iaDb->all(iaDb::ALL_COLUMNS_SELECTION, "`type` = 'dashboard' ORDER BY `order` DESC", null, null, 'admin_actions');
                 $this->assign('dashboard', $quickLinks);
             }
             // quick search block
             $items = array('users' => array('title' => iaLanguage::get('users'), 'url' => 'members/'));
             $this->iaCore->startHook('adminQuickSearch', array('items' => &$items));
             $currentItem = $this->getValues('quick_search_item');
             $currentItem = isset($items[$currentItem]) ? $currentItem : 'users';
             $this->assign('quickSearch', $items);
             $this->assign('quickSearchItem', $currentItem);
             //
             $this->set('headerMenu', $this->_getAdminHeaderMenu());
             $this->set('menu', $this->getAdminMenu());
         } else {
             $this->_existBlocks || $this->_setBlocks();
             // get rid of inactive languages
             foreach ($this->iaCore->languages as $key => $language) {
                 if (iaCore::STATUS_INACTIVE == $language['status']) {
                     unset($this->iaCore->languages[$key]);
                 }
             }
         }
         // aliases
         $this->assign('img', IA_TPL_URL . 'img/');
         $this->assign('pageAction', $this->get('action'));
         if (isset($_SESSION['msg']) && is_array($_SESSION['msg'])) {
             foreach ($_SESSION['msg'] as $type => $text) {
                 $this->setMessages($text, $type);
             }
             unset($_SESSION['msg']);
         }
         $this->_setBlocksBySubPage();
     }
 }
Ejemplo n.º 24
0
             $iaView->setMessages(iaLanguage::get('this_transaction_already_passed'), iaView::ALERT);
             iaUtil::go_to($iaPage->getUrlByName('member_funds'));
         }
         break;
     case iaTransaction::REFUNDED:
     case iaTransaction::FAILED:
         $iaView->setMessages($messages);
         iaUtil::go_to($iaPage->getUrlByName('member_funds'));
         break;
     default:
         $error = true;
         $messages[] = 'Unknown status';
 }
 $iaView->setMessages($messages, $error ? iaView::ERROR : iaView::SUCCESS);
 $memberBalance = iaUsers::hasIdentity() ? iaUsers::getIdentity()->funds : 0;
 iaLanguage::set('funds_in_your_account', iaLanguage::getf('funds_in_your_account', array('sum' => $memberBalance, 'currency' => $iaCore->get('currency'))));
 $isBalancePayment = iaUsers::hasIdentity() && iaTransaction::TRANSACTION_MEMBER_BALANCE == $transaction['item'] && iaUsers::getIdentity()->id == $transaction['item_id'];
 $isFundsEnough = (bool) (!$isBalancePayment && iaUsers::hasIdentity() && iaUsers::getIdentity()->funds >= $transaction['amount']);
 // FIXME: solution to prevent csrf catching.
 // Should be replaced once it is possible to disable csrf checking for a single page.
 if (isset($_POST)) {
     $paymentPost = $_POST;
     if (isset($_SERVER['HTTP_ORIGIN'])) {
         $wwwChunk = 'www.';
         $referrerDomain = explode(IA_URL_DELIMITER, $_SERVER['HTTP_ORIGIN']);
         $referrerDomain = strtolower($referrerDomain[2]);
         $referrerDomain = str_replace($wwwChunk, '', $referrerDomain);
         $domain = explode(IA_URL_DELIMITER, $iaCore->get('baseurl'));
         $domain = strtolower($domain[2]);
         $domain = str_replace($wwwChunk, '', $domain);
         if ($referrerDomain !== $domain) {
Ejemplo n.º 25
0
 /**
  * Process image types here and returns filename to write
  *
  * @param array $aFile uploaded file information
  * @param string $folder the file path
  * @param string $aName the file name
  * @param array $imageInfo image information array: width, height, resize_mode
  *
  * @return bool|string
  * @throws ImageWorkshopException
  * @throws Exception
  */
 public function processImage($aFile, $folder, $aName, $imageInfo)
 {
     $ext = self::_getImageExt($aFile['type']);
     if (empty($ext)) {
         $this->setMessage(iaLanguage::getf('file_type_error', array('extension' => implode(', ', array_unique(self::$_typesMap)))));
         return false;
     }
     try {
         $path = IA_UPLOADS . $folder;
         $image = ImageWorkshop::initFromPath($aFile['tmp_name']);
         // save source image
         $image->save($path, self::SOURCE_PREFIX . $aName . $ext);
         // process thumbnails for files uploaded in CKEditor and other tools
         if (empty($imageInfo)) {
             // apply watermark
             $image = self::_applyWaterMark($image);
             $image->save($path, self::_createFilename($aName, $ext));
             return true;
         }
         // check this is an animated GIF
         if (self::ALLOW_ANIMATED_GIFS && 'image/gif' == $aFile['type']) {
             require_once IA_INCLUDES . 'phpimageworkshop' . IA_DS . 'Core' . IA_DS . 'GifFrameExtractor.php';
             $gifPath = $aFile['tmp_name'];
             if (GifFrameExtractor\GifFrameExtractor::isAnimatedGif($gifPath)) {
                 // Extractions of the GIF frames and their durations
                 $gfe = new GifFrameExtractor\GifFrameExtractor();
                 $frames = $gfe->extract($gifPath);
                 // For each frame, we add a watermark and we resize it
                 $retouchedFrames = array();
                 $thumbFrames = array();
                 foreach ($frames as $frame) {
                     $frameLayer = ImageWorkshop::initFromResourceVar($frame['image']);
                     $thumbLayer = ImageWorkshop::initFromResourceVar($frame['image']);
                     $frameLayer->resizeInPixel($imageInfo['image_width'], $imageInfo['image_height'], true);
                     $frameLayer = self::_applyWaterMark($frameLayer);
                     $retouchedFrames[] = $frameLayer->getResult();
                     $thumbLayer->resizeInPixel($imageInfo['thumb_width'], $imageInfo['thumb_height'], true);
                     $thumbFrames[] = $thumbLayer->getResult();
                 }
                 // Then we re-generate the GIF
                 require_once IA_INCLUDES . 'phpimageworkshop' . IA_DS . 'Core' . IA_DS . 'GifCreator.php';
                 $gc = new GifCreator\GifCreator();
                 $gc->create($retouchedFrames, $gfe->getFrameDurations(), 0);
                 file_put_contents($path . self::_createFilename($aName, $ext), $gc->getGif());
                 $thumbCreator = new GifCreator\GifCreator();
                 $thumbCreator->create($thumbFrames, $gfe->getFrameDurations(), 0);
                 file_put_contents($path . self::_createFilename($aName, $ext, true), $thumbCreator->getGif());
                 return self::_createFilename($folder . $aName, $ext, true);
             }
         }
         // save full image
         $largestSide = $imageInfo['image_width'] > $imageInfo['image_height'] ? $imageInfo['image_width'] : $imageInfo['image_height'];
         if ($largestSide) {
             $image->resizeByLargestSideInPixel($largestSide, true);
         }
         $image = self::_applyWaterMark($image);
         $image->save($path, self::_createFilename($aName, $ext));
         // generate thumbnail
         $thumbWidth = $imageInfo['thumb_width'] ? $imageInfo['thumb_width'] : $this->iaCore->get('thumb_w');
         $thumbHeight = $imageInfo['thumb_height'] ? $imageInfo['thumb_height'] : $this->iaCore->get('thumb_h');
         if ($thumbWidth || $thumbHeight) {
             $thumb = ImageWorkshop::initFromPath($aFile['tmp_name']);
             switch ($imageInfo['resize_mode']) {
                 case self::FIT:
                     $thumb->resizeInPixel($thumbWidth, $thumbHeight, true, 0, 0, 'MM');
                     break;
                 case self::CROP:
                     $largestSide = $thumbWidth > $thumbHeight ? $thumbWidth : $thumbHeight;
                     $thumb->cropMaximumInPixel(0, 0, 'MM');
                     $thumb->resizeInPixel($largestSide, $largestSide);
                     $thumb->cropInPixel($thumbWidth, $thumbHeight, 0, 0, 'MM');
             }
             $thumb->save($path, self::_createFilename($aName, $ext, true));
         }
     } catch (Exception $e) {
         $this->iaView->setMessages(iaLanguage::get('invalid_image_file'));
         return false;
     }
     return self::_createFilename($folder . $aName, $ext, true);
 }
Ejemplo n.º 26
0
            }
            if (empty($_POST['from_email']) || !iaValidate::isEmail($_POST['from_email'])) {
                $output['message'][] = iaLanguage::get('error_email_incorrect');
            }
            if (empty($_POST['email_body'])) {
                $output['message'][] = iaLanguage::get('err_message');
            }
            if ($captchaName = $iaCore->get('captcha_name')) {
                $iaCaptcha = $iaCore->factoryPlugin($captchaName, iaCore::FRONT, 'captcha');
                if (!$iaCaptcha->validate()) {
                    $output['message'][] = iaLanguage::get('confirmation_code_incorrect');
                }
            }
            if (empty($output['message'])) {
                $iaMailer = $iaCore->factory('mailer');
                $subject = iaLanguage::getf('author_contact_request', array('title' => $_POST['regarding']));
                $iaMailer->FromName = $_POST['from_name'];
                $iaMailer->From = $_POST['from_email'];
                $iaMailer->AddAddress($memberInfo['email']);
                $iaMailer->Subject = $subject;
                $iaMailer->Body = strip_tags($_POST['email_body']);
                $output['error'] = !$iaMailer->Send();
                $output['message'][] = iaLanguage::get($output['error'] ? 'unable_to_send_email' : 'mail_sent');
            }
            break;
        default:
            $output = array();
            $iaCore->startHook('phpActionsJsonHandle', array('action' => $_POST['action'], 'output' => &$output));
    }
    $iaView->assign($output);
}
Ejemplo n.º 27
0
 private static function _importDump(&$iaDb)
 {
     $filename = $_FILES ? $_FILES['language_file']['tmp_name'] : $_POST['language_file2'];
     $format = isset($_POST['format']) && in_array($_POST['format'], array('csv', 'sql')) ? $_POST['format'] : 'sql';
     $error = false;
     $messages = array();
     if (empty($filename)) {
         $error = true;
         $messages[] = iaLanguage::get('choose_import_file');
     } elseif (!($f = fopen($filename, 'r'))) {
         $error = true;
         $messages[] = iaLanguage::getf('cant_open_sql', array('filename' => $filename));
     }
     if ($format == 'csv' && isset($_POST['title']) && trim($_POST['title']) == '') {
         $error = true;
         $messages[] = iaLanguage::get('title_is_empty');
     }
     if (!$error) {
         $error = true;
         $languageCode = '';
         if ('sql' == $format) {
             $sql = '';
             while ($s = fgets($f, 10240)) {
                 $s = trim($s);
                 if ($s[0] == '#' || $s[0] == '') {
                     continue;
                 }
                 $sql .= $s;
                 if ($s[strlen($s) - 1] != ';') {
                     continue;
                 }
                 $sql = str_replace('{prefix}', $iaDb->prefix, $sql);
                 $iaDb->query($sql);
                 if (empty($languageCode)) {
                     $matches = array();
                     if (preg_match('#, \'([a-z]{2})\', \'#', $sql, $matches) || preg_match('#,\'([a-z]{2})\',\'#', $sql, $matches)) {
                         $languageCode = $matches[1];
                     }
                 }
                 $sql = '';
             }
             fclose($f);
             $error = false;
         }
         if ('csv' == $format) {
             if ($csvContent = file($filename)) {
                 $array = array();
                 foreach ($csvContent as $i => $row) {
                     if (empty($row)) {
                         break;
                     }
                     $fields = explode('|', trim($row));
                     if (count($fields) != 6) {
                         break;
                     }
                     $fields = array_map(array('iaSanitize', 'sql'), $fields);
                     $languageCode = isset($fields[4]) ? $fields[4] : null;
                     $array[] = "('" . implode("','", $fields) . "')";
                 }
                 if (count($fields) == 6 && strlen($languageCode) == 2) {
                     $error = false;
                     $sql = "INSERT INTO `{$iaDb->prefix}language` (`key`, `original`, `value`, `category`, `code`, `extras`) VALUES ";
                     $sql .= implode(',', $array);
                     $sql .= ';';
                     $iaDb->query($sql);
                 }
             }
         }
         $messages[] = iaLanguage::get($error ? 'incorrect_file_format' : 'saved');
     }
     return array(!$error, $messages, isset($languageCode) ? $languageCode : null);
 }
Ejemplo n.º 28
0
 protected function _gridDelete($params)
 {
     $output = array('result' => false, 'message' => iaLanguage::get('invalid_parameters'));
     if (isset($params['id']) && is_array($params['id']) && $params['id']) {
         $affected = 0;
         $total = count($params['id']);
         foreach ($params['id'] as $id) {
             if ($this->_entryDelete($id)) {
                 $affected++;
             }
         }
         $output['result'] = $affected == $total;
         if (1 == $total) {
             $output['message'] = iaLanguage::get($output['result'] ? $this->_phraseGridEntryDeleted : $this->_phraseSaveError);
         } else {
             $output['message'] = $output['result'] ? iaLanguage::getf($this->_phraseGridEntriesDeleted, array('num' => $affected)) : iaLanguage::getf('items_deleted_of', array('num' => $affected, 'total' => $total));
         }
     }
     return $output;
 }
Ejemplo n.º 29
0
 protected function _preSaveEntry(array &$entry, array $data, $action)
 {
     parent::_preSaveEntry($entry, $data, $action);
     iaUtil::loadUTF8Functions('ascii', 'validation', 'bad', 'utf8_to_ascii');
     if (!utf8_is_valid($entry['title'])) {
         $entry['title'] = utf8_bad_replace($entry['title']);
     }
     if (empty($entry['title'])) {
         $this->addMessage('title_is_empty');
     }
     if (!utf8_is_valid($entry['body'])) {
         $entry['body'] = utf8_bad_replace($entry['body']);
     }
     if (empty($entry['body'])) {
         $this->addMessage(iaLanguage::getf('field_is_empty', array('field' => iaLanguage::get('body'))), false);
     }
     if (empty($entry['date_added'])) {
         $entry['date_added'] = date(iaDb::DATETIME_FORMAT);
     }
     $entry['alias'] = $this->getHelper()->titleAlias(empty($entry['alias']) ? $entry['title'] : $entry['alias']);
     if ($this->getMessages()) {
         return false;
     }
     unset($entry['owner'], $entry['tags']);
     if (isset($_FILES['image']['tmp_name']) && $_FILES['image']['tmp_name']) {
         $iaPicture = $this->_iaCore->factory('picture');
         $info = array('image_width' => 1000, 'image_height' => 750, 'thumb_width' => 250, 'thumb_height' => 250, 'resize_mode' => iaPicture::CROP);
         if ($image = $iaPicture->processImage($_FILES['image'], iaUtil::getAccountDir(), iaUtil::generateToken(), $info)) {
             empty($entry['image']) || $iaPicture->delete($entry['image']);
             // already has an assigned image
             $entry['image'] = $image;
         }
     }
     return true;
 }
Ejemplo n.º 30
0
 protected function _preSaveEntry(array &$entry, array $data, $action)
 {
     $entry['date_due'] = $data['date_due'];
     $entry['fullname'] = $data['fullname'];
     $entry['address1'] = $data['address1'];
     $entry['address2'] = $data['address2'];
     $entry['zip'] = $data['zip'];
     $entry['country'] = $data['country'];
     $entry['notes'] = $data['notes'];
     if (iaCore::ACTION_ADD == $action) {
         $entry['id'] = $data['id'];
         $entry['date_created'] = date(iaDb::DATETIME_FORMAT);
         if (empty($entry['id'])) {
             $this->addMessage(iaLanguage::getf('field_is_empty', array('field' => iaLanguage::get('invoice_id'))), false);
         }
     }
     return !$this->getMessages();
 }