toDropdownMap('ID', 'Title') as $k => $v) { $map[$k] = $v; } } $map = $map + array('' => 'Any', '-1' => '(no owner)'); $params->push(new DropdownField("OwnerID", 'Page owner', $map)); // Restore current subsite Subsite::changeSubsite($existingSubsite); } else { $cmsUsers = Permission::get_members_by_permission(array("CMS_ACCESS_CMSMain", "ADMIN")); $map = $cmsUsers->map('ID', 'Title', '(no owner)'); unset($map['']); $map = array('' => 'Any', '-1' => '(no owner)') + $map; $params->push(new DropdownField("OwnerID", 'Page owner', $map)); } $params->push($startDate = new CalendarDateField('ReviewDateAfter', 'Review date after or on (DD/MM/YYYY)')); $params->push($endDate = new CalendarDateField('ReviewDateBefore', 'Review date before or on (DD/MM/YYYY)', date('d/m/Y', strtotime('midnight')))); $endDate->mustBeAfter($startDate->Name()); $startDate->mustBeBefore($endDate->Name()); $params->push(new CheckboxField('ShowVirtualPages', 'Show Virtual Pages')); return $params; } function columns() { $fields = array( 'Title' => array( 'title' => 'Page name', 'formatting' => '$value' ), 'NextReviewDate' => array( 'title' => 'Review Date', 'casting' => 'Date->Full' ), 'OwnerNames' => array( 'title' => 'Owner' ), 'LastEditedByName' => 'Last edited by', 'AbsoluteLink' => array( 'title' => 'URL', 'formatting' => '$value " . ($AbsoluteLiveLink ? "(live)" : "") . " (draft)' ) ); return $fields; } function sourceRecords($params, $sort, $limit) { $wheres = array(); if(empty($params['ReviewDateBefore']) && empty($params['ReviewDateAfter'])) { // If there's no review dates set, default to all pages due for review now $wheres[] = 'NextReviewDate < \'' . SSDatetime::now()->URLDate() . '\' + INTERVAL 1 DAY'; } else { // Review date before if(!empty($params['ReviewDateBefore'])) { list($day, $month, $year) = explode('/', $_REQUEST['ReviewDateBefore']); $reviewDate = "$year-$month-$day"; $wheres[] = 'NextReviewDate < \'' . Convert::raw2sql($reviewDate) . '\' + INTERVAL 1 DAY'; } // Review date after if(!empty($params['ReviewDateAfter'])) { list($day, $month, $year) = explode('/', $_REQUEST['ReviewDateAfter']); $reviewDate = "$year-$month-$day"; $wheres[] = 'NextReviewDate >= \'' . Convert::raw2sql($reviewDate) . '\''; } } // Show virtual pages? if(empty($params['ShowVirtualPages'])) { $wheres[] = '"SiteTree"."ClassName" != \'VirtualPage\' AND "SiteTree"."ClassName" != \'SubsitesVirtualPage\''; } // We use different dropdown depending on the subsite $ownerIdParam = 'OwnerID'; // Owner dropdown if(!empty($params[$ownerIdParam])) { $ownerID = (int)$params[$ownerIdParam]; // We use -1 here to distinguish between No Owner and Any if($ownerID == -1) $ownerID = 0; $wheres[] = 'OwnerID = ' . $ownerID; } $query = singleton("SiteTree")->extendedSQL(join(' AND ', $wheres)); $query->select[] = Member::get_title_sql('Owner').' AS OwnerNames'; $query->from[] = 'LEFT JOIN "Member" AS "Owner" ON "SiteTree"."OwnerID" = "Owner"."ID"'; // Turn a query into records if($sort) { $parts = explode(' ', $sort); $field = $parts[0]; $direction = $parts[1]; if($field == 'AbsoluteLink') { $sort = 'URLSegment ' . $direction; } elseif($field == 'Subsite.Title') { $query->from[] = 'LEFT JOIN "Subsite" ON "Subsite"."ID" = "SiteTree"."SubsiteID"'; } if($field != "LastEditedByName") { $query->orderby = $sort; } } $records = singleton('SiteTree')->buildDataObjectSet($query->execute(), 'DataObjectSet', $query); // var_dump($records); if($records) { foreach($records as $record) { $record->LastEditedByName = $record->LastEditedBy()->Title; } if($sort && $field != "LastEditedByName") $records->sort($sort); // Apply limit after that filtering. if($limit) return $records->getRange($limit['start'], $limit['limit']); else return $records; } } } ?>