function smarty_function_preventCsrf($params, &$smarty)
{
    // support several post forms in the page
    $calledTimes = 0;
    if (!isset($_SESSION['prevent_csrf']) || !is_array($_SESSION['prevent_csrf'])) {
        $_SESSION['prevent_csrf'] = array();
    }
    $count = count($_SESSION['prevent_csrf']);
    if ($count > 30) {
        $_SESSION['prevent_csrf'] = isset($_SESSION['prevent_csrf'][$count - 1]) ? array($_SESSION['prevent_csrf'][$count - 1]) : array();
    }
    $_SESSION['prevent_csrf'][] = $token = iaUtil::generateToken();
    $calledTimes++;
    return '<input type="hidden" name="prevent_csrf" value="' . $token . '" />';
}
Example #2
0
 if (!iaValidate::isEmail($email)) {
     $error = true;
     $messages[] = iaLanguage::get('error_email_incorrect');
 }
 if (!$error) {
     $member = $iaDb->row_bind(iaDb::ALL_COLUMNS_SELECTION, '`email` = :email', array('email' => $email));
     if (empty($member)) {
         $error = true;
         $messages[] = iaLanguage::get('error_no_member_email');
     }
     if (false !== $code && $member['sec_key'] != $code) {
         $error = true;
         $messages[] = iaLanguage::get('confirmation_code_incorrect');
     }
     if (!$error && false === $code) {
         $token = iaUtil::generateToken();
         $confirmationUrl = IA_URL . 'forgot/?email=' . $email . '&code=' . $token;
         $iaMailer = $iaCore->factory('mailer');
         $iaMailer->loadTemplate('password_restoration');
         $iaMailer->addAddress($member['email'], $member['fullname']);
         $iaMailer->setReplacements(array('fullname' => $member['fullname'], 'url' => $confirmationUrl, 'code' => $token, 'email' => $member['email']));
         $iaMailer->send();
         $messages[] = iaLanguage::get('restore_pass_confirm');
         $iaDb->update(array('id' => $member['id'], 'sec_key' => $token), 0, 0, iaUsers::getTable());
         $form = 'confirm';
     } elseif (!$error && $code) {
         $error = false;
         $messages[] = iaLanguage::get('new_password_sent');
         $iaUsers->changePassword($member);
         $form = false;
     }
Example #3
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;
 }
Example #4
0
 $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);
     if ($result) {
         $id = iaCore::ACTION_ADD == $pageAction ? $result : $id;
         $iaBlog->saveTags($id, $_POST['tags']);
         $iaView->setMessages(iaLanguage::get('saved'), iaView::SUCCESS);
         iaUtil::go_to($baseUrl . sprintf('%d-%s', $id, $entry['alias']));
     } else {
         $messages[] = iaLanguage::get('db_error');
Example #5
0
 protected function _setDefaultValues(array &$entry)
 {
     $entry = array('name' => 'menu_' . iaUtil::generateToken(5), 'position' => '', 'classname' => '', 'status' => iaCore::STATUS_ACTIVE, 'sticky' => false, 'title' => '', 'tpl' => iaBlock::DEFAULT_MENU_TEMPLATE, 'type' => iaBlock::TYPE_MENU);
     $entry['header'] = $entry['collapsible'] = $entry['collapsed'] = false;
 }
Example #6
0
 protected static function _generateFileName($filename = '', $prefix = '', $glue = true)
 {
     if (empty($filename)) {
         return $prefix . iaUtil::generateToken();
     }
     $extension = '';
     if (false !== strpos($filename, '.')) {
         $extension = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
         $filename = $prefix . pathinfo($filename, PATHINFO_FILENAME);
         if (false !== strpos($filename, '.')) {
             $filename = str_replace(array('.', '~'), '-', $filename);
         }
     }
     $filename = iaSanitize::alias($filename) . '_' . iaUtil::generateToken(5);
     return $glue ? $filename . '.' . $extension : array($filename, $extension);
 }
 public function _parserStart($parser, $name, $attributes)
 {
     $this->_inTag = $name;
     $this->_attributes = $attributes;
     $this->_currentPath[] = $name;
     if (in_array($this->_inTag, array(self::TYPE_PACKAGE, self::TYPE_PLUGIN)) && isset($attributes['name'])) {
         $this->itemData['name'] = $attributes['name'];
         $this->itemData['type'] = $name == self::TYPE_PLUGIN ? self::TYPE_PLUGIN : self::TYPE_PACKAGE;
     }
     if ('usergroup' == $name) {
         $this->itemData['usergroups'][] = array('extras' => $this->itemData['name'], 'name' => $this->itemData['name'] . '_' . $this->_attr('name', iaUtil::generateToken()), 'title' => $attributes['title'], 'assignable' => $this->_attr('assignable', false), 'visible' => $this->_attr('visible', true), 'configs' => array(), 'permissions' => array());
     }
 }
Example #8
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;
 }
Example #9
0
 protected function _preSaveEntry(array &$entry, array $data, $action)
 {
     parent::_preSaveEntry($entry, $data, $action);
     iaUtil::loadUTF8Functions('ascii', 'validation', 'bad', 'utf8_to_ascii');
     if (!utf8_is_valid($entry['title'])) {
         $entry['title'] = utf8_bad_replace($entry['title']);
     }
     if (empty($entry['title'])) {
         $this->addMessage('title_is_empty');
     }
     if (!utf8_is_valid($entry['body'])) {
         $entry['body'] = utf8_bad_replace($entry['body']);
     }
     if (empty($entry['body'])) {
         $this->addMessage(iaLanguage::getf('field_is_empty', array('field' => iaLanguage::get('body'))));
     }
     if (empty($entry['date_added'])) {
         $entry['date_added'] = date(iaDb::DATETIME_FORMAT);
     }
     $entry['alias'] = $this->getHelper()->titleAlias(empty($entry['alias']) ? $entry['title'] : $entry['alias']);
     if (!empty($data['owner'])) {
         if ($memberId = $this->_iaCore->iaDb->one_bind('id', '`username` = :name OR `fullname` = :name', array('name' => iaSanitize::sql($_POST['owner'])), iaUsers::getTable())) {
             $entry['member_id'] = $memberId;
         } else {
             $this->addMessage('incorrect_owner_specified');
         }
     } else {
         $entry['member_id'] = iaUsers::getIdentity()->id;
     }
     if ($this->getMessages()) {
         return false;
     }
     unset($entry['owner']);
     if (isset($_FILES['image']['tmp_name']) && $_FILES['image']['tmp_name']) {
         $iaPicture = $this->_iaCore->factory('picture');
         $info = array('image_width' => 1000, 'image_height' => 750, 'thumb_width' => 250, 'thumb_height' => 250, 'resize_mode' => iaPicture::CROP);
         if ($image = $iaPicture->processImage($_FILES['image'], iaUtil::getAccountDir(), iaUtil::generateToken(), $info)) {
             empty($entry['image']) || $iaPicture->delete($entry['image']);
             // already has an assigned image
             $entry['image'] = $image;
         }
     }
     unset($entry['tags']);
     return true;
 }
Example #10
0
 private function _generateUserName(array $memberInfo)
 {
     $email = $memberInfo['email'];
     // here we can be pretty sure that email contains @
     $result = substr($email, 0, strpos($email, '@'));
     if ($this->getInfo($result, 'username')) {
         $this->iaCore->factory('util');
         $result = $result . '_' . iaUtil::generateToken(5);
     }
     return $result;
 }
Example #11
0
 protected function _processAdminPages(array $entries)
 {
     $this->iaDb->setTable('admin_pages');
     $this->iaDb->delete(iaDb::convertIds($this->itemData['name'], 'extras'));
     foreach ($entries as $title => $entry) {
         $entry['group'] = $this->_lookupGroupId($entry['group']);
         $entry['order'] = (int) (is_null($entry['order']) ? $this->iaDb->one_bind('MAX(`order`) + 5', '`group` = :group', $entry) : $entry['order']);
         empty($entry['group']) || ($this->_menuGroups[] = $entry['group']);
         empty($entry['name']) && ($entry['attr'] = iaUtil::generateToken(8));
         $this->iaDb->insert($entry);
         $this->_addPhrase('page_title_' . ($entry['name'] ? $entry['name'] : $entry['attr']), $title, iaLanguage::CATEGORY_ADMIN);
     }
     $this->iaDb->resetTable();
 }
Example #12
0
 private function _saveMenus($entryName, $menus)
 {
     $iaAcl = $this->_iaCore->factory('acl');
     if ($iaAcl->checkAccess('admin_page:add', 'menus')) {
         $iaDb =& $this->_iaDb;
         $iaBlock = $this->_iaCore->factory('block', iaCore::ADMIN);
         $iaDb->setTable($iaBlock::getMenusTable());
         $menusList = $iaDb->all(array('id'), iaDb::convertIds('menu', 'type'), null, null, $iaBlock::getTable());
         foreach ($menusList as $item) {
             $items = array();
             $add = false;
             if (in_array($item['id'], $menus)) {
                 if (!$iaDb->exists('`menu_id` = :menu AND `page_name` = :page', array('menu' => $item['id'], 'page' => $entryName))) {
                     $items[] = array('parent_id' => 0, 'menu_id' => $item['id'], 'el_id' => $this->getEntryId() . '_' . iaUtil::generateToken(5), 'level' => 0, 'page_name' => $entryName);
                     $add = true;
                 }
             } else {
                 $iaDb->delete('`menu_id` = :menu AND `page_name` = :page', null, array('menu' => $item['id'], 'page' => $entryName));
             }
             if ($add) {
                 $iaDb->insert($items);
             }
             $this->_iaCore->iaCache->remove('menu_' . $item['id'] . '.inc');
         }
         $iaDb->resetTable();
     }
 }
Example #13
0
 public function install()
 {
     $iaDb =& $this->iaDb;
     $this->iaCore->startHook('phpExtrasInstallBefore', array('extra' => $this->itemData['name']));
     $extrasList = array();
     $array = $iaDb->all(array('id', 'name', 'version'), "`status` = 'active'", null, null, self::getTable());
     foreach ($array as $item) {
         $extrasList[$item['name']] = $item;
     }
     // TODO: check for relations and deactivate all needed extras
     if ($this->itemData['requirements']) {
         $messages = array();
         foreach ($this->itemData['requirements'] as $requirement) {
             if ($requirement['min'] || $requirement['max']) {
                 $min = $max = false;
                 if (isset($extrasList[$requirement['name']])) {
                     $info = $extrasList[$requirement['name']];
                     $min = $requirement['min'] ? version_compare($requirement['min'], $info['version'], '<=') : true;
                     $max = $requirement['max'] ? version_compare($requirement['max'], $info['version'], '>=') : true;
                 }
                 if (!$max || !$min) {
                     $ver = '';
                     if ($requirement['min']) {
                         $ver .= $requirement['min'];
                     }
                     if ($requirement['max']) {
                         if ($requirement['min']) {
                             $ver .= '-';
                         }
                         $ver .= $requirement['max'];
                     }
                     $values = array(':extra' => $requirement['type'], ':name' => $requirement['name'], ':version' => $ver);
                     $messages[] = iaLanguage::getf('required_extras_error', $values);
                     $this->error = true;
                 } else {
                     // TODO: add relations in database to deactivate when parent is uninstalled
                 }
             }
         }
         if ($this->error) {
             $this->setMessage(implode('<br />', $messages));
             return false;
         }
     }
     $this->uninstall($this->itemData['name']);
     if (false !== stristr('update', $this->itemData['name'])) {
         $this->isUpdate = true;
     }
     $this->iaCore->factory('util');
     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']) {
                     $iaDb->setTable('items_pages');
                     foreach ($this->itemData['items'] as $item) {
                         $iaDb->insert(array('page_name' => $page['name'], 'item' => $item['item']));
                     }
                     $iaDb->resetTable();
                 }
                 $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));
                 if ($title) {
                     foreach ($this->iaCore->languages as $code => $value) {
                         iaLanguage::addPhrase('page_title_' . $page['name'], $title, $code, $this->itemData['name'], iaLanguage::CATEGORY_PAGE, false);
                     }
                 }
                 // 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();
                 }
                 if ($contents) {
                     foreach ($this->iaCore->languages as $code => $value) {
                         iaLanguage::addPhrase('page_content_' . $page['name'], $contents, $code, $this->itemData['name'], iaLanguage::CATEGORY_PAGE, false);
                     }
                 }
                 $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['user_groups']) {
         $iaAcl = $this->iaCore->factory('acl');
         $iaDb->setTable(iaUsers::getUsergroupsTable());
         foreach ($this->itemData['user_groups'] as $item) {
             if (!$iaDb->exists('`name` = :name', array('name' => $item['name']))) {
                 $configs = $item['configs'];
                 $permissions = $item['permissions'];
                 $groupId = $iaAcl->obtainFreeId();
                 $data = array('id' => $groupId, 'extras' => $item['extras'], 'name' => $item['name'], 'system' => true, 'assignable' => $item['assignable'], 'visible' => $item['visible']);
                 $iaDb->insert($data);
                 // update language records
                 foreach ($this->iaCore->languages as $iso => $title) {
                     iaLanguage::addPhrase('usergroup_' . $item['name'], $item['title'], $iso);
                 }
                 $iaDb->setTable('config_custom');
                 $iaDb->delete("`type` = 'group' AND `type_id` = '{$groupId}'");
                 foreach ($configs as $config) {
                     $data = array('name' => $config['name'], 'value' => $config['value'], 'type' => 'group', 'type_id' => $groupId);
                     $iaDb->insert($data);
                 }
                 $iaDb->resetTable();
                 $iaDb->setTable('acl_privileges');
                 $iaDb->delete("`type` = 'group' AND `type_id` = '{$groupId}'");
                 foreach ($permissions as $permission) {
                     $data = array('object' => $permission['object'], 'object_id' => $permission['object_id'], 'action' => $permission['action'], 'access' => $permission['access'], 'type' => 'group', 'type_id' => $groupId);
                     $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())) {
                 iaLanguage::addPhrase('fieldgroup_' . $item['name'], $item['title'], null, $this->itemData['name'], iaLanguage::CATEGORY_COMMON, false);
             }
             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;
                 if ($item['title']) {
                     iaLanguage::addPhrase('field_' . $item['name'], $item['title'], null, $this->itemData['name'], iaLanguage::CATEGORY_COMMON, false);
                 }
                 unset($item['group'], $item['title']);
                 if (is_array($item['numberRangeForSearch'])) {
                     foreach ($item['numberRangeForSearch'] as $num) {
                         iaLanguage::addPhrase('field_' . $item['name'] . '_range_' . $num, $num, null, $this->itemData['name']);
                     }
                 }
                 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) {
                         iaLanguage::addPhrase(sprintf('field_%s_%s', $item['name'], $key), $value, null, $this->itemData['name'], iaLanguage::CATEGORY_COMMON, false);
                     }
                     if ($item['default']) {
                         // TODO: multiple default values for checkboxes should be implemented
                         if (in_array($item['default'], array_keys($item['values']))) {
                             $item['default'] = $item['default'];
                         } else {
                             $item['default'] = array_search($item['default'], $item['values']);
                         }
                     }
                     $item['values'] = implode(',', array_keys($item['values']));
                 } else {
                     $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;
 }
Example #14
0
<?php

//##copyright##
if (iaView::REQUEST_HTML == $iaView->getRequestType()) {
    // affiliate member id
    $memberId = isset($iaCore->requestPath[0]) ? (int) $iaCore->requestPath[0] : 0;
    // affiliate product id used for tracking
    $productId = isset($iaCore->requestPath[1]) ? (int) $iaCore->requestPath[1] : 0;
    // check referer
    $visitorReferrer = getenv('HTTP_REFERER');
    if ($memberId) {
        $iaVisitor = $iaCore->factoryPackage('visitor', IA_CURRENT_PACKAGE);
        // get unique tracking ID for a visitor in case it's not set
        $trackingSalt = isset($_COOKIE['IA_AFF_TRACKING']) ? $_COOKIE['IA_AFF_TRACKING'] : $memberId . iaUtil::generateToken(20);
        // update tracking record
        $iaVisitor->updateTrackingRecords($trackingSalt, $memberId, $productId, $visitorReferrer);
    }
    // redirect to the page
    $redirectUrl = $iaCore->get('aff_incoming_page', IA_URL);
    if ($productId) {
        $redirectUrl = $iaDb->one('`url`', iaDb::convertIds($productId), 'affiliates_products');
    }
    iaUtil::go_to($redirectUrl);
}
 $entry = array('date' => date(iaDb::DATETIME_FORMAT), 'ip' => iaUtil::getIp(), 'member_id' => iaUsers::getIdentity()->id, 'item' => $itemName, 'item_id' => $itemId, 'item_title' => $itemData['title'] ? $itemData['title'] : $itemData['venue_title'], 'item_url' => $itemUrl, 'type' => $_POST['type'], 'status' => 'pending', 'notes' => null);
 $message = null;
 switch ($_POST['type']) {
     case 'manual':
         $entry['name'] = empty($_POST['name']) ? null : $_POST['name'];
         $entry['email'] = empty($_POST['email']) ? null : $_POST['email'];
         $entry['phone'] = empty($_POST['phone']) ? null : $_POST['phone'];
         $entry['job_title'] = empty($_POST['job_title']) ? null : $_POST['job_title'];
         $message = iaLanguage::get('your_request_saved');
         break;
     case 'email':
         if (!$iaCore->get('cl_enable_email_approval')) {
             return;
         }
         if (!empty($itemData['email'])) {
             $key = iaUtil::generateToken();
             $iaDb->setTable('claim_pending_email_keys');
             if ($rowId = $iaDb->one_bind(iaDb::ID_COLUMN_SELECTION, '`item` = :item AND `item_id` = :id', array('item' => $itemName, 'id' => $itemId))) {
                 $iaDb->update(array('date' => date(iaDb::DATETIME_FORMAT), 'key' => $key, 'member_id' => iaUsers::getIdentity()->id), iaDb::convertIds($rowId));
             } else {
                 $keyEntry = array('date' => date(iaDb::DATETIME_FORMAT), 'item' => $itemName, 'item_id' => $itemId, 'key' => $key, 'member_id' => iaUsers::getIdentity()->id);
                 $iaDb->insert($keyEntry);
             }
             $iaDb->resetTable();
             $link = $itemUrl . '?ownership-key=' . $key;
             $iaMailer = $iaCore->factory('mailer');
             $iaMailer->addAddress($itemData['email']);
             $iaMailer->loadTemplate('ownership_email_approval');
             $iaMailer->setReplacements(array('email' => $itemData['email'], 'url' => $link));
             $result = $iaMailer->send();
             $message = $result ? iaLanguage::getf('confirmation_link_sent_with_email', array('email' => $itemData['email'])) : iaLanguage::get('unable_to_send_confirmation_link');
 * Subrion is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Subrion. If not, see <http://www.gnu.org/licenses/>.
 *
 *
 * @link http://www.subrion.org/
 *
 ******************************************************************************/
if (isset($action) && in_array($action, array('canceled', 'completed'))) {
    if ('completed' == $action) {
        $transaction = $temp_transaction;
        if (!$error) {
            $transaction['email'] = iaUsers::getIdentity()->email;
            $transaction['reference_id'] = iaUtil::generateToken();
            $transaction['gateway_name'] = 'bankwiretransfer';
            $user = explode(' ', iaUsers::getIdentity()->fullname);
            $order['txn_id'] = $transaction['reference_id'];
            $order['payment_status'] = iaLanguage::get('pending');
            $order['payer_email'] = $transaction['email'];
            $order['payment_gross'] = $transaction['amount'];
            $order['payment_date'] = $transaction['date'];
            $order['mc_currency'] = $transaction['currency'];
            $order['first_name'] = $user[0];
            $order['last_name'] = isset($user[1]) ? $user[1] : '';
        }
    }
}