Commit ac92551d authored by joelpittet's avatar joelpittet

Coding standards cleanup

parent fa74bd0b
<?php <?php
// $Id$
/** /**
* Implementation of hook_schema(). * @file
* Installation and update of the node_authlink module.
*/
/**
* Implements hook_schema().
*/ */
function node_authlink_schema() { function node_authlink_schema() {
$schema['node_authlink_nodes'] = array( $schema['node_authlink_nodes'] = array(
'description' => 'Table for store authorization keys.', 'description' => 'Table for store authorization keys.',
'fields' => array( 'fields' => array(
'nid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE), 'nid' => array(
'authkey' => array('type' => 'varchar', 'length' => 64, 'not null' => TRUE), 'type' => 'int',
'created' => array('type' => 'int', 'not null' => TRUE, 'default' => 0), 'unsigned' => TRUE,
'not null' => TRUE,
),
'authkey' => array(
'type' => 'varchar',
'length' => 64,
'not null' => TRUE,
),
'created' => array(
'type' => 'int',
'not null' => TRUE,
'default' => 0,
),
), ),
'primary key' => array('nid'), 'primary key' => array('nid'),
); );
return $schema; return $schema;
} }
/** /**
* Inplementation of hook_install(). * Implements hook_install().
*/ */
function node_authlink_install() { function node_authlink_install() {
drupal_set_message(t('To setup Node authorize link module go to Structure → Content types → edit → Node authorize link.')); drupal_set_message(t('To setup Node authorize link module go to Structure → Content types → edit → Node authorize link.'));
} }
/** /**
* Inplementation of hook_update_N(). * Implements hook_uninstall().
*/
function node_authlink_uninstall() {
$node_types = node_type_get_types();
foreach ($node_types as $node_type) {
variable_del('node_authlink_enable_' . $node_type->type);
variable_del('node_authlink_grants_' . $node_type->type);
variable_del('node_authlink_expire_' . $node_type->type);
}
}
/**
* Implements hook_update_N().
*/ */
function node_authlink_update_7100(&$sandbox) { function node_authlink_update_7100(&$sandbox) {
// Migrate data // Migrate data.
drupal_install_schema('node_authlink'); drupal_install_schema('node_authlink');
$keys = db_query('SELECT f.field_node_authlink_authkey_value, f.entity_id, n.created FROM $keys = db_query('SELECT f.field_node_authlink_authkey_value, f.entity_id, n.created
{field_data_field_node_authlink_authkey} AS f INNER JOIN {node} AS n ON f.entity_id = FROM {field_data_field_node_authlink_authkey} AS f INNER JOIN {node} AS n ON f.entity_id = n.nid
n.nid WHERE f.language = \'und\''); WHERE f.language = \'und\'');
foreach ($keys as $key) { foreach ($keys as $key) {
db_insert('node_authlink_nodes') db_insert('node_authlink_nodes')
...@@ -45,44 +74,33 @@ function node_authlink_update_7100(&$sandbox) { ...@@ -45,44 +74,33 @@ function node_authlink_update_7100(&$sandbox) {
)) ))
->execute(); ->execute();
} }
unset($keys); unset($keys);
// Migrate settings // Migrate settings.
$field = field_info_field('field_node_authlink_authkey'); $field = field_info_field('field_node_authlink_authkey');
$instances = field_read_instances(array('field_id' => $field['id'], 'entity_type' => 'node')); $instances = field_read_instances(array(
'field_id' => $field['id'],
'entity_type' => 'node',
));
$node_types = array(); $node_types = array();
foreach ($instances as $instance) { foreach ($instances as $instance) {
$node_types[$instance['bundle']] = $instance['bundle']; $node_types[$instance['bundle']] = $instance['bundle'];
variable_set('node_authlink_enable_' . $instance['bundle'], TRUE); variable_set('node_authlink_enable_' . $instance['bundle'], TRUE);
variable_set('node_authlink_grants_' . $instance['bundle'], $instance['node_authlink_grants']); variable_set('node_authlink_grants_' . $instance['bundle'], $instance['node_authlink_grants']);
} }
variable_set('node_authlink_types', $node_types); variable_set('node_authlink_types', $node_types);
// Cleanup // Cleanup.
field_delete_field('field_node_authlink_authkey'); field_delete_field('field_node_authlink_authkey');
} }
function node_authlink_update_7101(&$sandbox) {
variable_del('node_authlink_types');
}
/** /**
* Inplementation of hook_uninstall(). * Remove node_authlink_types variable.
*/ */
function node_authlink_uninstall() { function node_authlink_update_7101(&$sandbox) {
$node_types = node_type_get_types(); variable_del('node_authlink_types');
foreach ($node_types as $node_type) {
variable_del('node_authlink_enable_' . $node_type->type);
variable_del('node_authlink_grants_' . $node_type->type);
variable_del('node_authlink_expire_' . $node_type->type);
}
} }
<?php <?php
// $Id$
/** /**
* Alter of node_type_form. * @file
* Provides functionality for the node_authlink module.
*/
/**
* Implements hook_form_node_type_form_alter().
*/ */
function node_authlink_form_node_type_form_alter(&$form, &$form_state) { function node_authlink_form_node_type_form_alter(&$form, &$form_state) {
$form['node_authlink'] = array( $form['node_authlink'] = array(
...@@ -12,37 +16,45 @@ function node_authlink_form_node_type_form_alter(&$form, &$form_state) { ...@@ -12,37 +16,45 @@ function node_authlink_form_node_type_form_alter(&$form, &$form_state) {
'#collapsed' => TRUE, '#collapsed' => TRUE,
'#group' => 'additional_settings', '#group' => 'additional_settings',
); );
$form['node_authlink']['node_authlink_enable'] = array( $form['node_authlink']['node_authlink_enable'] = array(
'#type' => 'checkbox', '#type' => 'checkbox',
'#title' => t('Enable'), '#title' => t('Enable'),
'#default_value' => variable_get('node_authlink_enable_' . $form['#node_type']->type, FALSE), '#default_value' => variable_get('node_authlink_enable_' . $form['#node_type']->type, FALSE),
'#description' => t('Disable of this feature will cost erase of authorization keys of all nodes in this node type.'), '#description' => t('Disable of this feature will cost erase of authorization keys of all nodes in this node type.'),
); );
$form['node_authlink']['node_authlink_grants'] = array( $form['node_authlink']['node_authlink_grants'] = array(
'#type' => 'checkboxes', '#type' => 'checkboxes',
'#title' => t('Grants to give'), '#title' => t('Grants to give'),
'#default_value' => variable_get('node_authlink_grants_' . $form['#node_type']->type, array()), '#default_value' => variable_get('node_authlink_grants_' . $form['#node_type']->type, array()),
'#options' => array( '#options' => array(
'view' => t('View'), 'view' => t('View'),
'update' => t('Update'), 'update' => t('Update'),
'delete' => t('Delete'), 'delete' => t('Delete'),
), ),
'#description' => t('What operations will be temporarily given to authorised user for the node. This not affect users who is authorised yet.'), '#description' => t('What operations will be temporarily given to authorised user for the node. This not affect users who is authorised yet.'),
); );
// Time periods: none, 1 day, 1 week, 4 weeks, 3 months, 6 months, 1 year // Time periods: none, 1 day, 1 week, 4 weeks, 3 months, 6 months, 1 year.
$period = drupal_map_assoc(array(0, 86400, 604800, 2419200, 7776000, 15552000, 31536000), 'format_interval'); $period = drupal_map_assoc(array(
0,
86400,
604800,
2419200,
7776000,
15552000,
31536000,
), 'format_interval');
$period[0] = '<' . t('disabled') . '>'; $period[0] = '<' . t('disabled') . '>';
$form['node_authlink']['node_authlink_expire'] = array( $form['node_authlink']['node_authlink_expire'] = array(
'#type' => 'select', '#type' => 'select',
'#title' => t('Regenerate authkeys after'), '#title' => t('Regenerate authkeys after'),
'#default_value' => variable_get('node_authlink_expire_' . $form['#node_type']->type, 0), '#default_value' => variable_get('node_authlink_expire_' . $form['#node_type']->type, 0),
'#options' => $period, '#options' => $period,
'#description' => t('Keys older than selected time will be regenerated by cron run.'), '#description' => t('Keys older than selected time will be regenerated by cron run.'),
); );
$form['node_authlink']['node_authlink_batch'] = array( $form['node_authlink']['node_authlink_batch'] = array(
'#type' => 'fieldset', '#type' => 'fieldset',
'#collapsible' => TRUE, '#collapsible' => TRUE,
...@@ -60,57 +72,57 @@ function node_authlink_form_node_type_form_alter(&$form, &$form_state) { ...@@ -60,57 +72,57 @@ function node_authlink_form_node_type_form_alter(&$form, &$form_state) {
'#value' => t('Delete all authkeys'), '#value' => t('Delete all authkeys'),
'#submit' => array('node_authlink_batch_delete'), '#submit' => array('node_authlink_batch_delete'),
); );
$form['#submit'][] = 'node_authlink_form_node_type_form_alter_submit'; $form['#submit'][] = 'node_authlink_form_node_type_form_alter_submit';
} }
/** /**
* Submit for node_type_form. * Callback: Submit for node_type_form.
*/ */
function node_authlink_form_node_type_form_alter_submit(&$form, &$form_state) { function node_authlink_form_node_type_form_alter_submit(&$form, &$form_state) {
// Disabled // Disabled.
if(!$form_state['values']['node_authlink_enable']) { if (!$form_state['values']['node_authlink_enable']) {
variable_del('node_authlink_enable_' . $form_state['values']['type']); variable_del('node_authlink_enable_' . $form_state['values']['type']);
variable_del('node_authlink_grants_' . $form_state['values']['type']); variable_del('node_authlink_grants_' . $form_state['values']['type']);
} }
} }
/** /**
* Generate authkeys for all nodes in node type. * Callback: Generate authkeys for all nodes in node type.
*/ */
function node_authlink_batch_generate(&$form, &$form_state) { function node_authlink_batch_generate(&$form, &$form_state) {
// Load NIDs that are not in the authkeys table // Load NIDs that are not in the authkeys table.
$query = db_select('node', 'n'); $query = db_select('node', 'n');
$query->leftJoin('node_authlink_nodes', 'a', 'n.nid = a.nid'); $query->leftJoin('node_authlink_nodes', 'a', 'n.nid = a.nid');
$query->fields('n', array('nid')) $query->fields('n', array('nid'))
->condition('type', $form_state['values']['type']) ->condition('type', $form_state['values']['type'])
->isNull('authkey'); ->isNull('authkey');
$nids = $query->execute()->fetchCol(); $nids = $query->execute()->fetchCol();
// Create keys // Create keys.
foreach ($nids as $nid) { foreach ($nids as $nid) {
node_authlink_node_insert($nid); node_authlink_node_insert($nid);
if (module_exists('entitycache')) { if (module_exists('entitycache')) {
cache_clear_all($nid, 'cache_entity_node'); cache_clear_all($nid, 'cache_entity_node');
} }
} }
drupal_set_message(t('%num authkeys has been generated.', array('%num' => count($nids)))); drupal_set_message(t('%num authkeys has been generated.', array('%num' => count($nids))));
} }
/** /**
* Delete authkeys for all nodes in node type. * Callback: Delete authkeys for all nodes in node type.
*/ */
function node_authlink_batch_delete(&$form, &$form_state) { function node_authlink_batch_delete(&$form, &$form_state) {
// NIDs of nodes that are in this node type // NIDs of nodes that are in this node type.
$query = db_select('node', 'n'); $query = db_select('node', 'n');
$query->leftJoin('node_authlink_nodes', 'a', 'n.nid = a.nid'); $query->leftJoin('node_authlink_nodes', 'a', 'n.nid = a.nid');
$query->fields('n', array('nid')) $query->fields('n', array('nid'))
->condition('type', $form_state['values']['type']) ->condition('type', $form_state['values']['type'])
->isNotNull('authkey'); ->isNotNull('authkey');
$nids = $query->execute()->fetchCol(); $nids = $query->execute()->fetchCol();
// Delete keys // Delete keys.
$count = db_delete('node_authlink_nodes') $count = db_delete('node_authlink_nodes')
->condition('nid', $nids, 'IN') ->condition('nid', $nids, 'IN')
->execute(); ->execute();
...@@ -120,50 +132,65 @@ function node_authlink_batch_delete(&$form, &$form_state) { ...@@ -120,50 +132,65 @@ function node_authlink_batch_delete(&$form, &$form_state) {
cache_clear_all($nid, 'cache_entity_node'); cache_clear_all($nid, 'cache_entity_node');
} }
} }
drupal_set_message(t('%num authkeys has been deleted.', array('%num' => $count))); drupal_set_message(t('%num authkeys has been deleted.', array('%num' => $count)));
} }
/** /**
* Implementation of hook_node_load(). * Implements hook_node_load().
* *
* Appends authke to loaded node object. * Appends authkey to loaded node object.
*/ */
function node_authlink_node_load($nodes, $types) { function node_authlink_node_load($nodes, $types) {
foreach ($nodes as $nid => $node) { foreach ($nodes as $nid => $node) {
// TODO: check node type (performance) // TODO: check node type (performance)
if($authkey = node_authlink_load_authkey($nid)) if ($authkey = node_authlink_load_authkey($nid)) {
$nodes[$nid]->authkey = $authkey; $nodes[$nid]->authkey = $authkey;
}
} }
} }
/** /**
* Loads key from NID. * Loads key from NID.
*
* @param string $nid
* The node id.
*
* @return string
* The authkey.
*/ */
function node_authlink_load_authkey($nid) { function node_authlink_load_authkey($nid) {
$result = db_query('SELECT authkey FROM {node_authlink_nodes} WHERE nid = :nid', array(':nid' => $nid)); $result = db_query('SELECT authkey FROM {node_authlink_nodes} WHERE nid = :nid', array(':nid' => $nid));
return $result->fetchField(); return $result->fetchField();
} }
/** /**
* Get edit URL of specified node. * Get edit URL of specified node.
* @param $node Node object or NID. *
* @param $op Operation to do with node. view, edit (default) or delete. * @param int|object $node
* Node object or NID.
* @param string $op
* Operation to do with node. view, edit (default) or delete.
*
* @return string
* The node operation's URL with authkey query appended.
*/ */
function node_authlink_get_url($node, $op = 'edit') { function node_authlink_get_url($node, $op = 'edit') {
if(is_numeric($node)) if (is_numeric($node)) {
$node = node_load($node); $node = node_load($node);
}
if(!isset($node->authkey))
if (!isset($node->authkey)) {
return FALSE; return FALSE;
}
if($op == 'view')
if ($op == 'view') {
$op = ''; $op = '';
else }
else {
$op = '/' . $op; $op = '/' . $op;
}
return url("node/$node->nid$op", array( return url("node/$node->nid$op", array(
'absolute' => TRUE, 'absolute' => TRUE,
'query' => array('authkey' => $node->authkey), 'query' => array('authkey' => $node->authkey),
...@@ -171,77 +198,83 @@ function node_authlink_get_url($node, $op = 'edit') { ...@@ -171,77 +198,83 @@ function node_authlink_get_url($node, $op = 'edit') {
} }
/** /**
* Implementation of hook_node_access(). * Implements hook_node_access().
*/ */
function node_authlink_node_access($node, $op, $account) { function node_authlink_node_access($node, $op, $account) {
// Ignore if just creating node // Ignore if just creating node.
if($op == 'create') if ($op == 'create') {
return NODE_ACCESS_IGNORE; return NODE_ACCESS_IGNORE;
}
// Ignore if node type is not enabled
if(!variable_get('node_authlink_enable_' . $node->type, FALSE)) // Ignore if node type is not enabled.
if (!variable_get('node_authlink_enable_' . $node->type, FALSE)) {
return NODE_ACCESS_IGNORE; return NODE_ACCESS_IGNORE;
}
// Check key if: // Check key if:
if(isset($_GET['authkey']) && // authkey param is set // authkey param is set and in node is set.
isset($node->authkey)) { // authkey in node is set if (isset($_GET['authkey']) && isset($node->authkey)) {
if($node->authkey == $_GET['authkey']) { if ($node->authkey == $_GET['authkey']) {
// Start session // Start session.
if(!isset($_SESSION)) if (!isset($_SESSION)) {
drupal_session_initialize(); drupal_session_initialize();
}
// Save allowed grants to session
// Save allowed grants to session.
$_SESSION['node_authlink_nodes'][$node->nid] = variable_get('node_authlink_grants_' . $node->type, array()); $_SESSION['node_authlink_nodes'][$node->nid] = variable_get('node_authlink_grants_' . $node->type, array());
} }
} }
// Permit if checked // Permit if checked.
if(isset($_SESSION['node_authlink_nodes'][$node->nid]) && if (isset($_SESSION['node_authlink_nodes'][$node->nid]) && in_array($op, $_SESSION['node_authlink_nodes'][$node->nid])) {
in_array($op, $_SESSION['node_authlink_nodes'][$node->nid]))
return NODE_ACCESS_ALLOW; return NODE_ACCESS_ALLOW;
}
} }
/** /**
* Implementation of hook_node_presave(). * Implements hook_node_presave().
* *
* Pre-generate auth key for the new node (e.g. for use in Rules). * Pre-generate auth key for the new node (e.g. for use in Rules).
*/ */
function node_authlink_node_presave($node) { function node_authlink_node_presave($node) {
// Ignore if node type is disabled // Ignore if node type is disabled.
if(!variable_get('node_authlink_enable_' . $node->type, FALSE)) if (!variable_get('node_authlink_enable_' . $node->type, FALSE)) {
return; return;
}
// Generate key // Generate key.
if (!isset($node->authkey)) { if (!isset($node->authkey)) {
$node->authkey = hash('sha256', drupal_random_bytes(64)); $node->authkey = hash('sha256', drupal_random_bytes(64));
} }
} }
/** /**
* Implementation of hook_node_insert(). * Implements hook_node_insert().
* *
* Generate and save auth key for the new node. * Generate and save auth key for the new node.
*/ */
function node_authlink_node_insert($node) { function node_authlink_node_insert($node) {
// Allow key generate without load node object // Allow key generate without load node object.
if(is_numeric($node)) if (is_numeric($node)) {
$nid = $node; $nid = $node;
}
else { else {
$nid = $node->nid; $nid = $node->nid;
// Ignore if node type is disabled // Ignore if node type is disabled.
if(!variable_get('node_authlink_enable_' . $node->type, FALSE)) if (!variable_get('node_authlink_enable_' . $node->type, FALSE)) {
return; return;
}
} }
// Generate key if not yet // Generate key if not yet.
$authkey = isset($node->authkey) ? $node->authkey : hash('sha256', drupal_random_bytes(64)); $authkey = isset($node->authkey) ? $node->authkey : hash('sha256', drupal_random_bytes(64));
// Save to DB // Save to DB.
db_insert('node_authlink_nodes') db_insert('node_authlink_nodes')
->fields(array( ->fields(array(
'nid' => $nid, 'nid' => $nid,
'authkey' => $authkey, 'authkey' => $authkey,
'created' => time(), 'created' => time(),
)) ))
...@@ -249,25 +282,26 @@ function node_authlink_node_insert($node) { ...@@ -249,25 +282,26 @@ function node_authlink_node_insert($node) {
} }
/**