public function ReadParameters() { parent::ReadParameters(); $sQueryId = utils::ReadParam('query', null, true); $sFields = utils::ReadParam('fields', null, true, 'raw_data'); if (($sFields === null || $sFields === '') && $sQueryId === null) { throw new BulkExportMissingParameterException('fields'); } else { if ($sQueryId !== null && $sQueryId !== null) { $oSearch = DBObjectSearch::FromOQL('SELECT QueryOQL WHERE id = :query_id', array('query_id' => $sQueryId)); $oQueries = new DBObjectSet($oSearch); if ($oQueries->Count() > 0) { $oQuery = $oQueries->Fetch(); if ($sFields === null || $sFields === '') { // No 'fields' parameter supplied, take the fields from the query phrasebook definition $sFields = trim($oQuery->Get('fields')); if ($sFields === '') { throw new BulkExportMissingParameterException('fields'); } } } else { throw BulkExportException('Invalid value for the parameter: query. There is no Query Phrasebook with id = ' . $sQueryId, Dict::Format('Core:BulkExport:InvalidParameter_Query', $sQueryId)); } } } $aFields = explode(',', $sFields); $this->aStatusInfo['fields'] = array(); foreach ($aFields as $sField) { // Trim the values since it's too temping to write: fields=name, first_name, org_name instead of fields=name,first_name,org_name $this->aStatusInfo['fields'][] = trim($sField); } }
public function ReadParameters() { parent::ReadParameters(); $sQueryId = utils::ReadParam('query', null, true); $sFields = utils::ReadParam('fields', null, true, 'raw_data'); if (($sFields === null || $sFields === '') && $sQueryId === null) { throw new BulkExportMissingParameterException('fields'); } else { if ($sQueryId !== null && $sQueryId !== null) { $oSearch = DBObjectSearch::FromOQL('SELECT QueryOQL WHERE id = :query_id', array('query_id' => $sQueryId)); $oQueries = new DBObjectSet($oSearch); if ($oQueries->Count() > 0) { $oQuery = $oQueries->Fetch(); if ($sFields === null || $sFields === '') { // No 'fields' parameter supplied, take the fields from the query phrasebook definition $sFields = trim($oQuery->Get('fields')); if ($sFields === '') { throw new BulkExportMissingParameterException('fields'); } } } else { throw BulkExportException('Invalid value for the parameter: query. There is no Query Phrasebook with id = ' . $sQueryId, Dict::Format('Core:BulkExport:InvalidParameter_Query', $sQueryId)); } } } // Interpret (and check) the list of fields // $aSelectedClasses = $this->oSearch->GetSelectedClasses(); $aAliases = array_keys($aSelectedClasses); $aAuthorizedClasses = array(); foreach ($aSelectedClasses as $sAlias => $sClassName) { if (UserRights::IsActionAllowed($sClassName, UR_ACTION_BULK_READ) == UR_ALLOWED_YES) { $aAuthorizedClasses[$sAlias] = $sClassName; } } $aFields = explode(',', $sFields); $this->aStatusInfo['fields'] = array(); foreach ($aFields as $sFieldSpec) { // Trim the values since it's natural to write: fields=name, first_name, org_name instead of fields=name,first_name,org_name $sExtendedAttCode = trim($sFieldSpec); if (preg_match('/^([^\\.]+)\\.(.+)$/', $sExtendedAttCode, $aMatches)) { $sAlias = $aMatches[1]; $sAttCode = $aMatches[2]; } else { $sAlias = reset($aAliases); $sAttCode = $sExtendedAttCode; } if (!array_key_exists($sAlias, $aSelectedClasses)) { throw new Exception("Invalid alias '{$sAlias}' for the column '{$sExtendedAttCode}'. Availables aliases: '" . implode("', '", $aAliases) . "'"); } $sClass = $aSelectedClasses[$sAlias]; if (!array_key_exists($sAlias, $aAuthorizedClasses)) { throw new Exception("You do not have enough permissions to bulk read data of class '{$sClass}' (alias: {$sAlias})"); } if ($this->bLocalizeOutput) { try { $sLabel = MetaModel::GetLabel($sClass, $sAttCode); } catch (Exception $e) { throw new Exception("Wrong field specification '{$sFieldSpec}': " . $e->getMessage()); } } else { $sLabel = $sAttCode; } if (count($aAuthorizedClasses) > 1) { $sColLabel = $sAlias . '.' . $sLabel; } else { $sColLabel = $sLabel; } $this->aStatusInfo['fields'][] = array('sFieldSpec' => $sExtendedAttCode, 'sAlias' => $sAlias, 'sClass' => $sClass, 'sAttCode' => $sAttCode, 'sLabel' => $sLabel, 'sColLabel' => $sColLabel); } }