本文整理汇总了PHP中DBObjectSet::Fetch方法的典型用法代码示例。如果您正苦于以下问题:PHP DBObjectSet::Fetch方法的具体用法?PHP DBObjectSet::Fetch怎么用?PHP DBObjectSet::Fetch使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DBObjectSet
的用法示例。
在下文中一共展示了DBObjectSet::Fetch方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: ComputeSLT
/**
* Determines the shortest SLT, for this ticket, for the given metric. Returns null is no SLT was found
* @param string $sMetric Type of metric 'TTO', 'TTR', etc as defined in the SLT class
* @return hash Array with 'SLT' => name of the SLT selected, 'value' => duration in seconds of the SLT metric, null if no SLT applies to this ticket
*/
protected static function ComputeSLT($oTicket, $sMetric = 'TTO')
{
$iDeadline = null;
if (MetaModel::IsValidClass('SLT')) {
$sType = get_class($oTicket);
if ($sType == 'Incident') {
$sRequestType = 'incident';
} else {
$sRequestType = $oTicket->Get('request_type');
}
$aArgs = $oTicket->ToArgs();
$aArgs['metric'] = $sMetric;
$aArgs['request_type'] = $sRequestType;
//echo "<p>Managing:".$sMetric."-".$this->Get('request_type')."-".$this->Get('importance')."</p>\n";
$oSLTSet = new DBObjectSet(DBObjectSearch::FromOQL(RESPONSE_TICKET_SLT_QUERY), array(), $aArgs);
$iMinDuration = PHP_INT_MAX;
$sSLTName = '';
while ($oSLT = $oSLTSet->Fetch()) {
$iDuration = (int) $oSLT->Get('value');
$sUnit = $oSLT->Get('unit');
switch ($sUnit) {
case 'days':
$iDuration = $iDuration * 24;
// 24 hours in 1 days
// Fall though
// 24 hours in 1 days
// Fall though
case 'hours':
$iDuration = $iDuration * 60;
// 60 minutes in 1 hour
// Fall though
// 60 minutes in 1 hour
// Fall though
case 'minutes':
$iDuration = $iDuration * 60;
}
if ($iDuration < $iMinDuration) {
$iMinDuration = $iDuration;
$sSLTName = $oSLT->GetName();
}
}
if ($iMinDuration == PHP_INT_MAX) {
$iDeadline = null;
} else {
// Store $sSLTName to keep track of which SLT has been used
$iDeadline = $iMinDuration;
}
}
return $iDeadline;
}
示例2: AfterDatabaseCreation
public static function AfterDatabaseCreation(Config $oConfiguration, $sPreviousVersion, $sCurrentVersion)
{
// Delete all Triggers corresponding to a no more valid class
$oSearch = new DBObjectSearch('TriggerOnObject');
$oSet = new DBObjectSet($oSearch);
$oChange = null;
while ($oTrigger = $oSet->Fetch()) {
if (!MetaModel::IsValidClass($oTrigger->Get('target_class'))) {
if ($oChange == null) {
// Create the change for its first use
$oChange = new CMDBChange();
$oChange->Set("date", time());
$oChange->Set("userinfo", "Uninstallation");
$oChange->DBInsert();
}
$oTrigger->DBDeleteTracked($oChange);
}
}
}
示例3: CreateTicket
/**
* Create a User Request ticket from the basic information retrieved from an email
* @param string $sSenderEmail eMail address of the sender (From), used to lookup a contact in iTop
* @param string $sSubject eMail's subject, will be turned into the title of the ticket
* @param string $sBody Body of the email, will be fitted into the ticket's description
* @return UserRequest The created ticket, or null if the creation failed for some reason...
*/
function CreateTicket($sSenderEmail, $sSubject, $sBody)
{
$oTicket = null;
try {
$oContactSearch = new DBObjectSearch('Contact');
// Can be either a Person or a Team, but must be a valid Contact
$oContactSearch->AddCondition('email', $sSenderEmail, '=');
$oSet = new DBObjectSet($oContactSearch);
if ($oSet->Count() == 1) {
$oContact = $oSet->Fetch();
$oOrganization = MetaModel::GetObject('Organization', $oContact->Get('org_id'));
$oTicket = new UserRequest();
$oTicket->Set('title', $sSubject);
$oTicket->Set('description', $sBody);
$oTicket->Set('org_id', $oOrganization->GetKey());
$oTicket->Set('caller_id', $oContact->GetKey());
$oTicket->Set('impact', DEFAULT_IMPACT);
$oTicket->Set('urgency', DEFAULT_URGENCY);
$oTicket->Set('product', DEFAULT_PRODUCT);
$oTicket->Set('service_id', DEFAULT_SERVICE_ID);
// Can be replaced by a search for a valid service for this 'org_id'
$oTicket->Set('servicesubcategory_id', DEFAULT_SUBSERVICE_ID);
// Same as above...
$oTicket->Set('workgroup_id', DEFAULT_WORKGROUP_ID);
// Same as above...
// Record the change information about the object
$oMyChange = MetaModel::NewObject("CMDBChange");
$oMyChange->Set("date", time());
$sUserString = $oContact->GetName() . ', submitted by email';
$oMyChange->Set("userinfo", $sUserString);
$iChangeId = $oMyChange->DBInsert();
$oTicket->DBInsertTracked($oMyChange);
} else {
echo "No contact found in iTop having the email: {$sSenderEmail}, email message ignored.\n";
}
} catch (Exception $e) {
echo "Error: exception " . $e->getMessage();
$oTicket = null;
}
return $oTicket;
}
示例4: Process
public function Process($iTimeLimit)
{
$oMyChange = new CMDBChange();
$oMyChange->Set("date", time());
$oMyChange->Set("userinfo", "Automatic updates");
$iChangeId = $oMyChange->DBInsertNoReload();
$aReport = array();
$oSet = new DBObjectSet(DBObjectSearch::FromOQL('SELECT ResponseTicket WHERE status = \'new\' AND tto_escalation_deadline <= NOW()'));
while (time() < $iTimeLimit && ($oToEscalate = $oSet->Fetch())) {
$oToEscalate->ApplyStimulus('ev_timeout');
//$oToEscalate->Set('tto_escalation_deadline', null);
$oToEscalate->DBUpdateTracked($oMyChange, true);
$aReport['reached TTO ESCALATION deadline'][] = $oToEscalate->Get('ref');
}
$oSet = new DBObjectSet(DBObjectSearch::FromOQL('SELECT ResponseTicket WHERE status = \'assigned\' AND ttr_escalation_deadline <= NOW()'));
while (time() < $iTimeLimit && ($oToEscalate = $oSet->Fetch())) {
$oToEscalate->ApplyStimulus('ev_timeout');
//$oToEscalate->Set('ttr_escalation_deadline', null);
$oToEscalate->DBUpdateTracked($oMyChange, true);
$aReport['reached TTR ESCALATION deadline'][] = $oToEscalate->Get('ref');
}
$oSet = new DBObjectSet(DBObjectSearch::FromOQL('SELECT ResponseTicket WHERE status = \'resolved\' AND closure_deadline <= NOW()'));
while (time() < $iTimeLimit && ($oToEscalate = $oSet->Fetch())) {
$oToEscalate->ApplyStimulus('ev_close');
//$oToEscalate->Set('closure_deadline', null);
$oToEscalate->DBUpdateTracked($oMyChange, true);
$aReport['reached closure deadline'][] = $oToEscalate->Get('ref');
}
$aStringReport = array();
foreach ($aReport as $sOperation => $aTicketRefs) {
if (count($aTicketRefs) > 0) {
$aStringReport[] = $sOperation . ': ' . count($aTicketRefs) . ' {' . implode(', ', $aTicketRefs) . '}';
}
}
if (count($aStringReport) == 0) {
return "No ticket to process";
} else {
return "Some tickets reached the limit - " . implode('; ', $aStringReport);
}
}
示例5: AfterDatabaseCreation
/**
* Handler called after the creation/update of the database schema
* @param $oConfiguration Config The new configuration of the application
* @param $sPreviousVersion string PRevious version number of the module (empty string in case of first install)
* @param $sCurrentVersion string Current version number of the module
*/
public static function AfterDatabaseCreation(Config $oConfiguration, $sPreviousVersion, $sCurrentVersion)
{
// For each record having item_org_id unset,
// get the org_id from the container object
//
// Prerequisite: change null into 0 (workaround to the fact that we cannot use IS NULL in OQL)
SetupPage::log_info("Initializing attachment/item_org_id - null to zero");
$sTableName = MetaModel::DBGetTable('Attachment');
$sRepair = "UPDATE `{$sTableName}` SET `item_org_id` = 0 WHERE `item_org_id` IS NULL";
CMDBSource::Query($sRepair);
SetupPage::log_info("Initializing attachment/item_org_id - zero to the container");
$oSearch = DBObjectSearch::FromOQL("SELECT Attachment WHERE item_org_id = 0");
$oSet = new DBObjectSet($oSearch);
$iUpdated = 0;
while ($oAttachment = $oSet->Fetch()) {
$oContainer = MetaModel::GetObject($oAttachment->Get('item_class'), $oAttachment->Get('item_id'), false, true);
if ($oContainer) {
$oAttachment->SetItem($oContainer, true);
$iUpdated++;
}
}
SetupPage::log_info("Initializing attachment/item_org_id - {$iUpdated} records have been adjusted");
}
示例6: GetHistoryTable
protected function GetHistoryTable(WebPage $oPage, DBObjectSet $oSet)
{
$sHtml = '';
// First the latest change that the user is allowed to see
$oSet->Rewind();
// Reset the pointer to the beginning of the set
$aChanges = array();
while ($oChangeOp = $oSet->Fetch()) {
$sChangeDescription = $oChangeOp->GetDescription();
if ($sChangeDescription != '') {
// The change is visible for the current user
$changeId = $oChangeOp->Get('change');
$aChanges[$changeId]['date'] = $oChangeOp->Get('date');
$aChanges[$changeId]['userinfo'] = $oChangeOp->Get('userinfo');
if (!isset($aChanges[$changeId]['log'])) {
$aChanges[$changeId]['log'] = array();
}
$aChanges[$changeId]['log'][] = $sChangeDescription;
}
}
$aAttribs = array('date' => array('label' => Dict::S('UI:History:Date'), 'description' => Dict::S('UI:History:Date+')), 'userinfo' => array('label' => Dict::S('UI:History:User'), 'description' => Dict::S('UI:History:User+')), 'log' => array('label' => Dict::S('UI:History:Changes'), 'description' => Dict::S('UI:History:Changes+')));
$aValues = array();
foreach ($aChanges as $aChange) {
$aValues[] = array('date' => $aChange['date'], 'userinfo' => htmlentities($aChange['userinfo'], ENT_QUOTES, 'UTF-8'), 'log' => "<ul><li>" . implode('</li><li>', $aChange['log']) . "</li></ul>");
}
$sHtml .= $oPage->GetTable($aAttribs, $aValues);
return $sHtml;
}
示例7: ComputeRedundancy
/**
* Determine if there is a redundancy (or use the existing one) and add the corresponding nodes/edges
*/
protected function ComputeRedundancy($sRelCode, $aQueryInfo, $oFromNode, $oToNode)
{
$oRedundancyNode = null;
$oObject = $oToNode->GetProperty('object');
if ($this->IsRedundancyEnabled($sRelCode, $aQueryInfo, $oToNode)) {
$sId = RelationRedundancyNode::MakeId($sRelCode, $aQueryInfo['sNeighbour'], $oToNode->GetProperty('object'));
$oRedundancyNode = $this->GetNode($sId);
if (is_null($oRedundancyNode)) {
// Get the upper neighbours
$sQuery = $aQueryInfo['sQueryUp'];
try {
$oFlt = DBObjectSearch::FromOQL($sQuery);
$oObjSet = new DBObjectSet($oFlt, array(), $oObject->ToArgsForQuery());
$iCount = $oObjSet->Count();
} catch (Exception $e) {
throw new Exception("Wrong query (upstream) for the relation {$sRelCode}/{$aQueryInfo['sDefinedInClass']}/{$aQueryInfo['sNeighbour']}: " . $e->getMessage());
}
$iMinUp = $this->GetRedundancyMinUp($sRelCode, $aQueryInfo, $oToNode, $iCount);
$fThreshold = max(0, $iCount - $iMinUp);
$oRedundancyNode = new RelationRedundancyNode($this, $sId, $iMinUp, $fThreshold);
new RelationEdge($this, $oRedundancyNode, $oToNode);
while ($oUpperObj = $oObjSet->Fetch()) {
$sObjectRef = RelationObjectNode::MakeId($oUpperObj);
$oUpperNode = $this->GetNode($sObjectRef);
if (is_null($oUpperNode)) {
$oUpperNode = new RelationObjectNode($this, $oUpperObj);
}
new RelationEdge($this, $oUpperNode, $oRedundancyNode);
}
}
}
return $oRedundancyNode;
}
示例8: DoUpdateObjectFromPostedForm
/**
* Updates the object form POSTED arguments, and writes it into the DB (applies a stimuli if requested)
* @param DBObject $oObj The object to update
* $param array $aAttList If set, this will limit the list of updated attributes
* @return void
*/
public function DoUpdateObjectFromPostedForm(DBObject $oObj, $aAttList = null)
{
$sTransactionId = utils::ReadPostedParam('transaction_id', '');
if (!utils::IsTransactionValid($sTransactionId)) {
throw new TransactionException();
}
$sClass = get_class($oObj);
$sStimulus = trim(utils::ReadPostedParam('apply_stimulus', ''));
$sTargetState = '';
if (!empty($sStimulus)) {
// Compute the target state
$aTransitions = $oObj->EnumTransitions();
if (!isset($aTransitions[$sStimulus])) {
throw new ApplicationException(Dict::Format('UI:Error:Invalid_Stimulus_On_Object_In_State', $sStimulus, $oObj->GetName(), $oObj->GetStateLabel()));
}
$sTargetState = $aTransitions[$sStimulus]['target_state'];
}
$oObj->UpdateObjectFromPostedForm('', $aAttList, $sTargetState);
// Optional: apply a stimulus
//
if (!empty($sStimulus)) {
if (!$oObj->ApplyStimulus($sStimulus)) {
throw new Exception("Cannot apply stimulus '{$sStimulus}' to {$oObj->GetName()}");
}
}
if ($oObj->IsModified()) {
// Record the change
//
$oObj->DBUpdate();
// Trigger ?
//
$aClasses = MetaModel::EnumParentClasses($sClass, ENUM_PARENT_CLASSES_ALL);
$sClassList = implode(", ", CMDBSource::Quote($aClasses));
$oSet = new DBObjectSet(DBObjectSearch::FromOQL("SELECT TriggerOnPortalUpdate AS t WHERE t.target_class IN ({$sClassList})"));
while ($oTrigger = $oSet->Fetch()) {
$oTrigger->DoActivate($oObj->ToArgs('this'));
}
$this->p("<h1>" . Dict::Format('UI:Class_Object_Updated', MetaModel::GetName(get_class($oObj)), $oObj->GetName()) . "</h1>\n");
}
$bLockEnabled = MetaModel::GetConfig()->Get('concurrent_lock_enabled');
if ($bLockEnabled) {
// Release the concurrent lock, if any
$sOwnershipToken = utils::ReadPostedParam('ownership_token', null, false, 'raw_data');
if ($sOwnershipToken !== null) {
// We're done, let's release the lock
iTopOwnershipLock::ReleaseLock(get_class($oObj), $oObj->GetKey(), $sOwnershipToken);
}
}
}
示例9: Process
public function Process($iTimeLimit)
{
$aList = array();
foreach (MetaModel::GetClasses() as $sClass) {
foreach (MetaModel::ListAttributeDefs($sClass) as $sAttCode => $oAttDef) {
if ($oAttDef instanceof AttributeStopWatch) {
foreach ($oAttDef->ListThresholds() as $iThreshold => $aThresholdData) {
$iPercent = $aThresholdData['percent'];
// could be different than the index !
$sNow = date('Y-m-d H:i:s');
$sExpression = "SELECT {$sClass} WHERE {$sAttCode}_laststart AND {$sAttCode}_{$iThreshold}_triggered = 0 AND {$sAttCode}_{$iThreshold}_deadline < '{$sNow}'";
$oFilter = DBObjectSearch::FromOQL($sExpression);
$oSet = new DBObjectSet($oFilter);
while (time() < $iTimeLimit && ($oObj = $oSet->Fetch())) {
$sClass = get_class($oObj);
$aList[] = $sClass . '::' . $oObj->GetKey() . ' ' . $sAttCode . ' ' . $iThreshold;
// Execute planned actions
//
foreach ($aThresholdData['actions'] as $aActionData) {
$sVerb = $aActionData['verb'];
$aParams = $aActionData['params'];
$aValues = array();
foreach ($aParams as $def) {
if (is_string($def)) {
// Old method (pre-2.1.0) non typed parameters
$aValues[] = $def;
} else {
$sParamType = array_key_exists('type', $def) ? $def['type'] : 'string';
switch ($sParamType) {
case 'int':
$value = (int) $def['value'];
break;
case 'float':
$value = (double) $def['value'];
break;
case 'bool':
$value = (bool) $def['value'];
break;
case 'reference':
$value = ${$def['value']};
break;
case 'string':
default:
$value = (string) $def['value'];
}
$aValues[] = $value;
}
}
$aCallSpec = array($oObj, $sVerb);
call_user_func_array($aCallSpec, $aValues);
}
// Mark the threshold as "triggered"
//
$oSW = $oObj->Get($sAttCode);
$oSW->MarkThresholdAsTriggered($iThreshold);
$oObj->Set($sAttCode, $oSW);
if ($oObj->IsModified()) {
CMDBObject::SetTrackInfo("Automatic - threshold triggered");
$oMyChange = CMDBObject::GetCurrentChange();
$oObj->DBUpdateTracked($oMyChange, true);
}
// Activate any existing trigger
//
$sClassList = implode("', '", MetaModel::EnumParentClasses($sClass, ENUM_PARENT_CLASSES_ALL));
$oTriggerSet = new DBObjectSet(DBObjectSearch::FromOQL("SELECT TriggerOnThresholdReached AS t WHERE t.target_class IN ('{$sClassList}') AND stop_watch_code=:stop_watch_code AND threshold_index = :threshold_index"), array(), array('stop_watch_code' => $sAttCode, 'threshold_index' => $iThreshold));
while ($oTrigger = $oTriggerSet->Fetch()) {
$oTrigger->DoActivate($oObj->ToArgs('this'));
}
}
}
}
}
}
$iProcessed = count($aList);
return "Triggered {$iProcessed} threshold(s):" . implode(", ", $aList);
}
示例10: PopulateChildMenus
public function PopulateChildMenus()
{
// Load user shortcuts in DB
//
$oBMSearch = new DBObjectSearch('Shortcut');
$oBMSearch->AddCondition('user_id', UserRights::GetUserId(), '=');
$oBMSet = new DBObjectSet($oBMSearch, array('friendlyname' => true));
// ascending on friendlyname
$fRank = 1;
while ($oShortcut = $oBMSet->Fetch()) {
$sName = $this->GetMenuId() . '_' . $oShortcut->GetKey();
$oShortcutMenu = new ShortcutMenuNode($sName, $oShortcut, $this->GetIndex(), $fRank++);
}
// Complete the tree
//
parent::PopulateChildMenus();
}
示例11: CheckParameters
/**
* Checks the parameters and returns the appropriate exporter (if any)
* @param string $sExpression The OQL query to export or null
* @param string $sQueryId The entry in the query phrasebook if $sExpression is null
* @param string $sFormat The code of export format: csv, pdf, html, xlsx
* @throws MissingQueryArgument
* @return Ambigous <iBulkExport, NULL>
*/
function CheckParameters($sExpression, $sQueryId, $sFormat)
{
$oExporter = null;
if ($sExpression === null && $sQueryId === null) {
ReportErrorAndUsage("Missing parameter. The parameter 'expression' or 'query' must be specified.");
}
// Either $sExpression or $sQueryId must be specified
if ($sExpression === 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();
$sExpression = $oQuery->Get('oql');
$sFields = $oQuery->Get('fields');
if (strlen($sFields) == 0) {
$sFields = trim($oQuery->Get('fields'));
}
} else {
ReportErrorAndExit("Invalid query phrasebook identifier: '{$sQueryId}'");
}
}
if ($sFormat === null) {
ReportErrorAndUsage("Missing parameter 'format'.");
}
// Check if the supplied query is valid (and all the parameters are supplied
try {
$oSearch = DBObjectSearch::FromOQL($sExpression);
$aArgs = array();
foreach ($oSearch->GetQueryParams() as $sParam => $foo) {
$value = utils::ReadParam('arg_' . $sParam, null, true, 'raw_data');
if (!is_null($value)) {
$aArgs[$sParam] = $value;
} else {
throw new MissingQueryArgument("Missing parameter '--arg_{$sParam}'");
}
}
$oSearch->SetInternalParams($aArgs);
$sFormat = utils::ReadParam('format', 'html', true, 'raw_data');
$oExporter = BulkExport::FindExporter($sFormat, $oSearch);
if ($oExporter == null) {
$aSupportedFormats = BulkExport::FindSupportedFormats();
ReportErrorAndExit("Invalid output format: '{$sFormat}'. The supported formats are: " . implode(', ', array_keys($aSupportedFormats)));
}
} catch (MissingQueryArgument $e) {
ReportErrorAndUsage("Invalid OQL query: '{$sExpression}'.\n" . $e->getMessage());
} catch (OQLException $e) {
ReportErrorAndExit("Invalid OQL query: '{$sExpression}'.\n" . $e->getMessage());
} catch (Exception $e) {
ReportErrorAndExit($e->getMessage());
}
$oExporter->SetFormat($sFormat);
$oExporter->SetChunkSize(EXPORTER_DEFAULT_CHUNK_SIZE);
$oExporter->SetObjectList($oSearch);
$oExporter->ReadParameters();
return $oExporter;
}
示例12: DisplayStatus
function DisplayStatus($oP)
{
$oSearch = new DBObjectSearch('BackgroundTask');
$oTasks = new DBObjectSet($oSearch);
$oP->p('+---------------------------+---------+---------------------+---------------------+--------+-----------+');
$oP->p('| Task Class | Status | Last Run | Next Run | Nb Run | Avg. Dur. |');
$oP->p('+---------------------------+---------+---------------------+---------------------+--------+-----------+');
while ($oTask = $oTasks->Fetch()) {
$sTaskName = $oTask->Get('class_name');
$sStatus = $oTask->Get('status');
$sLastRunDate = $oTask->Get('latest_run_date');
$sNextRunDate = $oTask->Get('next_run_date');
$iNbRun = (int) $oTask->Get('total_exec_count');
$sAverageRunTime = $oTask->Get('average_run_duration');
$oP->p(sprintf('| %1$-25.25s | %2$-7s | %3$-19s | %4$-19s | %5$6d | %6$7s s |', $sTaskName, $sStatus, $sLastRunDate, $sNextRunDate, $iNbRun, $sAverageRunTime));
}
$oP->p('+---------------------------+---------+---------------------+---------------------+--------+-----------+');
}
示例13: CreateDelta
/**
* Build a new set (in memory) made of objects of the given set which are NOT present in the current set
*
* Limitations:
* The objects inside the set must be written in the database since the comparison is based on their identifiers
* Sets with several objects per row are NOT supported
*
* @param DBObjectSet $oObjectSet
* @throws CoreException
*
* @return DBObjectSet The "delta" set.
*/
public function CreateDelta(DBObjectSet $oObjectSet)
{
if ($this->GetRootClass() != $oObjectSet->GetRootClass()) {
throw new CoreException("Could not 'delta' two objects sets if they don't have the same root class");
}
if (!$this->m_bLoaded) {
$this->Load();
}
$aId2Row = array();
$iCurrPos = $this->m_iCurrRow;
// Save the cursor
$idx = 0;
while ($oObj = $this->Fetch()) {
$aId2Row[$oObj->GetKey()] = $idx;
$idx++;
}
$oNewSet = DBObjectSet::FromScratch($this->GetClass());
$oObjectSet->Seek(0);
while ($oObject = $oObjectSet->Fetch()) {
if (!array_key_exists($oObject->GetKey(), $aId2Row)) {
$oNewSet->AddObject($oObject);
}
}
$this->Seek($iCurrPos);
// Restore the cursor
return $oNewSet;
}
示例14: LoadCache
public function LoadCache()
{
if (!is_null($this->m_aProfiles)) {
return;
}
// Could be loaded in a shared memory (?)
$oKPI = new ExecutionKPI();
if (self::HasSharing()) {
SharedObject::InitSharedClassProperties();
}
$oProfileSet = new DBObjectSet(DBObjectSearch::FromOQL_AllData("SELECT URP_Profiles"));
$this->m_aProfiles = array();
while ($oProfile = $oProfileSet->Fetch()) {
$this->m_aProfiles[$oProfile->GetKey()] = $oProfile;
}
$oKPI->ComputeAndReport('Load of user management cache (excepted Action Grants)');
/*
echo "<pre>\n";
print_r($this->m_aProfiles);
print_r($this->m_aUserProfiles);
print_r($this->m_aUserOrgs);
echo "</pre>\n";
exit;
*/
return true;
}
示例15: BuildQuery
/**
* Applies the defined parameters into the SQL query
* @return string the SQL query to execute
*/
public function BuildQuery()
{
$oAppContext = new ApplicationContext();
$sQuery = $this->m_sQuery;
$sQuery = str_replace('$DB_PREFIX$', MetaModel::GetConfig()->GetDBSubname(), $sQuery);
// put the tables DB prefix (if any)
foreach ($this->m_aParams as $sName => $aParam) {
if ($aParam['type'] == 'context') {
$sSearchPattern = '/\\$CONDITION\\(' . $sName . ',([^\\)]+)\\)\\$/';
$value = $oAppContext->GetCurrentValue($aParam['mapping']);
if (empty($value)) {
$sSQLExpr = '(1)';
} else {
// Special case for managing the hierarchy of organizations
if ($aParam['mapping'] == 'org_id' && MetaModel::IsValidClass('Organization')) {
$sHierarchicalKeyCode = MetaModel::IsHierarchicalClass('Organization');
if ($sHierarchicalKeyCode != false) {
// organizations are in hierarchy... gather all the orgs below the given one...
$sOQL = "SELECT Organization AS node JOIN Organization AS root ON node.{$sHierarchicalKeyCode} BELOW root.id WHERE root.id = :value";
$oSet = new DBObjectSet(DBObjectSearch::FromOQL($sOQL), array(), array('value' => $value));
$aOrgIds = array();
while ($oOrg = $oSet->Fetch()) {
$aOrgIds[] = $oOrg->GetKey();
}
$sSQLExpr = '($1 IN(' . implode(',', $aOrgIds) . '))';
} else {
$sSQLExpr = '($1 = ' . CMDBSource::Quote($value) . ')';
}
} else {
$sSQLExpr = '($1 = ' . CMDBSource::Quote($value) . ')';
}
}
$sQuery = preg_replace($sSearchPattern, $sSQLExpr, $sQuery);
}
}
return $sQuery;
}