simplenews_scheduler_views.inc in Simplenews Scheduler 8
Same filename and directory in other branches
simplenews_scheduler_views.inc Views support for simplenews
File
simplenews_scheduler_views.incView source
<?php
/**
* @file simplenews_scheduler_views.inc
* Views support for simplenews
*/
/**
* Implementation of hook_views_tables
*/
function simplenews_scheduler_views_tables() {
$tables['simplenews_scheduler'] = array(
'name' => 'simplenews_scheduler',
'filters' => array(
'node.created' => array(
'name' => t('Simplenews schedule: node created'),
'list' => 'simplenews_scheduler_handler_newsletters',
'list-type' => 'list',
'handler' => 'simplenews_scheduler_filter_value',
'operator' => 'simplenews_scheduler_handler_operator_ca',
'value-type' => 'array',
'help' => t('Select the newsletter to filter against, this will filter nodes that have been created AFTER the latest <i>edition</i> of this newsletter'),
),
),
);
return $tables;
}
function simplenews_scheduler_handler_newsletters() {
$list = array();
$result = db_query("SELECT ss.*,n.title FROM {simplenews_scheduler} ss JOIN {node} n ON n.nid = ss.snid GROUP BY snid");
while ($row = db_fetch_array($result)) {
$list[$row['snid']] = "Newsletter: " . $row['title'];
}
if (sizeof($list) == 0) {
drupal_set_message('No current newsletter found to filter against, you should create a simplenews newsletter first.');
}
return $list;
}
function simplenews_scheduler_filter_value($op, $filter, $filterinfo, &$query) {
// get oldest last_run time of the selected newsletter
$result = db_query("SELECT ss.*,n.created FROM {simplenews_scheduler} ss\n LEFT JOIN {node} n on n.nid = ss.snid\n WHERE ss.snid IN (%s) \n ORDER BY ss.last_run \n LIMIT 0,1", implode(',', $filter['value']));
$last_run = db_fetch_array($result);
// then it hasnt run yet, so we use the creation date of the newsletter parent instead
$trigger_time = $last_run['last_run'] > 0 ? $last_run['last_run'] : $last_run['created'];
$query
->add_field('created', 'node');
$query
->add_where("node.created %s %d", $filter['operator'], $trigger_time);
}
function simplenews_scheduler_handler_operator_ca() {
return array(
'>' => t("After Most Recent Edition Of"),
'<' => t("Before Most Recent Edition Of"),
);
}
// any view that has this as a filter should be invalidate cache
function simplenews_scheduler_views_pre_query(&$view) {
foreach ($view->filter as $i => $filter) {
if ($filter['field'] == 'simplenews_scheduler.node.created') {
$view->is_cacheable = false;
}
}
}
Functions
Name | Description |
---|---|
simplenews_scheduler_filter_value | |
simplenews_scheduler_handler_newsletters | |
simplenews_scheduler_handler_operator_ca | |
simplenews_scheduler_views_pre_query | |
simplenews_scheduler_views_tables | Implementation of hook_views_tables |