From cda1cd9bd1a2f7604a36a1c6b29bbc0d96fb0be3 Mon Sep 17 00:00:00 2001 From: Tom Rix Date: Tue, 16 Feb 2010 23:22:49 +0000 Subject: [PATCH] API CHANGE now using new reporting api, module now requires 2.4 --- README.md | 2 +- _config.php | 9 +- code/PagesDueForReviewReport.php | 163 +++++++++++++++++++++++++++ code/PagesDueForReviewSideReport.php | 76 ------------- javascript/PagesDueForReview.js | 31 +++++ 5 files changed, 203 insertions(+), 78 deletions(-) create mode 100644 code/PagesDueForReviewReport.php delete mode 100644 code/PagesDueForReviewSideReport.php create mode 100644 javascript/PagesDueForReview.js diff --git a/README.md b/README.md index b47d39d..575ef0a 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ ## Requirements - * SilverStripe 2.3 or newer + * SilverStripe 2.4 or newer ## Installation diff --git a/_config.php b/_config.php index ac847ab..a49331d 100644 --- a/_config.php +++ b/_config.php @@ -1,3 +1,10 @@ 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; + } + } +} + +?> diff --git a/code/PagesDueForReviewSideReport.php b/code/PagesDueForReviewSideReport.php deleted file mode 100644 index d4527f1..0000000 --- a/code/PagesDueForReviewSideReport.php +++ /dev/null @@ -1,76 +0,0 @@ -params['ReviewDate']) && $this->params['ReviewDate']) { - $where[] = 'NextReviewDate <= \'' . Convert::raw2sql($this->params['ReviewDate']) . '\''; - } else { - $where[] = 'NextReviewDate <= \'' . SS_Datetime::now()->URLDate() . '\''; - } - - if(isset($this->params['OwnerID'])) { - switch($this->params['OwnerID']) { - case 'any-owner': - break; - case 'no-owner': - $where[] = 'OwnerID = 0'; - default: - $where[] = 'OwnerID = ' . (int) $this->params['OwnerID']; - break; - } - } - - return DataObject::get('SiteTree', $where); - } - - function fieldsToShow() { - return array( - "Title" => array( - "source" => array("NestedTitle", array("2")), - "link" => true, - ), - "Date" => array( - "prefix" => 'Due for review on ', - "source" => "NextReviewDate", - ), - "Owner" => array( - "prefix" => ', owned by ', - "source" => "OwnerName" - ) - ); - } - - function getParameterFields() { - $cmsUsers = Permission::get_members_by_permission(array("CMS_ACCESS_CMSMain", "ADMIN")); - - $options = array( - 'any-owner' => 'Any owner', - 'no-owner' => 'No owner' - ); - - $options = array_merge($options, $cmsUsers->map('ID', 'Title')); - - return new FieldSet( - new DateField('ReviewDate', 'Review date (YYYY-MM-DD)'), - new DropdownField("OwnerID", 'Page owner', $options) - ); - } -} - -?> diff --git a/javascript/PagesDueForReview.js b/javascript/PagesDueForReview.js new file mode 100644 index 0000000..61ec88c --- /dev/null +++ b/javascript/PagesDueForReview.js @@ -0,0 +1,31 @@ +(function($) { + + // Hide all owner dropdowns except the one for the current subsite + function showCorrectSubsiteIDDropdown(value) { + var domid = 'OwnerID' + value; + + var ownerIDDropdowns = $('div.subsiteSpecificOwnerID'); + for(var i = 0; i < ownerIDDropdowns.length; i++) { + if(ownerIDDropdowns[i].id == domid) + $(ownerIDDropdowns[i]).show(); + else + $(ownerIDDropdowns[i]).hide(); + } + + } + + // Call method to show on report load + $('#Form_EditForm_SubsiteIDWithOwner').livequery( + function() { + showCorrectSubsiteIDDropdown(this.value); + } + ); + + // Call method to show on dropdown change + $('#Form_EditForm_SubsiteIDWithOwner').livequery('change', + function() { + showCorrectSubsiteIDDropdown(this.value); + } + ); + +})(jQuery);