2007-09-07 00:33:58 +02:00
|
|
|
<?php
|
2008-12-10 07:58:28 +01:00
|
|
|
/**
|
|
|
|
* Shows a widget with viewing blog entries
|
|
|
|
* by months or years.
|
|
|
|
*
|
|
|
|
* @package blog
|
|
|
|
*/
|
2007-09-07 00:33:58 +02:00
|
|
|
class ArchiveWidget extends Widget {
|
2009-01-20 05:01:45 +01:00
|
|
|
|
2007-09-07 00:33:58 +02:00
|
|
|
static $db = array(
|
2008-12-10 07:58:28 +01:00
|
|
|
'DisplayMode' => 'Varchar'
|
2007-09-07 00:33:58 +02:00
|
|
|
);
|
2009-01-20 05:01:45 +01:00
|
|
|
static $has_one = array();
|
|
|
|
|
|
|
|
static $has_many = array();
|
|
|
|
|
|
|
|
static $many_many = array();
|
|
|
|
|
|
|
|
static $belongs_many_many = array();
|
2007-09-07 00:33:58 +02:00
|
|
|
|
|
|
|
static $defaults = array(
|
2008-12-10 07:58:28 +01:00
|
|
|
'DisplayMode' => 'month'
|
2007-09-07 00:33:58 +02:00
|
|
|
);
|
|
|
|
|
2008-12-10 07:58:28 +01:00
|
|
|
static $title = 'Browse by Date';
|
|
|
|
|
|
|
|
static $cmsTitle = 'Blog Archive';
|
|
|
|
|
|
|
|
static $description = 'Show a list of months or years in which there are blog posts, and provide links to them.';
|
2007-09-07 00:33:58 +02:00
|
|
|
|
2008-12-10 07:58:28 +01:00
|
|
|
function getCMSFields() {
|
2007-09-07 00:33:58 +02:00
|
|
|
return new FieldSet(
|
2008-12-10 07:58:28 +01:00
|
|
|
new OptionsetField(
|
|
|
|
'DisplayMode',
|
|
|
|
_t('ArchiveWidget.DispBY', 'Display by'),
|
|
|
|
array(
|
|
|
|
'month' => _t('ArchiveWidget.MONTH', 'month'),
|
|
|
|
'year' => _t('ArchiveWidget.YEAR', 'year')
|
|
|
|
)
|
|
|
|
)
|
2007-09-07 00:33:58 +02:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
function Dates() {
|
2008-12-10 07:58:28 +01:00
|
|
|
Requirements::themedCSS('archivewidget');
|
|
|
|
|
2007-09-07 00:33:58 +02:00
|
|
|
$results = new DataObjectSet();
|
2009-05-01 00:05:54 +02:00
|
|
|
$container = BlogTree::current();
|
|
|
|
$ids = $container->BlogHolderIDs();
|
2007-09-07 00:33:58 +02:00
|
|
|
|
2008-12-16 05:35:28 +01:00
|
|
|
$stage = Versioned::current_stage();
|
|
|
|
$suffix = (!$stage || $stage == 'Stage') ? "" : "_$stage";
|
|
|
|
|
2008-12-10 07:58:28 +01:00
|
|
|
if($this->DisplayMode == 'month') {
|
2009-05-11 04:48:24 +02:00
|
|
|
if(defined('Database::USE_ANSI_SQL')) {
|
|
|
|
$sqlResults = DB::query("
|
|
|
|
SELECT DISTINCT MONTH(\"Date\") AS \"Month\", YEAR(\"Date\") AS \"Year\", \"Date\"
|
|
|
|
FROM \"SiteTree$suffix\" INNER JOIN \"BlogEntry$suffix\" ON \"SiteTree$suffix\".\"ID\" = \"BlogEntry$suffix\".\"ID\"
|
|
|
|
WHERE \"ParentID\" IN (" . implode(', ', $ids) . ")
|
|
|
|
ORDER BY \"Date\" DESC"
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
$sqlResults = DB::query("
|
|
|
|
SELECT DISTINCT MONTH(`Date`) AS `Month`, YEAR(`Date`) AS `Year`
|
|
|
|
FROM `SiteTree$suffix` NATURAL JOIN `BlogEntry$suffix`
|
|
|
|
WHERE `ParentID` IN (" . implode(', ', $ids) . ")
|
|
|
|
ORDER BY `Date` DESC"
|
|
|
|
);
|
|
|
|
}
|
2008-12-10 07:58:28 +01:00
|
|
|
} else {
|
2009-05-11 04:48:24 +02:00
|
|
|
if(defined('Database::USE_ANSI_SQL')) {
|
|
|
|
$sqlResults = DB::query("
|
|
|
|
SELECT DISTINCT YEAR(\"Date\") AS \"Year\", \"Date\"
|
|
|
|
FROM \"SiteTree$suffix\" INNER JOIN \"BlogEntry$suffix\" ON \"SiteTree$suffix\".\"ID\" = \"BlogEntry$suffix\".\"ID\"
|
|
|
|
WHERE \"ParentID\" IN (" . implode(', ', $ids) . ")
|
|
|
|
ORDER BY \"Date\" DESC"
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
$sqlResults = DB::query("
|
|
|
|
SELECT DISTINCT YEAR(`Date`) AS `Year`
|
|
|
|
FROM `SiteTree$suffix` NATURAL JOIN `BlogEntry$suffix`
|
|
|
|
WHERE `ParentID` in (".implode(', ',$ids).")
|
|
|
|
ORDER BY `Date` DESC"
|
|
|
|
);
|
|
|
|
}
|
2007-09-07 00:33:58 +02:00
|
|
|
}
|
|
|
|
|
2008-12-10 07:58:28 +01:00
|
|
|
if(!$sqlResults) return new DataObjectSet();
|
2007-09-07 00:33:58 +02:00
|
|
|
|
|
|
|
foreach($sqlResults as $sqlResult) {
|
2008-12-10 07:58:28 +01:00
|
|
|
$date = new Date('Date');
|
|
|
|
$month = ($this->DisplayMode == 'month') ? (int)$sqlResult['Month'] : 1;
|
2007-09-07 00:33:58 +02:00
|
|
|
|
|
|
|
$date->setValue(array(
|
2008-12-10 07:58:28 +01:00
|
|
|
'Day' => 1,
|
|
|
|
'Month' => $month,
|
|
|
|
'Year' => (int) $sqlResult['Year']
|
2007-09-07 00:33:58 +02:00
|
|
|
));
|
|
|
|
|
2008-12-10 07:58:28 +01:00
|
|
|
if($this->DisplayMode == 'month') {
|
2009-05-01 00:05:54 +02:00
|
|
|
$link = $container->Link() . $sqlResult['Year']. '/' . sprintf("%'02d", $sqlResult['Month']);
|
2008-12-10 07:58:28 +01:00
|
|
|
} else {
|
2009-05-01 00:05:54 +02:00
|
|
|
$link = $container->Link() . $sqlResult['Year'];
|
2007-09-07 00:33:58 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
$results->push(new ArrayData(array(
|
2008-12-10 07:58:28 +01:00
|
|
|
'Date' => $date,
|
|
|
|
'Link' => $link
|
2007-09-07 00:33:58 +02:00
|
|
|
)));
|
|
|
|
}
|
|
|
|
|
|
|
|
return $results;
|
|
|
|
}
|
|
|
|
}
|
2008-12-16 05:25:35 +01:00
|
|
|
?>
|