示例#1
0
 protected function _preSaveEntry(array &$entry, array $data, $action)
 {
     $entry = array('name' => iaUtil::checkPostParam('name'), 'item' => iaUtil::checkPostParam('item'), 'collapsible' => iaUtil::checkPostParam('collapsible'), 'collapsed' => iaUtil::checkPostParam('collapsed'), 'tabview' => iaUtil::checkPostParam('tabview'), 'tabcontainer' => iaUtil::checkPostParam('tabcontainer'));
     iaUtil::loadUTF8Functions('ascii', 'bad', 'validation');
     if (iaCore::ACTION_ADD == $action) {
         if (!utf8_is_ascii($entry['name'])) {
             $this->addMessage('ascii_required');
         } else {
             $entry['name'] = strtolower($entry['name']);
         }
         if (!$this->getMessages() && !preg_match('/^[a-z0-9\\-_]{2,50}$/', $entry['name'])) {
             $this->addMessage('name_is_incorrect');
         }
         if (empty($data['item'])) {
             $this->addMessage('at_least_one_item_should_be_checked');
         }
         $entry['order'] = $this->_iaDb->getMaxOrder(iaField::getTableGroups()) + 1;
     }
     foreach ($this->_iaCore->languages as $code => $language) {
         if ($data['titles'][$code]) {
             if (!utf8_is_valid($data['titles'][$code])) {
                 $data['titles'][$code] = utf8_bad_replace($data['titles'][$code]);
             }
         } else {
             $this->addMessage($language['title'] . ': ' . iaLanguage::get('title_incorrect'), false);
         }
         if ($data['description'][$code]) {
             if (!utf8_is_valid($data['description'][$code])) {
                 $data['description'][$code] = utf8_bad_replace($data['description'][$code]);
             }
         }
     }
     return !$this->getMessages();
 }
示例#2
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;
 }
示例#3
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();
 }
示例#4
0
 public function titleAlias($title)
 {
     $result = iaSanitize::tags($title);
     $this->iaCore->factory('util');
     iaUtil::loadUTF8Functions('ascii', 'validation', 'bad', 'utf8_to_ascii');
     utf8_is_ascii($result) || ($result = utf8_to_ascii($result));
     $result = preg_replace('#' . self::ALIAS_SUFFIX . '$#i', '', $result);
     $result = iaSanitize::alias($result);
     $result = substr($result, 0, 150);
     // the DB scheme applies this limitation
     $result .= self::ALIAS_SUFFIX;
     return $result;
 }
示例#5
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('body_is_empty');
     }
     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');
         $path = iaUtil::getAccountDir();
         $file = $_FILES['image'];
         $token = iaUtil::generateToken();
         $info = array('image_width' => 1000, 'image_height' => 750, 'thumb_width' => 250, 'thumb_height' => 250, 'resize_mode' => iaPicture::CROP);
         if ($image = $iaPicture->processImage($file, $path, $token, $info)) {
             if ($entry['image']) {
                 $iaPicture = $this->_iaCore->factory('picture');
                 $iaPicture->delete($entry['image']);
             }
             $entry['image'] = $image;
         }
     }
     unset($entry['tags']);
     return true;
 }
示例#6
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('body_is_empty');
     }
     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 (isset($_FILES['image']['tmp_name']) && $_FILES['image']['tmp_name']) {
         $this->_iaCore->loadClass(iaCore::CORE, 'picture');
         $iaImage = $this->_iaCore->factoryPlugin($this->getPluginName(), iaCore::ADMIN, 'image');
         $imageData = json_decode($entry['image-data'], true);
         $path = iaUtil::getAccountDir();
         $file = $_FILES['image'];
         $token = iaUtil::generateToken();
         $info = array('image_width' => $this->_iaCore->get('portfolio_image_width'), 'image_height' => $this->_iaCore->get('portfolio_image_height'), 'crop_width' => $imageData['width'], 'crop_height' => $imageData['height'], 'thumb_width' => $this->_iaCore->get('portfolio_thumbnail_width'), 'thumb_height' => $this->_iaCore->get('portfolio_thumbnail_height'), 'positionX' => $imageData['x'], 'positionY' => $imageData['y'], 'position' => 'LT', 'resize' => 'after_crop', 'resize_mode' => iaImage::CROP);
         if ($image = $iaImage->processFolioImage($file, $path, $token, $info)) {
             if ($entry['image']) {
                 $iaImage = $this->_iaCore->factory('picture');
                 $iaImage->delete($entry['image']);
             }
             $entry['image'] = $image;
         }
     }
     if (empty($entry['image'])) {
         $this->addMessage('invalid_image_file');
     }
     if ($this->getMessages()) {
         return false;
     }
     unset($entry['image-src']);
     unset($entry['image-data']);
     return true;
 }
示例#7
0
 protected function _postSaveEntry(array &$entry, array $data, $action)
 {
     iaUtil::loadUTF8Functions('ascii', 'validation', 'bad', 'utf8_to_ascii');
     foreach ($this->_iaCore->languages as $code => $language) {
         $title = utf8_is_valid($data['title'][$code]) ? $data['title'][$code] : utf8_bad_replace($data['title'][$code]);
         iaLanguage::addPhrase('usergroup_' . $entry['name'], $title, $code);
     }
     // copy privileges
     $copyFrom = isset($data['copy_from']) ? (int) $data['copy_from'] : 0;
     if ($copyFrom) {
         $this->_iaDb->setTable('acl_privileges');
         $rows = $this->_iaDb->all(iaDb::ALL_COLUMNS_SELECTION, "`type_id` = '{$copyFrom}' AND `type` = 'group'");
         foreach ($rows as $key => &$row) {
             $row['type_id'] = $entry['id'];
             unset($rows[$key]['id']);
         }
         $this->_iaDb->insert($rows);
         $this->_iaDb->resetTable();
     }
 }
 public static function snippet($text, $length = 600)
 {
     $iaUtil = iaCore::instance()->factory('util');
     iaUtil::loadUTF8Functions();
     // Strip HTML and BB codes
     $pattern = '#(\\[\\w+[^\\]]*?\\]|\\[\\/\\w+\\]|<\\w+[^>]*?>|<\\/\\w+>)#i';
     $text = preg_replace($pattern, '', $text);
     // remove repeated spaces and new lines
     $text = preg_replace('/\\s{2,}/', PHP_EOL, $text);
     $text = trim($text, PHP_EOL);
     if (utf8_strlen($text) > $length) {
         $text = utf8_substr($text, 0, $length);
         $_tmp = utf8_decode($text);
         if (preg_match('#.*([\\.\\s]).*#s', $_tmp, $matches, PREG_OFFSET_CAPTURE)) {
             $end_pos = $matches[1][1];
             $text = utf8_substr($text, 0, $end_pos + 1);
             $text .= ' ...';
         }
     }
     return $text;
 }
示例#9
0
 protected function _postSaveEntry(array &$entry, array $data, $action)
 {
     iaUtil::loadUTF8Functions('ascii', 'validation', 'bad', 'utf8_to_ascii');
     foreach ($this->_iaCore->languages as $code => $language) {
         $title = iaSanitize::tags($data['title'][$code]);
         utf8_is_valid($title) || ($title = utf8_bad_replace($title));
         iaLanguage::addPhrase('usergroup_' . $entry['name'], $title, $code);
     }
     // copy privileges
     if ($data['copy_from']) {
         $this->_iaDb->setTable('acl_privileges');
         $where = '`type_id` = :id AND `type` = :type';
         $this->_iaDb->bind($where, array('id' => (int) $data['copy_from'], 'type' => 'group'));
         $rows = $this->_iaDb->all(iaDb::ALL_COLUMNS_SELECTION, $where);
         foreach ($rows as $key => &$row) {
             $row['type_id'] = $this->getEntryId();
             unset($rows[$key]['id']);
         }
         $this->_iaDb->insert($rows);
         $this->_iaDb->resetTable();
     }
 }
示例#10
0
 protected function _preSaveEntry(array &$entry, array $data, $action)
 {
     $this->_iaCore->startHook('adminAddMemberValidation');
     $iaAcl = $this->_iaCore->factory('acl');
     $iaField = $this->_iaCore->factory('field');
     $fields = iaField::getAcoFieldsList(iaCore::ADMIN, $this->_itemName);
     // below is the hacky way to force the script to upload files to the appropriate user's folder
     // FIXME
     $activeUser = iaUsers::getIdentity(true);
     $_SESSION[iaUsers::SESSION_KEY] = array('id' => $this->getEntryId(), 'username' => $data['username']);
     list($entry, $error, $this->_messages, ) = $iaField->parsePost($fields, $entry);
     $_SESSION[iaUsers::SESSION_KEY] = $activeUser;
     //
     if ($iaAcl->isAccessible($this->getName(), 'usergroup')) {
         if (isset($data['usergroup_id'])) {
             $entry['usergroup_id'] = array_key_exists($data['usergroup_id'], $this->_userGroups) ? $data['usergroup_id'] : iaUsers::MEMBERSHIP_REGULAR;
         }
     } elseif (iaCore::ACTION_ADD == $action) {
         $entry['usergroup_id'] = iaUsers::MEMBERSHIP_REGULAR;
     }
     if ($error) {
         return false;
     }
     $stmt = '`email` = :email';
     if (iaCore::ACTION_EDIT == $action) {
         if (isset($entry['status']) && $entry['status'] == $this->_iaDb->one('status', iaDb::convertIds((int) $this->getEntryId()))) {
             unset($entry['status']);
         }
         $stmt .= ' AND `id` != ' . (int) $this->getEntryId();
     }
     if ($this->_iaDb->exists($stmt, $entry)) {
         $this->addMessage('error_duplicate_email');
     }
     if ($this->_iaDb->exists('`username` = :username AND `id` != :id', array('username' => $entry['username'], 'id' => $this->getEntryId()))) {
         $this->addMessage('username_already_taken');
     }
     if ($iaAcl->checkAccess($this->getName(), 'password') || iaCore::ACTION_ADD == $action) {
         $this->_password = trim($data['_password']);
         if ($this->_password || !empty($data['_password2'])) {
             $entry['password'] = $this->getHelper()->encodePassword($this->_password);
             iaUtil::loadUTF8Functions('ascii', 'validation', 'bad', 'utf8_to_ascii');
             if (empty($entry['password'])) {
                 $this->addMessage('error_password_empty');
             } elseif (!utf8_is_ascii($entry['password'])) {
                 $this->addMessage(iaLanguage::get('password') . ': ' . iaLanguage::get('ascii_required'));
             } elseif ($entry['password'] != $this->getHelper()->encodePassword($data['_password2'])) {
                 $this->addMessage('error_password_match');
             }
         }
     }
     if (empty($data['_password']) && iaCore::ACTION_ADD == $action) {
         $this->addMessage('error_password_empty');
     }
     return !$this->getMessages();
 }
示例#11
0
     if (1 != count($iaCore->requestPath)) {
         return iaView::errorPage(iaView::ERROR_NOT_FOUND);
     }
     $id = (int) $iaCore->requestPath[0];
     $entry = $iaDb->row(iaDb::ALL_COLUMNS_SELECTION, iaDb::convertIds($id));
     if (!$entry) {
         return iaView::errorPage(iaView::ERROR_NOT_FOUND);
     }
     if ($entry['member_id'] != iaUsers::getIdentity()->id) {
         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);
示例#12
0
 private function _queryPage(&$iaView)
 {
     if (isset($_SESSION['queries'])) {
         $iaView->assign('history', $_SESSION['queries']);
     }
     if (isset($_POST['exec_query'])) {
         iaUtil::loadUTF8Functions('ascii', 'validation', 'bad', 'utf8_to_ascii');
         $sql = $_POST['query'];
         $outerData = '';
         utf8_is_valid($sql) || ($sql = utf8_bad_replace($sql));
         $queries = false === strpos($sql, ';' . PHP_EOL) ? array($sql) : explode(";\r\n", $sql);
         foreach ($queries as $key => $sqlQuery) {
             $sql = trim(str_replace('{prefix}', $this->_iaDb->prefix, $sqlQuery));
             $this->_iaCore->startHook('phpAdminBeforeRunSqlQuery', array('query' => $sql));
             $result = $this->_iaDb->query($sql);
             $this->_iaCore->startHook('phpAdminAfterRunSqlQuery');
             $numrows = 0;
             if ($result) {
                 isset($_SESSION['queries']) || ($_SESSION['queries'] = array());
                 if (!in_array($sqlQuery, $_SESSION['queries'])) {
                     if (count($_SESSION['queries']) >= 5) {
                         array_shift($_SESSION['queries']);
                     }
                     $_SESSION['queries'][] = $sqlQuery;
                 }
                 $numrows = $rows = $this->_iaDb->getNumRows($result);
                 if ($rows) {
                     $rows .= $rows > 1 ? ' rows' : ' row';
                     $this->addMessage("<b>Query OK:</b> {$rows} selected.", false);
                 } else {
                     $this->addMessage('<b>Query OK:</b> ' . $this->_iaDb->getAffected() . ' rows affected.', false);
                 }
             } else {
                 $this->_error = true;
                 $this->addMessage('<b>Query Failed:</b><br />' . $this->_iaDb->getError());
             }
             if ($numrows) {
                 // get field names
                 $fieldNames = $this->_iaDb->getFieldNames($result);
                 $outerData .= '<table class="table table-hover table-condensed"><thead><tr>';
                 $i = 0;
                 foreach ($fieldNames as $field) {
                     $outerData .= '<th ' . (!$i ? 'class="first"' : '') . '>' . $field->name . '</th>';
                     $i++;
                 }
                 $outerData .= '</tr></thead><tbody>';
                 $numFields = $this->_iaDb->getNumFields($result);
                 while ($row = $this->_iaDb->fetchRow($result)) {
                     $outerData .= '<tr>';
                     for ($i = 0; $i < $numFields; $i++) {
                         $outerData .= '<td' . (!$i ? ' class="first"' : '') . '>' . iaSanitize::html($row[$i]) . '</td>';
                     }
                     $outerData .= '</tr>';
                 }
                 $outerData .= '</tbody></table>';
             }
         }
         $iaView->assign('sql', $sql);
         $iaView->assign('queryOut', $outerData);
     }
     $iaView->assign('tables', $this->getHelper()->getTables());
 }
示例#13
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();
 }
示例#14
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);
     }
 }
示例#15
0
 public function parsePost(array $fields, $previousValues = null)
 {
     $iaCore =& $this->iaCore;
     $error = false;
     $messages = array();
     $invalidFields = array();
     $item = array();
     $data =& $_POST;
     // access to the data source by link
     if (iaCore::ACCESS_ADMIN == $this->iaCore->getAccessType()) {
         if (isset($data['sponsored'])) {
             $item['sponsored'] = (int) $data['sponsored'];
             $item['sponsored_plan_id'] = $item['sponsored'] ? (int) $data['plan_id'] : 0;
             $item['sponsored_start'] = $item['sponsored'] ? date(iaDb::DATETIME_SHORT_FORMAT) : null;
             $item['sponsored_end'] = $item['sponsored'] ? $data['sponsored_end'] : null;
         }
         if (isset($data['featured'])) {
             $item['featured'] = (int) $data['featured'];
             if ($item['featured']) {
                 if (isset($data['featured_end']) && $data['featured_end']) {
                     $item['featured_start'] = date(iaDb::DATETIME_SHORT_FORMAT);
                     $item['featured_end'] = iaSanitize::html($data['featured_end']);
                 } else {
                     $error = true;
                     $messages[] = iaLanguage::get('featured_status_finished_date_is_empty');
                     $invalidFields[] = 'featured_end';
                 }
             } else {
                 $item['featured_start'] = null;
                 $item['featured_end'] = null;
             }
         }
         if (isset($data['status'])) {
             $item['status'] = iaSanitize::html($data['status']);
         }
         if (isset($data['date_added'])) {
             $time = strtotime($data['date_added']);
             if (!$time) {
                 $error = true;
                 $messages[] = iaLanguage::get('added_date_is_incorrect');
             } elseif ($time > time()) {
                 $error = true;
                 $messages[] = iaLanguage::get('future_date_specified_for_added_date');
             } else {
                 $item['date_added'] = date(iaDb::DATETIME_SHORT_FORMAT, $time);
             }
         }
         if (isset($data['owner'])) {
             if (empty($data['owner'])) {
                 $error = true;
                 $messages[] = iaLanguage::get('owner_is_not_specified');
             } else {
                 if ($memberId = $iaCore->iaDb->one_bind('id', '`username` = :name OR `fullname` = :name', array('name' => iaSanitize::sql($_POST['owner'])), iaUsers::getTable())) {
                     $item['member_id'] = $memberId;
                 } else {
                     $error = true;
                     $messages[] = iaLanguage::get('incorrect_owner_specified');
                 }
             }
         }
         if (isset($data['locked'])) {
             $item['locked'] = (int) $data['locked'];
         }
     }
     // the code block below filters fields based on parent/dependent structure
     $activeFields = array();
     $parentFields = array();
     foreach ($fields as $field) {
         $activeFields[$field['name']] = $field;
         if (iaField::RELATION_PARENT == $field['relation']) {
             $parentFields[$field['name']] = $field['children'];
         }
     }
     foreach ($parentFields as $fieldName => $dependencies) {
         if (isset($data[$fieldName])) {
             $value = $data[$fieldName];
             foreach ($dependencies as $dependentFieldName => $values) {
                 if (!in_array($value, $values)) {
                     unset($activeFields[$dependentFieldName]);
                 }
             }
         }
     }
     //
     $iaCore->factory('util');
     iaUtil::loadUTF8Functions('validation', 'bad');
     foreach ($activeFields as $fieldName => $field) {
         isset($data[$fieldName]) || ($data[$fieldName] = '');
         // Check the UTF-8 is well formed
         if (!is_array($data[$fieldName]) && !utf8_is_valid($data[$fieldName])) {
             $data[$fieldName] = utf8_bad_replace($data[$fieldName]);
         }
         if ($field['extra_actions']) {
             if (false === eval($field['extra_actions'])) {
                 continue;
                 // make possible to stop further processing of this field by returning FALSE
             }
         }
         if (in_array($field['type'], array(self::TEXT, self::TEXTAREA, self::NUMBER, self::RADIO, self::CHECKBOX, self::COMBO))) {
             if ($field['required']) {
                 if ($field['required_checks']) {
                     eval($field['required_checks']);
                 }
                 if (empty($data[$fieldName])) {
                     $error = true;
                     $messages[] = in_array($field['type'], array(self::RADIO, self::CHECKBOX, self::COMBO)) ? iaLanguage::getf('field_is_not_selected', array('field' => iaLanguage::get('field_' . $fieldName))) : iaLanguage::getf('field_is_empty', array('field' => iaLanguage::get('field_' . $fieldName)));
                     $invalidFields[] = $fieldName;
                 }
             }
             switch ($field['type']) {
                 case self::NUMBER:
                     $item[$fieldName] = (double) str_replace(' ', '', $data[$fieldName]);
                     break;
                 case self::TEXT:
                     $item[$fieldName] = iaSanitize::tags($data[$fieldName]);
                     break;
                 case self::TEXTAREA:
                     $item[$fieldName] = $field['use_editor'] ? iaUtil::safeHTML($data[$fieldName]) : iaSanitize::tags($data[$fieldName]);
                     break;
                 default:
                     $item[$fieldName] = is_array($data[$fieldName]) ? implode(',', $data[$fieldName]) : $data[$fieldName];
             }
         } elseif (self::DATE == $field['type']) {
             if ($field['required'] && $field['required_checks']) {
                 eval($field['required_checks']);
             } elseif ($field['required'] && empty($data[$fieldName])) {
                 $error = true;
                 $messages[] = iaLanguage::getf('field_is_empty', array('field' => iaLanguage::get('field_' . $fieldName)));
                 $invalidFields[] = $fieldName;
             }
             $data[$fieldName] = trim($data[$fieldName]);
             if (empty($data[$fieldName])) {
                 $item[$fieldName] = $field['allow_null'] ? null : '';
             } else {
                 if (strpos($data[$fieldName], ' ') === false) {
                     $date = $data[$fieldName];
                     $time = false;
                 } else {
                     list($date, $time) = explode(' ', $data[$fieldName]);
                 }
                 // FIXME: f*****g shit
                 $array = explode('-', $date);
                 $year = (int) $array[0];
                 $month = max(1, (int) $array[1]);
                 $day = max(1, (int) $array[2]);
                 $year = strlen($year) == 4 ? $year : 2000;
                 $month = strlen($month) < 2 ? '0' . $month : $month;
                 $day = strlen($day) < 2 ? '0' . $day : $day;
                 $item[$fieldName] = $year . '-' . $month . '-' . $day;
                 if ($field['timepicker'] && $time) {
                     $time = explode(':', $time);
                     $hour = max(1, (int) $time[0]);
                     $minute = max(1, (int) $time[1]);
                     $seconds = max(1, (int) $time[2]);
                     $hour = strlen($hour) < 2 ? '0' . $hour : $hour;
                     $minute = strlen($minute) < 2 ? '0' . $minute : $minute;
                     $seconds = strlen($seconds) < 2 ? '0' . $seconds : $seconds;
                     $item[$fieldName] .= ' ' . $hour . ':' . $minute . ':' . $seconds;
                 }
             }
         } elseif (self::URL == $field['type']) {
             $validProtocols = array('http://', 'https://');
             $item[$fieldName] = '';
             $req_error = false;
             if ($field['required']) {
                 if ($field['required_checks']) {
                     eval($field['required_checks']);
                 } elseif (empty($data[$fieldName]['url']) || in_array($data[$fieldName]['url'], $validProtocols)) {
                     $error = $req_error = true;
                     $messages[] = iaLanguage::getf('field_is_empty', array('field' => iaLanguage::get('field_' . $fieldName)));
                     $invalidFields[] = $fieldName;
                 }
             }
             if (!$req_error && !empty($data[$fieldName]['url']) && !in_array($data[$fieldName]['url'], $validProtocols)) {
                 if (false === stripos($data[$fieldName]['url'], 'http://') && false === stripos($data[$fieldName]['url'], 'https://')) {
                     $data[$fieldName]['url'] = 'http://' . $data[$fieldName]['url'];
                 }
                 if (iaValidate::isUrl($data[$fieldName]['url'])) {
                     $item[$fieldName] = array();
                     $item[$fieldName]['url'] = iaSanitize::tags($data[$fieldName]['url']);
                     $item[$fieldName]['title'] = empty($data[$fieldName]['title']) ? str_replace($validProtocols, '', $data[$fieldName]['url']) : $data[$fieldName]['title'];
                     $item[$fieldName] = implode('|', $item[$fieldName]);
                 } else {
                     $error = true;
                     $messages[] = iaLanguage::get('field_' . $fieldName) . ': ' . iaLanguage::get('error_url');
                     $invalidFields[] = $fieldName;
                 }
             }
         } elseif (in_array($field['type'], array(self::IMAGE, self::STORAGE, self::PICTURES)) && is_array($_FILES[$fieldName]['tmp_name']) && !empty($_FILES[$fieldName]['tmp_name'])) {
             if (!is_writable(IA_UPLOADS)) {
                 $error = true;
                 $messages[] = iaLanguage::get('error_directory_readonly');
             } else {
                 // run required field checks
                 if ($field['required'] && $field['required_checks']) {
                     eval($field['required_checks']);
                 } elseif ($field['required'] && empty($_FILES[$fieldName]['tmp_name'])) {
                     $error = true;
                     $messages[] = iaLanguage::getf('field_is_empty', array('field' => iaLanguage::get('field_' . $fieldName)));
                     $invalidFields[] = $fieldName;
                 }
                 // custom folder for uploaded images
                 if (!empty($field['folder_name'])) {
                     if (!is_dir(IA_UPLOADS . $field['folder_name'])) {
                         mkdir(IA_UPLOADS . $field['folder_name']);
                     }
                     $path = $field['folder_name'] . IA_DS;
                 } else {
                     $path = iaUtil::getAccountDir();
                 }
                 $item[$fieldName] = isset($data[$fieldName]) && $data[$fieldName] ? $data[$fieldName] : array();
                 // initialize class to work with images
                 $methodName = self::STORAGE == $field['type'] ? '_processFileField' : '_processImageField';
                 // process uploaded files
                 foreach ($_FILES[$fieldName]['tmp_name'] as $id => $tmp_name) {
                     if ($_FILES[$fieldName]['error'][$id]) {
                         continue;
                     }
                     // files limit exceeded or rewrite image value
                     if (self::IMAGE != $field['type'] && count($item[$fieldName]) >= $field['length']) {
                         break;
                     }
                     $file = array();
                     foreach ($_FILES[$fieldName] as $key => $value) {
                         $file[$key] = $_FILES[$fieldName][$key][$id];
                     }
                     $processing = self::$methodName($field, $file, $path);
                     // 0 - filename, 1 - error, 2 - textual error description
                     if (!$processing[1]) {
                         $fieldValue = array('title' => isset($data[$fieldName . '_title'][$id]) ? substr(trim($data[$fieldName . '_title'][$id]), 0, 100) : '', 'path' => $processing[0]);
                         if (self::IMAGE == $field['type']) {
                             $item[$fieldName] = $fieldValue;
                         } else {
                             $item[$fieldName][] = $fieldValue;
                         }
                     } else {
                         $error = true;
                         $messages[] = $processing[2];
                     }
                 }
             }
             // If already has images, append them.
             $item[$fieldName] = empty($item[$fieldName]) ? '' : serialize(array_merge($item[$fieldName]));
             // array_merge is used to reset numeric keys
         }
         if (isset($item[$fieldName])) {
             // process hook if field value exists
             $iaCore->startHook('phpParsePostAfterCheckField', array('field_name' => $fieldName, 'item' => &$item[$fieldName], 'value' => $field, 'error' => &$error, 'error_fields' => &$invalidFields, 'msg' => &$messages));
         }
     }
     return array($item, $error, $messages, implode(',', $invalidFields));
 }
示例#16
0
 protected function _preSaveEntry(array &$entry, array $data, $action)
 {
     $entry = array('name' => iaSanitize::alias(iaUtil::checkPostParam('name')), 'item' => iaUtil::checkPostParam('item'), 'default' => iaUtil::checkPostParam('default'), 'lang_values' => iaUtil::checkPostParam('lang_values'), 'text_default' => iaSanitize::html(iaUtil::checkPostParam('text_default')), 'type' => iaUtil::checkPostParam('type'), 'annotation' => iaUtil::checkPostParam('annotation'), 'fieldgroup_id' => (int) iaUtil::checkPostParam('fieldgroup_id'), 'text_length' => (int) iaUtil::checkPostParam('text_length', 255), 'length' => iaUtil::checkPostParam('length', false), 'title' => iaUtil::checkPostParam('title'), 'pages' => iaUtil::checkPostParam('pages', array()), 'required' => iaUtil::checkPostParam('required'), 'use_editor' => (int) iaUtil::checkPostParam('use_editor'), 'empty_field' => iaSanitize::html(iaUtil::checkPostParam('empty_field')), 'url_nofollow' => (int) iaUtil::checkPostParam('url_nofollow'), 'groups' => iaUtil::checkPostParam('groups'), 'searchable' => (int) iaUtil::checkPostParam('searchable'), 'adminonly' => (int) iaUtil::checkPostParam('adminonly'), 'for_plan' => (int) iaUtil::checkPostParam('for_plan'), 'required_checks' => iaUtil::checkPostParam('required_checks'), 'extra_actions' => iaUtil::checkPostParam('extra_actions'), 'link_to' => (int) iaUtil::checkPostParam('link_to'), 'values' => '', 'relation' => iaUtil::checkPostParam('relation', iaField::RELATION_REGULAR), 'parents' => isset($data['parents']) && is_array($data['parents']) ? $data['parents'] : array(), 'children' => isset($data['children']) && is_array($data['children']) ? $data['children'] : array(), 'status' => iaUtil::checkPostParam('status', iaCore::STATUS_ACTIVE));
     iaUtil::loadUTF8Functions('ascii', 'validation', 'bad');
     if (!$this->_iaDb->exists(iaDb::convertIds($entry['fieldgroup_id']), null, iaField::getTableGroups())) {
         $entry['fieldgroup_id'] = 0;
     }
     foreach ($this->_iaCore->languages as $code => $language) {
         if (!empty($entry['annotation'][$code])) {
             if (!utf8_is_valid($entry['annotation'][$code])) {
                 $entry['annotation'][$code] = utf8_bad_replace($entry['annotation'][$code]);
             }
         }
         if (!empty($entry['title'][$code])) {
             if (!utf8_is_valid($entry['title'][$code])) {
                 $entry['title'][$code] = utf8_bad_replace($entry['title'][$code]);
             }
         } else {
             $this->addMessage(iaLanguage::getf('field_is_empty', array('field' => $language['title'] . ' ' . iaLanguage::get('title'))), false);
             break;
         }
     }
     if (iaCore::ACTION_ADD == $action) {
         $entry['name'] = trim(strtolower(iaSanitize::paranoid($entry['name'])));
         if (empty($entry['name'])) {
             $this->addMessage('field_name_incorrect');
         }
     } else {
         unset($entry['name']);
     }
     $fieldTypes = $this->_iaDb->getEnumValues(iaField::getTable(), 'type');
     if ($fieldTypes['values'] && !in_array($entry['type'], $fieldTypes['values'])) {
         $this->addMessage('field_type_invalid');
     } else {
         if (!$entry['length']) {
             $entry['length'] = iaField::DEFAULT_LENGTH;
         }
         switch ($entry['type']) {
             case iaField::TEXT:
                 if (empty($entry['text_length'])) {
                     $entry['text_length'] = 255;
                 }
                 $entry['length'] = min(255, max(1, $entry['text_length']));
                 $entry['default'] = $entry['text_default'];
                 break;
             case iaField::TEXTAREA:
                 $entry['default'] = '';
                 break;
             case iaField::COMBO:
             case iaField::RADIO:
             case iaField::CHECKBOX:
                 if (!empty($data['values']) && is_array($data['values'])) {
                     $keys = array();
                     $lang_values = array();
                     $multiDefault = explode('|', iaUtil::checkPostParam('multiple_default'));
                     $_keys = iaUtil::checkPostParam('keys');
                     $_values = iaUtil::checkPostParam('values');
                     $_langValues = iaUtil::checkPostParam('lang_values');
                     foreach ($_keys as $index => $key) {
                         if (trim($key) == '') {
                             $key = $index + 1;
                             $_keys[$index] = $key;
                         }
                         if (isset($_values[$index]) && trim($_values[$index]) != '') {
                             $values[$key] = $_values[$index];
                             $keys[$key] = $key;
                         } else {
                             unset($_keys[$index], $_values[$index]);
                         }
                         if ($_langValues) {
                             foreach ($this->_iaCore->languages as $code => $language) {
                                 if ($code != $this->_iaCore->iaView->language) {
                                     if (!isset($_values[$index])) {
                                         unset($_langValues[$code][$index]);
                                     } elseif (!isset($_langValues[$code][$index]) || trim($_langValues[$code][$index]) == '') {
                                         $lang_values[$code][$key] = $values[$key];
                                     } else {
                                         $lang_values[$code][$key] = $_langValues[$code][$index];
                                     }
                                 }
                             }
                         }
                     }
                     // delete default values if not exists in values
                     foreach ($multiDefault as $index => $default) {
                         if (!in_array($default, $values)) {
                             unset($multiDefault[$index]);
                         } else {
                             $k = array_search($default, $values);
                             $multiDefault[$index] = $k;
                         }
                     }
                     $multiDefault = array_values($multiDefault);
                     if (iaField::CHECKBOX == $entry['type']) {
                         $multiDefault = implode(',', $multiDefault);
                     } elseif (isset($multiDefault[0])) {
                         // multiple default is available for checkboxes only
                         $_POST['multiple_default'] = $multiDefault = $multiDefault[0];
                     } else {
                         $_POST['multiple_default'] = $multiDefault = '';
                     }
                     $entry['default'] = $multiDefault;
                     $entry['keys'] = $keys;
                     $entry['values'] = $values;
                     $entry['lang_values'] = $lang_values;
                 } else {
                     $this->addMessage('one_value');
                 }
                 break;
             case iaField::STORAGE:
                 if (!empty($data['file_types'])) {
                     $entry['file_types'] = str_replace(' ', '', iaUtil::checkPostParam('file_types'));
                     $entry['length'] = (int) iaUtil::checkPostParam('max_files', 5);
                 } else {
                     $this->addMessage('error_file_type');
                 }
                 break;
             case iaField::DATE:
                 $entry['timepicker'] = (int) iaUtil::checkPostParam('timepicker');
                 break;
             case iaField::URL:
                 $entry['url_nofollow'] = (int) iaUtil::checkPostParam('url_nofollow');
                 break;
             case iaField::IMAGE:
                 $entry['length'] = 1;
                 $entry['image_height'] = (int) iaUtil::checkPostParam('image_height');
                 $entry['image_width'] = (int) iaUtil::checkPostParam('image_width');
                 $entry['thumb_height'] = (int) iaUtil::checkPostParam('thumb_height');
                 $entry['thumb_width'] = (int) iaUtil::checkPostParam('thumb_width');
                 $entry['file_prefix'] = iaUtil::checkPostParam('file_prefix');
                 $entry['resize_mode'] = iaUtil::checkPostParam('resize_mode');
                 break;
             case iaField::NUMBER:
                 $entry['length'] = (int) iaUtil::checkPostParam('number_length', 8);
                 $entry['default'] = iaUtil::checkPostParam('number_default');
                 break;
             case iaField::PICTURES:
                 $entry['length'] = (int) iaUtil::checkPostParam('pic_max_images', 5);
                 $entry['file_prefix'] = iaUtil::checkPostParam('pic_file_prefix');
                 $entry['image_height'] = (int) iaUtil::checkPostParam('pic_image_height');
                 $entry['image_width'] = (int) iaUtil::checkPostParam('pic_image_width');
                 $entry['thumb_height'] = (int) iaUtil::checkPostParam('pic_thumb_height');
                 $entry['thumb_width'] = (int) iaUtil::checkPostParam('pic_thumb_width');
                 $entry['resize_mode'] = iaUtil::checkPostParam('pic_resize_mode');
                 break;
             case iaField::TREE:
                 $parsedTree = $this->_parseTreeNodes(iaUtil::checkPostParam('nodes'));
                 $entry['values'] = $parsedTree[0];
                 $entry['tree_nodes'] = $parsedTree[1];
                 $entry['timepicker'] = (int) iaUtil::checkPostParam('multiple');
         }
         unset($entry['text_length'], $entry['text_default'], $entry['nodes'], $entry['multiple']);
     }
     if (!$entry['adminonly'] && empty($entry['pages']) && 'transactions' != $entry['item']) {
         $this->addMessage('mark_at_least_one_page');
     }
     $entry['required'] = (int) iaUtil::checkPostParam('required');
     if ($entry['required']) {
         $entry['required_checks'] = iaUtil::checkPostParam('required_checks');
     }
     $entry['extra_actions'] = iaUtil::checkPostParam('extra_actions');
     if ($entry['searchable']) {
         if (isset($data['show_as']) && $entry['type'] != iaField::NUMBER && in_array($data['show_as'], array(iaField::COMBO, iaField::RADIO, iaField::CHECKBOX))) {
             $entry['show_as'] = $data['show_as'];
         } elseif ($entry['type'] == iaField::NUMBER && !empty($data['_values'])) {
             $entry['sort_order'] = 'asc' == $data['sort_order'] ? $data['sort_order'] : 'desc';
             $entry['_numberRangeForSearch'] = $data['_values'];
         }
     }
     $this->_iaCore->startHook('phpAdminFieldsEdit', array('field' => &$entry));
     return !$this->getMessages();
 }
示例#17
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();
 }
示例#18
0
 private function _getJsonUrl(array $params)
 {
     iaUtil::loadUTF8Functions('ascii', 'utf8_to_ascii');
     $name = $params['name'];
     $name = utf8_is_ascii($name) ? $name : utf8_to_ascii($name);
     $name = preg_replace('#[^a-z0-9-_]#iu', '', $name);
     $url = $params['url'];
     $url = utf8_is_ascii($url) ? $url : utf8_to_ascii($url);
     $url = preg_replace('#[^a-z0-9-_]#iu', '', $url);
     $url = $url ? $url : $name;
     if (is_numeric($params['parent']) && $params['parent']) {
         $parentPage = $this->getById($params['parent']);
         $parentAlias = empty($parentPage['alias']) ? $parentPage['name'] . IA_URL_DELIMITER : $parentPage['alias'];
         $url = $parentAlias . (IA_URL_DELIMITER == substr($parentAlias, -1, 1) ? '' : IA_URL_DELIMITER) . $url;
     }
     $url .= $params['ext'];
     $exists = $this->_iaDb->exists('`alias` = :url AND `name` != :name', array('url' => $url, 'name' => $name));
     $url = IA_URL . $url;
     return array('url' => $url, 'exists' => $exists);
 }
    $iaView->assign($output);
}
if (iaView::REQUEST_HTML == $iaView->getRequestType()) {
    if (iaCore::ACTION_EDIT == $pageAction && isset($iaCore->requestPath[0])) {
        if (iaCore::ACTION_EDIT == $pageAction && !isset($iaCore->requestPath[0])) {
            return iaView::errorPage(iaView::ERROR_NOT_FOUND);
        }
        iaBreadcrumb::replaceEnd(iaLanguage::get('edit'));
        $guestbook = array('status' => iaCore::STATUS_ACTIVE);
        if (iaCore::ACTION_EDIT == $pageAction) {
            $id = (int) $iaCore->requestPath[0];
            $guestbook = $iaDb->row(iaDb::ALL_COLUMNS_SELECTION, iaDb::convertIds($id));
        }
        $guestbook = array('id' => isset($id) ? $id : 0, 'author_name' => iaUtil::checkPostParam('author_name', $guestbook), 'email' => iaUtil::checkPostParam('email', $guestbook), 'member_id' => iaUtil::checkPostParam('member_id', $guestbook), 'author_url' => iaUtil::checkPostParam('author_url', $guestbook), 'body' => iaUtil::checkPostParam('body', $guestbook), 'status' => iaUtil::checkPostParam('status', $guestbook), 'avatar' => iaUtil::checkPostParam('avatar', $guestbook), 'date' => iaUtil::checkPostParam('date', $guestbook));
        if (isset($_POST['save'])) {
            iaUtil::loadUTF8Functions('ascii', 'validation', 'bad');
            $error = false;
            $messages = array();
            $guestbook['avatar'] = iaSanitize::html($guestbook['avatar']);
            if (utf8_is_valid($guestbook['author_name'])) {
                $guestbook['author_name'] = utf8_bad_replace($guestbook['author_name']);
            }
            if (isset($_FILES['image']['tmp_name']) && $_FILES['image']['tmp_name']) {
                $iaPicture = $iaCore->factory('picture');
                $info = array('image_width' => 500, 'image_height' => 500, 'thumb_width' => 150, 'thumb_height' => 150, 'resize_mode' => iaPicture::CROP);
                if ($image = $iaPicture->processImage($_FILES['image'], '', iaUtil::generateToken(), $info)) {
                    empty($guestbook['avatar']) || $iaPicture->delete($guestbook['avatar']);
                    // already has an assigned image
                    $guestbook['avatar'] = $image;
                }
            }