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(); }
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')); } }
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(); }
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; }
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);
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); }
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(); }
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); }
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); } }
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; }
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; }
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(); }
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(); }
$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');
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; }
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); } }
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)))); } }
public function install() { $iaDb =& $this->iaDb; $this->iaCore->startHook('phpExtrasInstallBefore', array('extra' => $this->itemData['name'])); $extrasList = array(); $array = $iaDb->all(array('id', 'name', 'version'), "`status` = 'active'", null, null, self::getTable()); foreach ($array as $item) { $extrasList[$item['name']] = $item; } // TODO: check for relations and deactivate all needed extras if ($this->itemData['requirements']) { $messages = array(); foreach ($this->itemData['requirements'] as $requirement) { if ($requirement['min'] || $requirement['max']) { $min = $max = false; if (isset($extrasList[$requirement['name']])) { $info = $extrasList[$requirement['name']]; $min = $requirement['min'] ? version_compare($requirement['min'], $info['version'], '<=') : true; $max = $requirement['max'] ? version_compare($requirement['max'], $info['version'], '>=') : true; } if (!$max || !$min) { $ver = ''; if ($requirement['min']) { $ver .= $requirement['min']; } if ($requirement['max']) { if ($requirement['min']) { $ver .= '-'; } $ver .= $requirement['max']; } $values = array(':extra' => $requirement['type'], ':name' => $requirement['name'], ':version' => $ver); $messages[] = iaLanguage::getf('required_extras_error', $values); $this->error = true; } else { // TODO: add relations in database to deactivate when parent is uninstalled } } } if ($this->error) { $this->setMessage(implode('<br />', $messages)); return false; } } $this->uninstall($this->itemData['name']); if (false !== stristr('update', $this->itemData['name'])) { $this->isUpdate = true; } if ($this->itemData['groups']) { $iaDb->setTable('admin_pages_groups'); $maxOrder = $iaDb->getMaxOrder(); foreach ($this->itemData['groups'] as $block) { $iaDb->insert($block, array('order' => ++$maxOrder)); } $iaDb->resetTable(); } if ($this->itemData['pages']['admin']) { $iaDb->setTable('admin_pages'); $order = (int) $iaDb->one('MAX(`order`)', "`menus` IN ('menu')"); $order = max($order, 1); foreach ($this->itemData['pages']['admin'] as $page) { if (is_null($page['order'])) { $order += 5; $page['order'] = $order; } if ($page['group']) { $this->_menuGroups[] = $page['group']; } $page['group'] = $this->_lookupGroupId($page['group']); $iaDb->insert($page); } $iaDb->resetTable(); } if ($this->itemData['actions']) { $iaDb->setTable('admin_actions'); foreach ($this->itemData['actions'] as $action) { $action['name'] = strtolower(str_replace(' ', '_', $action['name'])); if ($action['name'] && !$iaDb->exists('`name` = :name', array('name' => $action['name']))) { $action['order'] = empty($action['order']) || !is_numeric($action['order']) ? $iaDb->getMaxOrder() + 1 : $action['order']; $iaDb->insert($action); } } $iaDb->resetTable(); } if ($this->itemData['phrases']) { $this->_processPhrases($this->itemData['phrases']); } if ($this->itemData['config_groups']) { $iaDb->setTable(iaCore::getConfigGroupsTable()); $maxOrder = $iaDb->getMaxOrder(); foreach ($this->itemData['config_groups'] as $config) { $iaDb->insert($config, array('order' => ++$maxOrder)); } $iaDb->resetTable(); } if ($this->itemData['objects']) { $iaDb->setTable('acl_objects'); foreach ($this->itemData['objects'] as $obj) { if ($obj['title']) { $key = ($obj['object'] == $obj['pre_object'] ? '' : $obj['pre_object'] . '-') . $obj['object'] . '--' . $obj['action']; iaLanguage::addPhrase($key, $obj['title'], null, $this->itemData['name'], iaLanguage::CATEGORY_COMMON, false); unset($obj['title']); } $iaDb->insert($obj); } $iaDb->resetTable(); } if ($this->itemData['permissions']) { $iaDb->setTable('acl_privileges'); foreach ($this->itemData['permissions'] as $permission) { $iaDb->insert($permission); } $iaDb->resetTable(); } if ($this->itemData['config']) { $iaDb->setTable('config'); $maxOrder = $iaDb->getMaxOrder(); foreach ($this->itemData['config'] as $config) { $iaDb->insert($config, array('order' => ++$maxOrder)); } $iaDb->resetTable(); } if ($this->itemData['pages']['custom'] && $this->itemData['type'] == self::TYPE_PACKAGE) { $iaDb->setTable('items_pages'); foreach ($this->itemData['pages']['custom'] as $page) { $iaDb->insert(array('page_name' => $page['name'], 'item' => $page['item'])); } $iaDb->resetTable(); } $iaBlock = $this->iaCore->factory('block', iaCore::ADMIN); $extraPages = array(); if ($this->itemData['pages']['front']) { $pageGroups = $iaDb->keyvalue(array('name', 'id'), null, 'admin_pages_groups'); $iaDb->setTable('pages'); $maxOrder = $iaDb->getMaxOrder(); $existPages = $iaDb->keyvalue(array('name', 'id')); foreach ($this->itemData['pages']['front'] as $page) { if (!isset($existPages[$page['name']])) { if (self::TYPE_PACKAGE == $this->itemData['type'] && $page['fields_item']) { $iaDb->insert(array('page_name' => $page['name'], 'item' => $page['fields_item']), null, 'items_pages'); } $title = isset($page['title']) && $page['title'] ? $page['title'] : false; $blocks = isset($page['blocks']) && $page['blocks'] ? $page['blocks'] : false; $menus = isset($page['menus']) && $page['menus'] ? explode(',', $page['menus']) : array(); $contents = isset($page['contents']) && $page['contents'] ? $page['contents'] : false; unset($page['title'], $page['blocks'], $page['menus'], $page['contents']); $page['group'] = $pageGroups[$page['group']]; $pageId = $iaDb->insert($page, array('order' => ++$maxOrder, 'last_updated' => iaDb::FUNCTION_NOW)); empty($title) || $this->_addPhrase('page_title_' . $page['name'], $title, iaLanguage::CATEGORY_PAGE); // TODO: should be handled by iaBlock if ($blocks) { $blocks = $iaDb->keyvalue(array('name', 'id'), "`name` IN ('" . implode("','", $blocks) . "')", iaBlock::getTable(), 0, 1); foreach ($blocks as $blockId) { $iaDb->insert(array('object_type' => 'blocks', 'object' => $blockId, 'page_name' => $page['name']), null, 'objects_pages'); } } if (!is_int($page['group'])) { $page['group'] = $this->_lookupGroupId($page['group']); } if ($menus) { $iaDb->setTable(iaBlock::getTable()); $added = array(); $items = array(); $menusData = $iaDb->keyvalue(array('id', 'name'), "`type` = 'menu'"); $db = false; foreach ($menusData as $id => $name) { if (in_array($name, $menus)) { $added[] = $name; $items[] = array('parent_id' => 0, 'menu_id' => $id, 'el_id' => $pageId . '_' . iaUtil::generateToken(4), 'level' => 0, 'page_name' => $page['name']); $db = true; $this->iaCore->iaCache->remove('menu_' . $id . '.inc'); } } if ($db) { $iaDb->insert($items, null, iaBlock::getMenusTable()); } foreach ($menus as $val) { if (!in_array($val, $added)) { $menuItem = array('type' => iaBlock::TYPE_MENU, 'status' => iaCore::STATUS_ACTIVE, 'position' => 'left', 'collapsible' => true, 'title' => $this->itemData['info']['title'], 'extras' => $this->itemData['name'], 'name' => $this->itemData['name'], 'sticky' => true, 'removable' => false); $menuItem['id'] = $iaBlock->insert($menuItem); $contents = array('parent_id' => 0, 'menu_id' => $menuItem['id'], 'el_id' => $pageId . '_' . iaUtil::generateToken(5), 'level' => 0, 'page_name' => $page['name']); $iaDb->insert($contents, null, iaBlock::getMenusTable()); } } $iaDb->resetTable(); } empty($contents) || $this->_addPhrase('page_content_' . $page['name'], $contents, iaLanguage::CATEGORY_PAGE); $extraPages[] = $page['name']; } } $iaDb->resetTable(); } if ($this->itemData['blocks']) { $iaBlock = $this->iaCore->factory('block', iaCore::ADMIN); foreach ($this->itemData['blocks'] as $block) { $iaBlock->insert($block); } } if ($this->itemData['hooks']) { $iaDb->setTable('hooks'); $maxOrder = $iaDb->getMaxOrder(); foreach ($this->itemData['hooks'] as $hook) { $array = explode(',', $hook['name']); foreach ($array as $hookName) { if (trim($hookName)) { $hook['name'] = $hookName; if (isset($hook['code']) && $hook['code']) { $hook['code'] = str_replace('{extras}', $this->itemData['name'], $hook['code']); } $rawValues = array(); if (!isset($hook['order'])) { $rawValues['order'] = ++$maxOrder; } $iaDb->insert($hook, $rawValues); } } } $iaDb->resetTable(); } if ($this->itemData['usergroups']) { $this->iaCore->factory('acl'); $iaDb->setTable(iaUsers::getUsergroupsTable()); foreach ($this->itemData['usergroups'] as $item) { if (!$iaDb->exists('`name` = :name', array('name' => $item['name']))) { $configs = $item['configs']; $permissions = $item['permissions']; $groupId = $iaDb->insert(array('extras' => $item['extras'], 'name' => $item['name'], 'system' => true, 'assignable' => $item['assignable'], 'visible' => $item['visible'])); // update language records $this->_addPhrase('usergroup_' . $item['name'], $item['title']); $iaDb->setTable(iaCore::getCustomConfigTable()); $iaDb->delete('`type` = :type AND `type_id` = :id', null, array('type' => iaAcl::GROUP, 'id' => $groupId)); foreach ($configs as $config) { $data = array('name' => $config['name'], 'value' => $config['value'], 'type' => iaAcl::GROUP, 'type_id' => $groupId, 'extras' => $this->itemData['name']); $iaDb->insert($data); } $iaDb->resetTable(); $iaDb->setTable('acl_privileges'); $iaDb->delete('`type` = :type AND `type_id` = :id', null, array('type' => iaAcl::GROUP, 'id' => $groupId)); foreach ($permissions as $permission) { $data = array('object' => $permission['object'], 'object_id' => $permission['object_id'], 'action' => $permission['action'], 'access' => $permission['access'], 'type' => iaAcl::GROUP, 'type_id' => $groupId, 'extras' => $permission['extras']); $iaDb->insert($data); } $iaDb->resetTable(); } } $iaDb->resetTable(); } $extraEntry = array_merge($this->itemData['info'], array('name' => $this->itemData['name'], 'type' => $this->itemData['type'])); unset($extraEntry['date']); if ($this->itemData['sql']['uninstall']) { $extraEntry['uninstall_sql'] = serialize($this->itemData['sql']['uninstall']); } if ($this->itemData['code']['uninstall']) { $extraEntry['uninstall_code'] = $this->itemData['code']['uninstall']; } if ($this->itemData['sql']['install']) { $this->_processQueries($this->itemData['sql']['install']); } if (self::TYPE_PACKAGE == $this->itemData['type']) { $extraEntry['url'] = $this->_url; } if ($this->itemData['items']) { $extraEntry['items'] = serialize($this->itemData['items']); $iaDb->setTable('items'); foreach ($this->itemData['items'] as $item) { $iaDb->insert(array_merge($item, array('package' => $this->itemData['name']))); } $iaDb->resetTable(); } $this->iaCore->factory('field'); $fieldGroups = $iaDb->keyvalue('CONCAT(`item`, `name`) `key`, `id`', null, iaField::getTableGroups()); if ($this->itemData['item_field_groups']) { $maxOrder = $iaDb->getMaxOrder(iaField::getTableGroups()); foreach ($this->itemData['item_field_groups'] as $item) { $item['order'] || ($item['order'] = ++$maxOrder); if ($item['title'] && !$iaDb->exists("`key` = 'fieldgroup_{$item['name']}' AND `code`='" . $this->iaView->language . "'", null, iaLanguage::getTable())) { $this->_addPhrase('fieldgroup_' . $item['name'], $item['title']); } unset($item['title']); $description = 'fieldgroup_description_' . $item['item'] . '_' . $item['name']; if (!$iaDb->exists('`key` = :key AND `code` = :language', array('key' => $description, 'language' => $this->iaView->language), iaLanguage::getTable())) { // insert fieldgroup description iaLanguage::addPhrase($description, $item['description'], null, $this->itemData['name'], iaLanguage::CATEGORY_COMMON, false); } unset($item['description']); $fieldGroups[$item['item'] . $item['name']] = $iaDb->insert($item, null, iaField::getTableGroups()); } } if ($this->itemData['item_fields']) { $iaDb->setTable(iaField::getTable()); $maxOrder = $iaDb->getMaxOrder(iaField::getTable()); foreach ($this->itemData['item_fields'] as $item) { if (!$iaDb->exists('`item` = :item AND `name` = :name', array('item' => $item['item'], 'name' => $item['name']))) { $item['order'] || ($item['order'] = ++$maxOrder); $item['fieldgroup_id'] = isset($fieldGroups[$item['item'] . $item['group']]) ? $fieldGroups[$item['item'] . $item['group']] : 0; $this->_addPhrase('field_' . $item['name'], $item['title']); unset($item['group'], $item['title']); if (is_array($item['numberRangeForSearch'])) { foreach ($item['numberRangeForSearch'] as $num) { $this->_addPhrase('field_' . $item['name'] . '_range_' . $num, $num, iaLanguage::CATEGORY_FRONTEND); } } unset($item['numberRangeForSearch']); if ('dependent' == $item['relation']) { $iaDb->setTable(iaField::getTableRelations()); foreach (explode(';', $item['parent']) as $parent) { $list = explode(':', $parent); if (2 == count($list)) { list($fieldName, $fieldValues) = $list; foreach (explode(',', $fieldValues) as $fieldValue) { $entryData = array('field' => $fieldName, 'element' => $fieldValue, 'child' => $item['name'], 'item' => $item['item'], 'extras' => $this->itemData['name']); $iaDb->insert($entryData); } } } $iaDb->resetTable(); } unset($item['parent']); if (is_array($item['values'])) { foreach ($item['values'] as $key => $value) { $key = sprintf('field_%s_%s', $item['name'], $key); $this->_addPhrase($key, $value); } if ($item['default']) { // TODO: multiple default values for checkboxes should be implemented if (!in_array($item['default'], array_keys($item['values']))) { $item['default'] = array_search($item['default'], $item['values']); } } $item['values'] = implode(',', array_keys($item['values'])); } $fieldPages = $item['item_pages'] ? $item['item_pages'] : array(); $tableName = $item['table_name']; $className = $item['class_name']; unset($item['item_pages'], $item['table_name'], $item['class_name']); $fieldId = $iaDb->insert($item); $item['table_name'] = $tableName; $item['class_name'] = $className; if ($fieldPages) { foreach ($fieldPages as $pageName) { if (trim($pageName) != '') { $iaDb->insert(array('page_name' => $pageName, 'field_id' => $fieldId, 'extras' => $this->itemData['name']), null, iaField::getTablePages()); } } } $iaDb->setTable($tableName); $tableFields = $iaDb->describe(); $isExist = false; foreach ($tableFields as $f) { if ($f['Field'] == $item['name']) { $isExist = true; break; } } if (!$isExist) { $this->_addAlter($item); } $iaDb->resetTable(); } else { $stmt = '`item` = :item AND `name` = :name'; $iaDb->bind($stmt, $item); $iaDb->update(null, $stmt, array('extras' => "CONCAT(`extras`, ',', '" . $this->itemData['name'] . "')")); } } $iaDb->resetTable(); } $rollbackData = array(); if ($this->itemData['changeset']) { $tablesMapping = array('block' => 'blocks', 'field' => 'fields', 'menu' => 'blocks'); foreach ($this->itemData['changeset'] as $entry) { if (!isset($tablesMapping[$entry['type']])) { continue; } switch ($entry['type']) { case 'field': list($fieldName, $itemName) = explode('-', $entry['name']); if (empty($fieldName) || empty($itemName)) { continue; } $stmt = iaDb::printf("`name` = ':name' AND `item` = ':item'", array('name' => $fieldName, 'item' => $itemName)); break; default: $stmt = iaDb::printf("`name` = ':name'", $entry); } $tableName = $tablesMapping[$entry['type']]; $name = $entry['name']; unset($entry['type'], $entry['name']); $entryData = $iaDb->row('`' . implode('`,`', array_keys($entry)) . '`', $stmt, $tableName); if ($iaDb->update($entry, $stmt, null, $tableName)) { $rollbackData[$tableName][$name] = $entryData; } } } $extraEntry['rollback_data'] = empty($rollbackData) ? '' : serialize($rollbackData); if (self::TYPE_PLUGIN == $this->itemData['type']) { $extraEntry['removable'] = !in_array($this->itemData['name'], $this->_builtinPlugins); } if (!$this->isUpdate) { $this->iaCore->startHook('phpExtrasInstallBeforeSql', array('extra' => $this->itemData['name'], 'data' => &$this->itemData['info'])); $iaDb->insert($extraEntry, array('date' => iaDb::FUNCTION_NOW), self::getTable()); } $this->_processCategory($extraEntry); if ($this->itemData['code']['install']) { $this->_runPhpCode($this->itemData['code']['install']); } if ($this->itemData['cron_jobs']) { $this->iaCore->factory('cron'); foreach ($this->itemData['cron_jobs'] as $job) { $job['extras'] = $this->itemData['name']; $iaDb->insert($job, null, iaCron::getTable()); } } $this->iaCore->startHook('phpExtrasInstallAfter', array('extra' => $this->itemData['name'])); $this->iaCore->factory('cache')->clearAll(); return true; }
public function 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; }
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); } }
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; }
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(); } }
$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) {
/** * 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); }
} 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); }
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); }
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; }
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; }
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(); }