views_revisions.module in Views Revisions 6
Same filename and directory in other branches
A module to provide revisions of Views.
File
views_revisions.moduleView source
<?php
/**
* @file
* A module to provide revisions of Views.
*/
/**
* Implements hook_help().
*/
function views_revisions_help($path, $arg) {
switch ($path) {
case 'admin/help#views_revisions':
return "<p>" . l('View README.txt', drupal_get_path('module', 'views_revisions') . '/README.txt') . "</p>";
break;
}
}
/**
* Implements hook_menu().
*/
function views_revisions_menu() {
$items = array();
$items['admin/build/views/revisions/%'] = array(
'type' => MENU_NORMAL_ITEM,
'title' => 'Views Revisions',
'page callback' => 'views_revisions_page',
'page arguments' => array(
4,
),
'access arguments' => array(
'administer views',
),
);
$items['admin/build/views/revisions/revision/%'] = array(
'type' => MENU_NORMAL_ITEM,
'title' => 'Views Revision',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'views_revisions_revision_page',
5,
),
'access arguments' => array(
'administer views',
),
);
return $items;
}
/**
* Implements hook_form_alter().
*/
function views_revisions_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'views_ui_edit_view_form' && $form_state['view']->vid != 'new') {
$form['#prefix'] .= '<div>' . l('Views Revisions', 'admin/build/views/revisions/' . $form_state['view']->name) . '</div>';
$form['buttons']['views_revisions_revision'] = array(
'#type' => 'checkbox',
'#title' => t('Create new revision'),
'#default_value' => 1,
'#weight' => -100,
);
$form['buttons']['views_revisions_log'] = array(
'#type' => 'textarea',
'#title' => t('Revision log message'),
'#description' => t('Provide an explanation of the changes you are making. This will help other authors understand your motivations.'),
'#rows' => 3,
'#weight' => -99,
);
array_unshift($form['buttons']['save']['#submit'], 'views_revisions_form_submit');
}
else {
if ($form_id == 'views_ui_delete_confirm') {
$form['views_revisions_save_history'] = array(
'#title' => t('Save the Views Revions History'),
'#type' => 'checkbox',
'#default_value' => 1,
);
$form['#submit'][] = 'views_revisions_delete';
}
}
}
/**
* Submission handler for the Views UI form.
*/
function views_revisions_form_submit($form, &$form_state) {
global $user;
$revision = $form_state['values']['views_revisions_revision'];
if ($revision) {
$log = $form_state['values']['views_revisions_log'];
$data = $form_state['view']
->export();
$sql = "INSERT INTO {views_revisions} (vid, uid, created, log, data) VALUES \n (%d, %d, %d, '%s', '%s')";
db_query($sql, $form_state['view']->vid, $user->uid, time(), $log, $data);
}
}
/**
* Submission handler for the ctools delete confirmation form.
*/
function views_revisions_delete($form, &$form_state) {
dpm($form_state['values']);
if (!$form_state['values']['views_revisions_save_history']) {
$vid = $form_state['view']->vid;
db_query("DELETE FROM {views_revisions} WHERE vid = :vid", array(
':vid' => $vid,
));
}
}
/**
* Page callback function for the views revisions page.
*/
function views_revisions_page($name) {
$html = "<h2>{$name}</h2><p>" . l('Go Back to View', "admin/build/views/edit/{$name}") . " »</p>";
$vid = db_result(db_query("SELECT vid FROM {views_view} WHERE name = '%s'", $name));
if (!$vid) {
$html .= t('Failed to load view!');
return $html;
}
$revisions = db_query("SELECT vr.vrvid, vr.vid, vr.uid, vr.created, vr.log, u.name\n FROM {views_revisions} vr\n LEFT OUTER JOIN {users} u ON vr.uid = u.uid\n WHERE vr.vid = %d\n ORDER BY vr.created DESC", $vid);
$header = array(
array(
"data" => t('User'),
),
array(
"data" => t('Message'),
),
array(
"data" => t('Created'),
),
array(
"data" => t('Revision'),
),
);
$rows = array();
$revision_count == 0;
while ($revision = db_fetch_object($revisions)) {
$row = array(
l($revision->name, "user/{$revision->uid}"),
$revision->log,
format_date($revision->created, 'custom', 'Y-m-d H:i:s'),
l('View', "admin/build/views/revisions/revision/{$revision->vrvid}"),
);
$rows[] = $row;
$revision_count++;
}
if ($revision_count == 0) {
$html .= t('There are no revisions for this view.');
return $html;
}
$html .= theme('table', $header, $rows);
return $html;
}
/**
* Page callback function for the views revisions revision page.
*/
function views_revisions_revision_page($form_state, $vrvid) {
$form = array();
$html = '';
$result = db_query("SELECT vr.vrvid, vr.vid, vr.uid, vr.created, vr.log, vr.data, u.name, vv.name as view_name\n FROM {views_revisions} vr\n LEFT OUTER JOIN {users} u ON vr.uid = u.uid\n INNER JOIN {views_view} vv ON vr.vid = vv.vid\n WHERE vrvid = %d", $vrvid);
$revision = db_fetch_object($result);
$header = array(
array(
"data" => t('User'),
),
array(
"data" => t('Message'),
),
array(
"data" => t('Created'),
),
);
$rows = array(
array(
l($revision->name, "user/{$revision->uid}"),
$revision->log,
format_date($revision->created, 'custom', 'Y-m-d H:i:s'),
),
);
$table = theme('table', $header, $rows);
$form['export_data'] = array(
'#title' => t('Export data before revision was made'),
'#type' => 'textarea',
'#value' => $revision->data,
'#rows' => 32,
);
$html .= "<h2>{$revision->view_name}</h2>" . '<p>' . l('View', "admin/build/views/edit/{$revision->view_name}") . ' » ' . l('Revisions', "admin/build/views/revisions/{$revision->view_name}") . ' »' . '</p>' . $table . '<p>' . l('Go to Import Page', 'admin/build/views/import') . '</p>';
$form['#prefix'] = $html;
return $form;
}
Functions
Name![]() |
Description |
---|---|
views_revisions_delete | Submission handler for the ctools delete confirmation form. |
views_revisions_form_alter | Implements hook_form_alter(). |
views_revisions_form_submit | Submission handler for the Views UI form. |
views_revisions_help | Implements hook_help(). |
views_revisions_menu | Implements hook_menu(). |
views_revisions_page | Page callback function for the views revisions page. |
views_revisions_revision_page | Page callback function for the views revisions revision page. |