function sourceRecords($params, $sort, $limit) { increase_time_limit_to(120); $res = WorkflowThreeStepRequest::get_by_publisher('WorkflowDeletionRequest', Member::currentUser(), array('Approved')); $doSet = new DataObjectSet(); foreach ($res as $result) { if ($wf = $result->openWorkflowRequest()) { if (!$result->canDeleteFromLive()) { continue; } $result->WFAuthorID = $wf->AuthorID; $result->WFApproverTitle = $wf->Approver()->Title; $result->WFAuthorTitle = $wf->Author()->Title; $result->WFApprovedWhen = $wf->ApprovalDate(); $result->WFRequestedWhen = $wf->Created; $result->WFApproverID = $wf->ApproverID; $result->WFPublisherID = $wf->PublisherID; if (isset($_REQUEST['OnlyMine']) && $result->WFApproverID != Member::currentUserID()) { continue; } $result->BacklinkCount = $result->BackLinkTracking()->Count(); $doSet->push($result); } } if ($sort) { $parts = explode(' ', $sort); $field = $parts[0]; $direction = $parts[1]; if ($field == 'AbsoluteLink') { $sort = 'URLSegment ' . $direction; } if ($field == 'Subsite.Title') { $sort = 'SubsiteID ' . $direction; } $doSet->sort($sort); } if ($limit && $limit['limit']) { return $doSet->getRange($limit['start'], $limit['limit']); } else { return $doSet; } }
function sourceRecords($params, $sort, $limit) { increase_time_limit_to(120); $res = WorkflowTwoStepRequest::get_by_publisher('WorkflowPublicationRequest', Member::currentUser(), array('AwaitingApproval')); $doSet = new DataObjectSet(); if ($res) { foreach ($res as $result) { if (!$result->canPublish()) { continue; } if ($wf = $result->openWorkflowRequest()) { if (ClassInfo::exists('Subsite')) { $result->SubsiteTitle = $result->Subsite()->Title; } $result->RequestedAt = $wf->Created; $result->WFAuthorTitle = $wf->Author()->Title; $result->HasEmbargo = $wf->getEmbargoDate() ? date('j M Y g:ia', strtotime($wf->getEmbargoDate())) : 'no'; $doSet->push($result); } } } if ($sort) { $parts = explode(' ', $sort); $field = $parts[0]; $direction = $parts[1]; if ($field == 'AbsoluteLink') { $sort = 'URLSegment ' . $direction; } if ($field == 'Subsite.Title') { $sort = 'SubsiteID ' . $direction; } $doSet->sort($sort); } if ($limit && $limit['limit']) { return $doSet->getRange($limit['start'], $limit['limit']); } else { return $doSet; } }
function sourceRecords($params, $sort, $limit) { increase_time_limit_to(120); $wheres = array(); // Emulate Form->loadDataFrom() $fields = $this->parameterFields(); foreach ($fields as $field) { if (isset($params[$field->Name()])) { $val = $params[$field->Name()]; if ($val) { $field->setValue($val); } } } $startDate = !empty($params['StartDate']) ? $params['StartDate'] : null; $endDate = !empty($params['EndDate']) ? $params['EndDate'] : null; if ($startDate) { $startDate = $fields->dataFieldByName('StartDate')->dataValue(); } if ($endDate) { $endDate = $fields->dataFieldByName('EndDate')->dataValue(); } if ($startDate && $endDate) { $wheres[] = "\"EmbargoDate\" >= '" . Convert::raw2sql($startDate) . "' AND \"EmbargoDate\" <= '" . Convert::raw2sql($endDate) . "'"; } else { if ($startDate && !$endDate) { $wheres[] = "\"EmbargoDate\" >= '" . Convert::raw2sql($startDate) . "'"; } else { if (!$startDate && $endDate) { $wheres[] = "\"EmbargoDate\" <= '" . Convert::raw2sql($endDate) . "'"; } else { $wheres[] = "\"EmbargoDate\" >= '" . SS_Datetime::now()->URLDate() . "'"; } } } $wheres[] = "\"WorkflowRequest\".\"Status\" = 'Scheduled'"; $query = singleton("SiteTree")->extendedSQL(join(' AND ', $wheres), null, null, "LEFT JOIN \"WorkflowRequest\" ON \"WorkflowRequest\".\"PageID\" = \"SiteTree\".\"ID\""); $query->select[] = "\"WorkflowRequest\".\"EmbargoDate\" AS \"EmbargoDate\""; $query->from[] = "LEFT JOIN \"Member\" AS \"Approver\" ON \"WorkflowRequest\".\"ApproverID\" = \"Approver\".\"ID\""; $query->select[] = Member::get_title_sql('Approver') . ' AS "ApproverName"'; $join = ''; if ($sort) { $parts = explode(' ', $sort); $field = $parts[0]; $direction = $parts[1]; if ($field == 'AbsoluteLink') { $sort = '"URLSegment" ' . $direction; } if ($field == 'Subsite.Title') { $query->from[] = 'LEFT JOIN "Subsite" ON "Subsite"."ID" = "SiteTree"."SubsiteID"'; } } if ($sort) { $query->orderby = $sort; } // Postgres and MSSQL require these fields in the groupby[] array: $query->groupby[] = "\"WorkflowRequest\".\"EmbargoDate\""; $query->groupby[] = "\"Approver\".\"Surname\""; $query->groupby[] = "\"Approver\".\"FirstName\""; // Turn a query into records $records = singleton('SiteTree')->buildDataObjectSet($query->execute(), 'DataObjectSet', $query); // Backwards compat method signature with 2.4 $fn = method_exists('SiteTree', 'prepopulate_permission_cache') ? 'prepopulate_permission_cache' : 'prepopuplate_permission_cache'; if ($records) { SiteTree::$fn('edit', $records->column('ID')); } // Filter to only those with canEdit permission $filteredRecords = new DataObjectSet(); if ($records) { foreach ($records as $record) { if ($record->canEdit()) { $filteredRecords->push($record); // Add any related pages to the list as well to ensure authors // can review what they're actually scheduling $virtualPages = $record->VirtualPages(); if ($virtualPages) { foreach ($virtualPages as $virtualPage) { // Simulate custom SQL fields from WorkflowRequest join $virtualPage->EmbargoDate = $record->EmbargoDate; $virtualPage->ApproverName = $record->ApproverName; $filteredRecords->push($virtualPage); } } } } } // Apply limit after that filtering. if ($limit && $limit['limit']) { return $filteredRecords->getRange($limit['start'], $limit['limit']); } else { return $filteredRecords; } }