public static getAcoFieldsList ( $pageName = null, $itemName = null, $aWhere = '', $aAllFieldInfo = false, $aItemData = false, $params = [] ) |
public static function getAcoFieldsList($pageName = null, $itemName = null, $aWhere = '', $aAllFieldInfo = false, $aItemData = false, $params = array())
{
$iaCore = iaCore::instance();
$iaView =& $iaCore->iaView;
$iaAcl = $iaCore->factory('acl');
$pageName = $pageName ? $pageName : $iaView->name();
$itemName = $itemName ? $itemName : $iaView->get('extras');
$selection = 'f.' . ($aAllFieldInfo || $pageName == 'admin' ? iaDb::ALL_COLUMNS_SELECTION : '`name`');
if (isset($params['selection']) && $params['selection']) {
$selection = $params['selection'];
}
$sql = "SELECT {$selection} ";
if (iaCore::ADMIN == $pageName) {
$aAllFieldInfo = true;
$sql .= "FROM `" . self::getTable(true) . "` f " . "WHERE f.`status` = 'active' AND f.`item` = '{$itemName}' " . ($aWhere ? ' AND ' . $aWhere : '');
} elseif ('all' == $pageName) {
$sql .= "FROM `" . self::getTable(true) . "` f " . "WHERE " . "f.`status` = 'active' AND " . "f.`item` = '{$itemName}' AND " . "f.`adminonly` = 0 " . ($aWhere ? ' AND ' . $aWhere : '');
$sql .= $aItemData['sponsored_plan_id'] && (!$aItemData || $aItemData['sponsored']) ? " AND (`plans`='' OR FIND_IN_SET('{$aItemData['sponsored_plan_id']}', `plans`)) " : " AND `plans`='' ";
} else {
$sql .= 'FROM `' . $iaCore->iaDb->prefix . self::getTablePages() . '` fp ' . 'LEFT JOIN `' . $iaCore->iaDb->prefix . self::getTable() . '` f ON (fp.`field_id` = f.`id`) ' . "WHERE fp.`page_name` = '{$pageName}' AND f.`status` = 'active' AND f.`item` = '{$itemName}' AND f.`adminonly` = 0 " . ($aWhere ? ' AND ' . $aWhere : '');
$sql .= !empty($aItemData['sponsored_plan_id']) && (!$aItemData || $aItemData['sponsored']) ? " AND (`plans`='' OR FIND_IN_SET('{$aItemData['sponsored_plan_id']}', `plans`)) " : " AND `plans`='' ";
}
$sql .= 'ORDER BY ' . (empty($params['order']) ? 'f.`order`' : $params['order']);
$rows = $iaCore->iaDb->getAll($sql);
$fieldNames = array();
foreach ($rows as $key => $entry) {
if (isset($entry['name']) && $entry['name']) {
if ($iaAcl->checkAccess('field', $itemName . '_' . $entry['name'])) {
$fieldNames[$entry['id']] = $entry['name'];
continue;
}
}
unset($rows[$key]);
}
self::_handleRelations($itemName, $fieldNames, $rows);
if ($aAllFieldInfo) {
return $rows;
}
$fields = array();
if ($rows) {
foreach ($rows as $row) {
$fields[] = $row['name'];
}
}
return $fields;
}
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(); }