Now all modules are in core modules folder

This commit is contained in:
Manuel Cillero 2017-08-08 12:14:45 +02:00
parent 5ba1cdfa0b
commit 05b6a91b0c
1907 changed files with 0 additions and 0 deletions

View file

@ -0,0 +1,275 @@
<?php
/**
* @file
*/
function stormdok_list() {
$breadcrumb = array();
$breadcrumb[] = l(t('SuiteDesk'), 'dashboard');
drupal_set_breadcrumb($breadcrumb);
if (array_key_exists('organization_nid', $_GET)) {
if ($_SESSION['stormdok_list_filter']['organization_nid'] != $_GET['organization_nid']) {
$_SESSION['stormdok_list_filter']['organization_nid'] = $_GET['organization_nid'];
}
unset($_SESSION['stormdok_list_filter']['project_nid']);
unset($_SESSION['stormdok_list_filter']['task_nid']);
}
if (array_key_exists('project_nid', $_GET)) {
if ($_SESSION['stormdok_list_filter']['project_nid'] != $_GET['project_nid']) {
$_SESSION['stormdok_list_filter']['project_nid'] = $_GET['project_nid'];
}
$p = node_load($_GET['project_nid']);
$_SESSION['stormdok_list_filter']['organization_nid'] = $p->organization_nid;
unset($_SESSION['stormdok_list_filter']['task_nid']);
}
if (array_key_exists('task_nid', $_GET)) {
if ($_SESSION['stormdok_list_filter']['task_nid'] != $_GET['task_nid']) {
$_SESSION['stormdok_list_filter']['task_nid'] = $_GET['task_nid'];
}
$t = node_load($_GET['task_nid']);
$_SESSION['stormdok_list_filter']['organization_nid'] = $t->organization_nid;
$_SESSION['stormdok_list_filter']['project_nid'] = $t->project_nid;
}
$i = new stdClass();
$i->type = 'stormdok';
$params = $_GET;
if (isset($_SESSION['stormdok_list_filter']['organization_nid'])) {
$params['organization_nid'] = $_SESSION['stormdok_list_filter']['organization_nid'];
}
$header = array(
array(
'data' => ' ',
),
array(
'data' => ' ',
'field' => 'tdo.field_stormdok_status_value',
),
array(
'data' => t('Title') . ' / ' . t('Organization') . ' » ' . t('Project') . ' » ' . t('Task'),
'field' => 'n.title',
),
array(
'data' => ' ',
),
array(
'data' => t('Created'),
'field' => 'n.created',
'class' => 'storm_list_date',
),
array(
'data' => t('Modified'),
'field' => 'n.changed',
'class' => 'storm_list_date',
'sort' => 'desc',
),
array(
'data' => t('Rev.'),
'field' => 'sdo.version',
'class' => 'storm_list_version',
),
array(
'data' => storm_icon_add_node($i, $params),
'class' => 'storm_list_operations',
),
);
$s = "SELECT n.*, sdo.*, nre.format, tdo.*, fdo.field_stormdok_attach_list AS clip FROM {node} AS n
INNER JOIN {stormdok} AS sdo ON n.vid=sdo.vid
INNER JOIN {node_revisions} AS nre ON n.vid = nre.vid
INNER JOIN {content_type_stormdok} AS tdo ON n.vid = tdo.vid
LEFT JOIN {content_field_stormdok_attach} AS fdo ON n.vid = fdo.vid AND fdo.field_stormdok_attach_list = 1 AND fdo.delta = 0
WHERE n.status=1 AND n.type='stormdok'";
$where = array();
$args = array();
$filterfields = array();
if (isset($_SESSION['stormdok_list_filter']['organization_nid']) && $_SESSION['stormdok_list_filter']['organization_nid'] != 0) {
$where[] = 'sdo.organization_nid=%d';
$args[] = $_SESSION['stormdok_list_filter']['organization_nid'];
$filterfields[] = t('Organization');
}
if (isset($_SESSION['stormdok_list_filter']['project_nid']) && $_SESSION['stormdok_list_filter']['project_nid'] != 0) {
$where[] = 'sdo.project_nid=%d';
$args[] = $_SESSION['stormdok_list_filter']['project_nid'];
$filterfields[] = t('Project');
}
if (isset($_SESSION['stormdok_list_filter']['task_nid']) && $_SESSION['stormdok_list_filter']['task_nid'] != 0) {
$where[] = 'sdo.task_nid=%d';
$args[] = $_SESSION['stormdok_list_filter']['task_nid'];
$filterfields[] = t('Task');
}
if (isset($_SESSION['stormdok_list_filter']['title']) && $_SESSION['stormdok_list_filter']['title'] != '') {
$where[] = "LOWER(n.title) LIKE LOWER('%s')";
$args[] = $_SESSION['stormdok_list_filter']['title'];
$filterfields[] = t('Title');
}
// This section only provides the value for the fieldset label, doesn't control actual filter
$itemsperpage = isset($_SESSION['stormdok_list_filter']['itemsperpage']) ? $_SESSION['stormdok_list_filter']['itemsperpage'] : variable_get('storm_default_items_per_page', 10);
if (count($filterfields) == 0) {
$filterdesc = t('Not filtered');
}
else {
$filterdesc = t('Filtered by !fields', array('!fields' => implode(", ", array_unique($filterfields))));
}
$filterdesc .= ' | '. t('!items items per page', array('!items' => $itemsperpage));
$o = drupal_get_form('stormdok_list_filter', $filterdesc);
$s = stormdok_access_sql($s, $where);
$s = db_rewrite_sql($s);
$tablesort = tablesort_sql($header);
$r = pager_query($s . $tablesort, $itemsperpage, 0, NULL, $args);
$doks = array();
while ($item = db_fetch_object($r)) {
$doks[] = $item;
}
$o .= theme('stormdok_list', $header, $doks);
$o .= theme('pager', NULL, $itemsperpage, 0);
print theme('page', $o);
}
function stormdok_list_filter(&$form_state, $filterdesc = 'Filter') {
$organization_nid = isset($_SESSION['stormdok_list_filter']['organization_nid']) ? $_SESSION['stormdok_list_filter']['organization_nid'] : 0;
$project_nid = isset($_SESSION['stormdok_list_filter']['project_nid']) ? $_SESSION['stormdok_list_filter']['project_nid'] : 0;
$task_nid = isset($_SESSION['stormdok_list_filter']['task_nid']) ? $_SESSION['stormdok_list_filter']['task_nid'] : 0;
$title = isset($_SESSION['stormdok_list_filter']['title']) ? $_SESSION['stormdok_list_filter']['title'] : '';
$itemsperpage = isset($_SESSION['stormdok_list_filter']['itemsperpage']) ? $_SESSION['stormdok_list_filter']['itemsperpage'] : variable_get('storm_default_items_per_page', 10);
$_SESSION['stormdok_list_filter']['itemsperpage'] = $itemsperpage;
$form = array();
$form['filter'] = array(
'#type' => 'fieldset',
'#title' => $filterdesc,
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$form['filter']['group1'] = array(
'#type' => 'markup',
'#theme' => 'storm_form_group',
);
$s = "SELECT n.nid, n.title FROM {node} AS n INNER JOIN {stormorganization} AS sor ON sor.vid=n.vid WHERE n.status=1 AND n.type='stormorganization' ORDER BY n.title";
$s = stormorganization_access_sql($s);
$s = db_rewrite_sql($s);
$r = db_query($s);
$organizations = array();
while ($organization = db_fetch_object($r)) {
$organizations[$organization->nid] = $organization->title;
}
$organizations = array(0 => t('All')) + $organizations;
$form['filter']['group1']['organization_nid'] = array(
'#type' => 'select',
'#title' => t('Organization'),
'#default_value' => $organization_nid,
'#options' => $organizations,
'#attributes' => array('onchange' => "stormtask_organization_project_tasks(this, 'edit-project-nid', 'edit-task-nid', '', true, '" . t('All') . "')"),
);
$s = "SELECT n.nid, n.title FROM {node} AS n INNER JOIN {stormproject} AS spr ON spr.vid=n.vid
WHERE n.status=1 AND spr.organization_nid=%d AND n.type='stormproject' ORDER BY n.title";
$s = stormproject_access_sql($s);
$s = db_rewrite_sql($s);
$r = db_query($s, $organization_nid);
$projects = array();
while ($project = db_fetch_object($r)) {
$projects[$project->nid] = $project->title;
}
$projects = array(0 => t('All')) + $projects;
$form['filter']['group1']['project_nid'] = array(
'#type' => 'select',
'#title' => t('Project'),
'#default_value' => $project_nid,
'#options' => $projects,
'#process' => array('storm_dependent_select_process'),
'#attributes' => array('onchange' => "stormtask_project_tasks('edit-organization-nid', this, 'edit-task-nid', '', true, '" . t('All') . "')"),
);
$s = "SELECT n.nid, n.title FROM {node} AS n INNER JOIN {stormtask} AS sta ON sta.nid=n.nid WHERE n.status=1 AND n.type='stormtask' AND sta.project_nid=%d ORDER BY title ";
$s = stormtask_access_sql($s);
$s = db_rewrite_sql($s);
$r = db_query($s, $project_nid);
$tasks = array();
while ($task = db_fetch_object($r)) {
$tasks[$task->nid] = $task->title;
}
$tasks = array(0 => t('All')) + $tasks;
$form['filter']['group1']['task_nid'] = array(
'#type' => 'select',
'#title' => t('Task'),
'#default_value' => $task_nid,
'#options' => $tasks,
);
$form['filter']['group2'] = array(
'#type' => 'markup',
'#theme' => 'storm_form_group',
);
$form['filter']['group2']['title'] = array(
'#type' => 'textfield',
'#title' => t('Title'),
'#default_value' => $title,
);
$form['filter']['group3'] = array(
'#type' => 'markup',
'#theme' => 'storm_form_group',
'#attributes' => array('class' => 'formgroup-submit'),
);
$form['filter']['group3']['submit'] = array(
'#type' => 'submit',
'#value' => t('Filter'),
'#submit' => array('stormdok_list_filter_filter'),
);
$form['filter']['group3']['reset'] = array(
'#type' => 'submit',
'#value' => t('Reset'),
'#submit' => array('stormdok_list_filter_reset'),
);
$form['filter']['group3']['itemsperpage'] = array(
'#type' => 'textfield',
'#title' => t('Items'),
'#size' => 10,
'#default_value' => $itemsperpage,
'#prefix' => '<div class="container-inline">',
'#suffix' => '</div>',
);
return $form;
}
function stormdok_list_filter_reset($form, &$form_state) {
unset($_SESSION['stormdok_list_filter']);
}
function stormdok_list_filter_filter($form, &$form_state) {
$_SESSION['stormdok_list_filter']['organization_nid'] = $form_state['values']['organization_nid'];
$_SESSION['stormdok_list_filter']['project_nid'] = $form_state['values']['project_nid'];
$_SESSION['stormdok_list_filter']['task_nid'] = $form_state['values']['task_nid'];
$_SESSION['stormdok_list_filter']['title'] = $form_state['values']['title'];
$_SESSION['stormdok_list_filter']['itemsperpage'] = $form_state['values']['itemsperpage'];
}

View file

@ -0,0 +1,10 @@
name = Storm Dok
description = "Allows creation of documents about organizations, projects or tasks."
dependencies[] = storm
dependencies[] = stormorganization
dependencies[] = stormproject
dependencies[] = stormtask
package = Storm
core = 6.x
version = "6.x-2.2"

View file

@ -0,0 +1,44 @@
<?php
/**
* @file
*/
function stormdok_install() {
drupal_install_schema('stormdok');
variable_set('node_options_stormdok', array('status'));
}
function stormdok_disable() {
drupal_set_message(t('Nodes of type "Dok" have not been deleted on disabling SuiteDesk Dok. Please note that they will now have reduced functionality, and will not be protected by SuiteDesk Dok access controls.'), 'warning');
}
function stormdok_uninstall() {
drupal_uninstall_schema('stormdok');
}
function stormdok_schema() {
$schema['stormdok'] = array(
'fields' => array(
'vid' => array('type' => 'int', 'not null' => TRUE, 'default' => 0),
'nid' => array('type' => 'int', 'not null' => TRUE, 'default' => 0),
'organization_nid' => array('type' => 'int'),
'organization_title' => array('type' => 'varchar', 'length' => 128),
'project_nid' => array('type' => 'int'),
'project_title' => array('type' => 'varchar', 'length' => 128),
'task_nid' => array('type' => 'int'),
'task_title' => array('type' => 'varchar', 'length' => 128),
'version' => array('type' => 'varchar', 'length' => 12),
'dok_access' => array('type' => 'int', 'default' => 0),
),
'primary key' => array('vid'),
'indexes' => array(
'nid' => array('nid'),
'organization_nid' => array('organization_nid'),
'project_nid' => array('project_nid'),
'task_nid' => array('task_nid'),
),
);
return $schema;
}

View file

@ -0,0 +1,673 @@
<?php
/**
* @file
*/
function stormdok_help($path, $arg) {
$o = '';
switch ($path) {
case "admin/help#stormdok":
$o = '<p>'. t("Provides documents support for SuiteDesk") .'</p>';
break;
}
return $o;
}
function stormdok_perm() {
return array(
'Storm dok: access',
'Storm dok: add',
'Storm dok: delete all',
'Storm dok: delete own',
'Storm dok: delete of user organization',
'Storm dok: edit all',
'Storm dok: edit own',
'Storm dok: edit of user organization',
'Storm dok: edit if assigned to project',
'Storm dok: view all',
'Storm dok: view own',
'Storm dok: view of user organization',
'Storm dok: view publics of user organization',
'Storm dok: view if assigned to project',
'Storm dok: view authorised if assigned to project',
);
}
function stormdok_access($op, $node, $account = NULL) {
if (empty($account)) {
global $user;
$account = $user;
}
if ($op == 'create') {
return user_access('Storm dok: add');
}
if (is_numeric($node)) {
$node = node_load($node);
}
if (!isset($account->stormorganization_nid) && module_exists('stormperson')) {
_stormperson_user_load($account);
}
if ($op == 'delete') {
if (user_access('Storm dok: delete all')) {
return TRUE;
}
elseif (user_access('Storm dok: delete own') && ($account->uid == $node->uid)) {
return TRUE;
}
elseif (user_access('Storm dok: delete of user organization') && ($account->stormorganization_nid == $node->organization_nid) && ($node->dok_access == 0)) {
return TRUE;
}
}
if ($op == 'update') {
if (user_access('Storm dok: edit all')) {
return TRUE;
}
elseif (user_access('Storm dok: edit own') && ($account->uid == $node->uid)) {
return TRUE;
}
elseif (user_access('Storm dok: edit of user organization') && ($account->stormorganization_nid == $node->organization_nid) && ($node->dok_access == 0)) {
return TRUE;
}
elseif (user_access('Storm dok: edit if assigned to project') && module_exists('stormteam') && ($node->dok_access == 0)) {
$project = node_load($node->project_nid);
if (stormteam_user_belongs_to_team($project->assigned_nid, $account->stormperson_nid)) {
return TRUE;
}
elseif (stormteam_user_belongs_to_team($project->assigned_nid, $account->stormorganization_nid)) {
return TRUE;
}
}
}
if ($op == 'view') {
if (user_access('Storm dok: view all')) {
return TRUE;
}
elseif (user_access('Storm dok: view own') && ($account->uid == $node->uid)) {
return TRUE;
}
elseif (user_access('Storm dok: view of user organization') && ($account->stormorganization_nid == $node->organization_nid) && ($node->dok_access != 3)) {
return TRUE;
}
elseif (user_access('Storm dok: view publics of user organization') && ($account->stormorganization_nid == $node->organization_nid) && ($node->dok_access == 1)) {
return TRUE;
}
elseif (user_access('Storm dok: view if assigned to project') && module_exists('stormteam') && ($node->dok_access != 3)) {
$project = node_load($node->project_nid);
if (stormteam_user_belongs_to_team($project->assigned_nid, $account->stormperson_nid)) {
return TRUE;
}
elseif (stormteam_user_belongs_to_team($project->assigned_nid, $account->stormorganization_nid)) {
return TRUE;
}
}
elseif (user_access('Storm dok: view authorised if assigned to project') && module_exists('stormteam') && ($node->dok_access == 2)) {
$project = node_load($node->project_nid);
if (stormteam_user_belongs_to_team($project->assigned_nid, $account->stormperson_nid)) {
return TRUE;
}
elseif (stormteam_user_belongs_to_team($project->assigned_nid, $account->stormorganization_nid)) {
return TRUE;
}
}
}
return FALSE;
}
function stormdok_access_sql($sql, $where = array()) {
if (!user_access('Storm dok: view all')) {
global $user;
$cond = '';
$join = array();
if (user_access('Storm dok: view own')) {
$cond .= 'n.uid = ' . $user->uid;
}
if (user_access('Storm dok: view of user organization')) {
$cond .= !empty($cond) ? ' OR ' : '';
$cond .= 'sdo.organization_nid = ' . $user->stormorganization_nid . ' AND sdo.dok_access != 3)';
}
if (user_access('Storm dok: view publics of user organization')) {
$cond .= !empty($cond) ? ' OR ' : '';
$cond .= '(sdo.organization_nid = ' . $user->stormorganization_nid . ' AND sdo.dok_access = 1)';
}
$user_access_authorised = user_access('Storm dok: view authorised if assigned to project');
if (user_access('Storm dok: view if assigned to project') || $user_access_authorised) {
$join[] = 'LEFT JOIN {node} npr ON npr.nid = sdo.project_nid';
$join[] = 'LEFT JOIN {stormproject} spr ON spr.vid = npr.vid';
$cond .= !empty($cond) ? ' OR ' : '';
$cond .= '(sdo.dok_access';
$cond .= $user_access_authorised ? ' = 2' : ' != 3';
$cond .= ' AND (spr.assigned_nid = ' . $user->stormperson_nid;
if (module_exists('stormteam')) {
// Load teams that the account belongs to:
$belonged_teams = stormteam_user_return_teams();
// Allow access if any of those teams is the one in question:
foreach ($belonged_teams as $belonged_team) {
$cond .= ' OR spr.assigned_nid = ' . $belonged_team;
}
}
$cond .= '))';
}
$where[] = empty($cond) ? '0 = 1' : $cond;
}
$where[] = "'storm_access' = 'storm_access'";
return storm_rewrite_sql($sql, $where, $join);
}
function stormdok_storm_rewrite_where_sql($query, $primary_table, $account) {
static $conds = array();
if (isset($conds[$primary_table][$account->uid])) {
return $conds[$primary_table][$account->uid];
}
$cond = '';
if (!preg_match("/'storm_access' = 'storm_access'/", $query)) {
if (user_access('Storm dok: view all', $account)) {
return '';
}
$from = '{stormdok} sdo1';
if (user_access('Storm dok: view own', $account)) {
$cond .= "${primary_table}.uid = " . $account->uid;
}
if (user_access('Storm dok: view of user organization', $account)) {
$cond .= !empty($cond) ? ' OR ' : '';
# If function is called without viewing an organization, this variable
# may not be set. These lines check for that and set the organization
# node id to zero if not otherwise set.
if (!isset($account->stormorganization_nid)) {
$account->stormorganization_nid = 0;
}
$cond .= ' (sdo1.organization_nid = ' . $account->stormorganization_nid . ' AND sdo1.dok_access != 3)';
}
if (user_access('Storm dok: view publics of user organization', $account)) {
$cond .= !empty($cond) ? ' OR ' : '';
# If function is called without viewing an organization, this variable
# may not be set. These lines check for that and set the organization
# node id to zero if not otherwise set.
if (!isset($account->stormorganization_nid)) {
$account->stormorganization_nid = 0;
}
$cond .= ' (sdo1.organization_nid = ' . $account->stormorganization_nid . ' AND sdo1.dok_access = 1)';
}
$user_access_authorised = user_access('Storm dok: view authorised if assigned to project');
if (user_access('Storm dok: view if assigned to project') || $user_access_authorised) {
$from .= ' LEFT JOIN {node} npr1 ON npr1.nid = sdo1.project_nid LEFT JOIN {stormproject} spr1 ON spr1.vid = npr1.vid';
$cond .= !empty($cond) ? ' OR ' : '';
$cond .= '(sdo1.dok_access';
$cond .= $user_access_authorised ? ' = 2' : ' != 3';
$cond .= ' AND (spr1.assigned_nid = ' . $account->stormperson_nid;
if (module_exists('stormteam')) {
// Load teams that the account belongs to:
$belonged_teams = stormteam_user_return_teams($account);
// Allow access if any of those teams is the one in question:
foreach ($belonged_teams as $belonged_team) {
$cond .= ' OR spr1.assigned_nid = ' . $belonged_team;
}
}
$cond .= '))';
}
if ($cond) {
$cond = " WHEN 'stormdok' THEN (SELECT IF($cond, 1, 0) FROM ${from} WHERE sdo1.vid = ${primary_table}.vid) ";
} else {
$cond = " WHEN 'stormdok' THEN 0 ";
}
}
$conds[$primary_table][$account->uid] = $cond;
return $cond;
}
function stormdok_db_rewrite_sql($query, $primary_table, $primary_field, $args) {
if (($primary_table == 't' || $primary_table == 'term_data') && $primary_field == 'tid' && !empty($args['view']) && $args['view']->name == 'storm_doks_tags') {
if (preg_match("/'storm_access'='storm_access'/", $query)) {
return array();
}
global $user;
$conditions = array();
$primary_table = 'node_term_node';
$condition = stormdok_storm_rewrite_where_sql($query, $primary_table, $user);
if ($condition) {
$conditions[] = $condition;
}
$return = array();
$where = '';
if ($conditions) {
switch ($GLOBALS['db_type']) {
case 'mysql':
case 'mysqli':
$where = '(';
$where .= " CASE ${primary_table}.type ";
foreach ($conditions as $condition) {
$where .= $condition .' ';
}
$where .= ' ELSE 1 END ';
$where .= ' )=1 ';
$return['where'] = $where;
break;
case 'pgsql':
break;
}
}
# drupal_set_message(print_r($return, TRUE));
return $return;
}
}
function stormdok_menu() {
$items = array();
$items['doks'] = array(
'title' => 'Documentation',
'description' => 'SuiteDesk documents',
'page callback' => 'stormdok_list',
'access arguments' => array('Storm dok: access'),
'type' => MENU_NORMAL_ITEM,
'file' => 'stormdok.admin.inc',
'weight' => 7,
);
return $items;
}
function stormdok_theme() {
return array(
'stormdok_list' => array(
'file' => 'stormdok.theme.inc',
'arguments' => array('header', 'doks'),
),
'stormdok_view' => array(
'file' => 'stormdok.theme.inc',
'arguments' => array('node', 'teaser', 'page'),
),
);
}
function stormdok_node_info() {
return array(
'stormdok' => array(
'name' => t('Dok'),
'module' => 'stormdok',
'description' => t("A document for SuiteDesk."),
'has_body' => TRUE,
)
);
}
function stormdok_content_extra_fields($type_name) {
if ($type_name == 'stormdok') {
return array(
'group1' => array('label' => 'Organization/Project/Task Group', 'weight' => -20),
'group2' => array('label' => 'Access Group', 'weight' => -19),
'groupv' => array('label' => 'New revision', 'weight' => -18),
);
}
}
function stormdok_stormorganization_change($organization_nid, $organization_title) {
$s = "UPDATE {stormdok} SET organization_title='%s' WHERE organization_nid=%d AND organization_title <> '%s'";
db_query($s, $organization_title, $organization_nid, $organization_title);
}
function stormdok_stormproject_change($project_nid, $project_title) {
$s = "UPDATE {stormdok} SET project_title='%s' WHERE project_nid=%d AND project_title <> '%s'";
db_query($s, $project_title, $project_nid, $project_title);
}
function stormdok_stormtask_change($task_nid, $task_title, $task_stepno) {
$s = "UPDATE {stormdok} SET task_title='%s' WHERE task_nid=%d AND task_title<>'%s'";
db_query($s, $task_title, $task_nid, $task_title);
}
function stormdok_stormproject_change_hierarchy($project_nid, $organization_nid, $organization_title) {
$s = "UPDATE {stormdok} SET organization_nid=%d, organization_title='%s' WHERE project_nid=%d";
db_query($s, $organization_nid, $organization_title, $project_nid);
}
function stormdok_stormtask_change_hierarchy($task_nid, $organization_nid, $organization_title, $project_nid, $project_title) {
$s = "UPDATE {stormdok} SET organization_nid=%d, organization_title='%s', project_nid=%d, project_title='%s' WHERE task_nid=%d";
db_query($s, $organization_nid, $organization_title, $project_nid, $project_title, $task_nid);
}
function stormdok_form(&$node) {
$breadcrumb = array();
$breadcrumb[] = l(t('SuiteDesk'), 'dashboard');
$breadcrumb[] = l(t('Documentation'), 'doks');
drupal_set_breadcrumb($breadcrumb);
if (arg(1)=='add') {
if (array_key_exists('organization_nid', $_GET) && !$node->organization_nid) {
$node->organization_nid = $_GET['organization_nid'];
}
if (array_key_exists('project_nid', $_GET) && !$node->project_nid) {
$node->project_nid = $_GET['project_nid'];
$p = node_load($node->project_nid);
$node->organization_nid = $p->organization_nid;
if (!stormorganization_access('view', $node->organization_nid)) {
drupal_set_message(t("You cannot add a document for this project, as you do not have access to view the organization's profile"));
drupal_goto('node/'. $node->project_nid);
}
}
if (array_key_exists('task_nid', $_GET) && !$node->task_nid) {
$node->task_nid = $_GET['task_nid'];
$t = node_load($node->task_nid);
$node->organization_nid = $t->organization_nid;
$node->project_nid = $t->project_nid;
// $project_access deals with the case whereby the project could be blank, hence access rules not required
$project_access = $node->project_nid ? stormproject_access('view', $node->project_nid) : TRUE;
if (!stormorganization_access('view', $node->organization_nid) || !stormproject_access('view', $node->project_nid)) {
drupal_set_message(t("You cannot add a document for this task, as you do not have access to view the both the organization and project's profile"));
drupal_goto('node/'. $node->task_nid);
}
}
if (!empty($_SESSION['stormdok_list_filter']['organization_nid']) && !$node->organization_nid) {
$node->organization_nid = $_SESSION['stormdok_list_filter']['organization_nid'];
}
if (!empty($_SESSION['stormdok_list_filter']['project_nid']) && !$node->project_nid) {
$node->project_nid = $_SESSION['stormdok_list_filter']['project_nid'];
}
if (!empty($_SESSION['stormdok_list_filter']['task_nid']) && !$node->task_nid) {
$node->task_nid = $_SESSION['stormdok_list_filter']['task_nid'];
}
$s_org = "SELECT n.nid, n.title FROM {stormorganization} so INNER JOIN {node} n
ON so.nid=n.nid WHERE n.status=1 AND so.isactive=1 AND n.type='stormorganization' ORDER BY n.title";
}
else {
$s_org = "SELECT n.nid, n.title FROM {stormorganization} so INNER JOIN {node} n
ON so.nid=n.nid WHERE n.status=1 AND n.type='stormorganization' ORDER BY n.title";
}
$type = node_get_types('type', $node);
$form['group1'] = array(
'#type' => 'markup',
'#theme' => 'storm_form_group',
'#weight' => module_exists('content') ? content_extra_field_weight($node->type, 'group1') : -20,
);
$s_org = stormorganization_access_sql($s_org);
$s_org = db_rewrite_sql($s_org);
$r = db_query($s_org);
$organizations = array();
while ($organization = db_fetch_object($r)) {
$organizations[$organization->nid] = $organization->title;
/* if (!isset($node->organization_nid)) {
$node->organization_nid = $organization->nid;
} */
}
$form['group1']['organization_nid'] = array(
'#type' => 'select',
'#title' => t('Organization'),
'#default_value' => $node->organization_nid,
'#options' => array(0 => '-') + $organizations,
'#attributes' => array('onchange' => "stormtask_organization_project_tasks(this, 'edit-project-nid', 'edit-parent-nid', '', true, '-')"),
);
$s = "SELECT n.nid, n.title FROM {node} n INNER JOIN {stormproject} spr ON spr.vid=n.vid WHERE spr.organization_nid=%d AND n.status=1 AND n.type='stormproject' ORDER BY n.title";
$s = stormproject_access_sql($s);
$s = db_rewrite_sql($s);
$r = db_query($s, $node->organization_nid);
$projects = array();
while ($project = db_fetch_object($r)) {
$projects[$project->nid] = $project->title;
}
$form['group1']['project_nid'] = array(
'#type' => 'select',
'#title' => t('Project'),
'#default_value' => isset($node->project_nid) ? $node->project_nid : NULL,
'#options' => array(0 => '-') + $projects,
'#process' => array('storm_dependent_select_process'),
'#attributes' => array('onchange' => "stormtask_project_tasks('edit-organization-nid', this, 'edit-task-nid', '', true, '-')"),
);
$tree = isset($node->project_nid) ? _stormtask_get_tree($node->project_nid) : array();
$tasks = _stormtask_plain_tree($tree);
$form['group1']['task_nid'] = array(
'#type' => 'select',
'#title' => t('Task'),
'#default_value' => isset($node->task_nid) ? $node->task_nid : NULL,
'#options' => array(0 => '-') + $tasks,
'#process' => array('storm_dependent_select_process'),
);
$form['group2'] = array(
'#type' => 'markup',
'#theme' => 'storm_form_group',
'#weight' => module_exists('content') ? content_extra_field_weight($node->type, 'group2') : -19,
'#attributes' => array('class' => 'formgroup_access'),
);
$dok_access = array();
$dok_access[1] = '<strong>' . t('Public') . '</strong><div class="description">' . t('Visible for all users of organization. Organization required.') . '</div>';
$dok_access[0] = '<strong>' . t('Default access') . '</strong><div class="description">' . t('Visible and editable for staff assigned to project. Project required.') . '</div>';
$dok_access[2] = '<strong>' . t('Authorised') . '</strong><div class="description">' . t('Visible for all users assigned to project. Project required.') . '</div>';
$dok_access[3] = '<strong>' . t('Private') . '</strong><div class="description">' . t('For my eyes only and Administrators.') . '</div>';
$form['group2']['dok_access'] = array(
'#type' => 'radios',
'#default_value' => isset($node->dok_access) ? $node->dok_access : 0,
'#required' => TRUE,
'#options' => $dok_access,
'#weight' => 1,
);
$form['title'] = array(
'#type' => 'textfield',
'#title' => check_plain($type->title_label),
'#required' => TRUE,
'#default_value' => $node->title,
'#weight' => module_exists('content') ? content_extra_field_weight($node->type, 'title') : -16,
);
$form['groupv'] = array(
'#type' => 'markup',
'#title' => t('New review'),
'#theme' => 'storm_form_group',
'#weight' => module_exists('content') ? content_extra_field_weight($node->type, 'groupv') : -12,
);
$options = array();
$options['no review'] = t('Don\'t create any revision (change the current)');
$options['minor review'] = t('Create a new review due to a minor modification');
$options['major review'] = t('Create a new version by a major modification');
$form['groupv']['review'] = array(
'#type' => 'radios',
'#options' => $options,
'#default_value' => 'no review',
);
$form['groupv']['reviewlog'] = array(
'#title' => t('Log message'),
'#type' => 'textfield',
'#size' => 255,
'#default_value' => NULL,
);
if ($type->has_body) {
$form['body_field'] = node_body_field($node, $type->body_label, $type->min_word_count);
}
return $form;
}
function stormdok_insert($node) {
_stormdok_beforesave($node);
db_query("INSERT INTO {stormdok}
(vid, nid,
organization_nid, organization_title,
project_nid, project_title,
task_nid, task_title,
version, dok_access
) VALUES
(%d, %d,
%d, '%s',
%d, '%s',
%d, '%s',
'%s', %d
)",
$node->vid, $node->nid,
$node->organization_nid, $node->organization_title,
$node->project_nid, $node->project_title,
$node->task_nid, $node->task_title,
$node->version, $node->dok_access
);
}
function stormdok_update($node) {
// if this is a new node or we're adding a new revision,
if ($node->revision) {
stormdok_insert($node);
} else {
_stormdok_beforesave($node);
db_query("UPDATE {stormdok} SET
organization_nid=%d, organization_title='%s',
project_nid=%d, project_title='%s',
task_nid=%d, task_title='%s',
version='%s', dok_access=%d
WHERE vid = %d",
$node->organization_nid, $node->organization_title,
$node->project_nid, $node->project_title,
$node->task_nid, $node->task_title,
$node->version, $node->dok_access,
$node->vid);
}
}
function _stormdok_beforesave(&$node) {
$s = "SELECT n.title FROM {node} n INNER JOIN {stormorganization} o ON n.nid=o.nid
WHERE type='stormorganization' AND n.nid=%d";
$r = db_query($s, $node->organization_nid);
$o = db_fetch_object($r);
$node->organization_title = $o->title;
$s = "SELECT n.title FROM {node} n INNER JOIN {stormproject} p ON n.nid=p.nid
WHERE type='stormproject' AND n.nid=%d";
$r = db_query($s, $node->project_nid);
$p = db_fetch_object($r);
$node->project_title = isset($p->title) ? $p->title : '';
$s = "SELECT n.title FROM {node} n INNER JOIN {stormtask} p ON n.nid=p.nid
WHERE type='stormtask' AND n.nid=%d";
$r = db_query($s, $node->task_nid);
$t = db_fetch_object($r);
$node->task_title = isset($t->title) ? $t->title : '';
}
function stormdok_nodeapi(&$node, $op, $teaser, $page) {
if ($node->type != 'stormdok') {
return;
}
// Suffix for public (U+00B0), authorised (U+207B) and private (U+00AA) nodes:
$dok_suffix = array(1 => '°', 2 => 'ª', 3 => '⁻');
switch ($op) {
case 'prepare':
$pos_suffix = strpos($node->title, $dok_suffix[$node->dok_access]);
if ($node->dok_access >= 1 && $node->dok_access <= 3 && $pos_suffix) {
$node->title = substr($node->title, 0, $pos_suffix);
}
break;
case 'validate';
if ($node->dok_access == 0 && empty($node->project_nid)) {
$field_nid = empty($node->organization_nid) ? 'organization_nid' : 'project_nid';
$field_msg = empty($node->organization_nid) ? 'Organization and Project' : 'Project';
form_set_error($field_nid, t($field_msg . ' required in default access for staff assigned to the project.'));
}
if ($node->dok_access == 1 && empty($node->organization_nid)) {
form_set_error('organization_nid', t('Organization required in public view for all users of the organization.'));
}
if ($node->dok_access == 2 && empty($node->project_nid)) {
$field_nid = empty($node->organization_nid) ? 'organization_nid' : 'project_nid';
$field_msg = empty($node->organization_nid) ? 'Organization and Project' : 'Project';
form_set_error($field_nid, t($field_msg . ' required in authorised view for all users assigned to the project.'));
}
break;
case 'presave':
if ($node->dok_access >= 1 && $node->dok_access <= 3 && !strpos($node->title, $dok_suffix[$node->dok_access])) {
$node->title .= $dok_suffix[$node->dok_access];
}
break;
case 'view':
$bid = $node->book['bid'];
$project_nid = $node->project_nid;
if (!empty($bid) && !empty($project_nid) && $page && !storm_cron_is_running()) {
$rootbook = node_load($bid);
if ($rootbook->type == 'stormproject' && $bid != $project_nid) {
drupal_set_message(t('Warning! The visibility of this document depends on a project that does not match the root project of this book.'), 'error');
}
}
break;
case 'delete revision':
// Notice that we're matching a single revision based on the node's vid.
db_query('DELETE FROM {stormdok} WHERE vid = %d', $node->vid);
break;
}
}
function stormdok_delete($node) {
db_query('DELETE FROM {stormdok} WHERE nid = %d', $node->nid);
}
function stormdok_load($node) {
$additions = db_fetch_object(db_query('SELECT * FROM {stormdok} WHERE vid = %d', $node->vid));
return $additions;
}
function stormdok_view($node, $teaser = FALSE, $page = FALSE) {
$breadcrumb = array();
$breadcrumb[] = l(t('SuiteDesk'), 'dashboard');
$breadcrumb[] = l(t('Documentation'), 'doks');
drupal_set_breadcrumb($breadcrumb);
return theme('stormdok_view', $node, $teaser, $page);
}
function stormdok_views_api() {
return array(
'api' => 2,
'path' => drupal_get_path('module', 'stormdok'),
);
}
function stormdok_storm_dashboard_links($type) {
$links = array();
if ($type == 'page' || $type == 'block') {
$links[] = array(
'theme' => 'storm_dashboard_link',
'title' => t('Documentation'),
'icon' => 'stormdok-item',
'path' => 'doks',
'params' => array(),
'access_arguments' => 'Storm dok: access',
'node_type' => 'stormdok',
'add_type' => 'stormdok',
'map' => array(),
'weight' => 9,
);
}
return $links;
}

View file

@ -0,0 +1,192 @@
<?php
/**
* @file
* Test definitions for the SuiteDesk dok module
*/
class StormdokTestCase extends DrupalWebTestCase {
public static function getInfo() {
return array(
'name' => t('SuiteDesk Dok Functionality'),
'description' => t('Test the functionality of the SuiteDesk Dok module'),
'group' => 'Storm',
);
}
public function setUp() {
parent::setUp('storm', 'stormorganization', 'stormproject', 'stormtask', 'stormdok', 'stormperson');
}
public function testStormdokAccess() {
$this->drupalGet('doks');
$this->assertResponse(403, t('Make sure access is denied to SuiteDesk Doks list for anonymous user'));
$basic_user = $this->drupalCreateUser();
$this->drupalLogin($basic_user);
$this->drupalGet('doks');
$this->assertResponse(403, t('Make sure access is denied to SuiteDesk Doks list for basic user'));
$privileged_user = $this->drupalCreateUser(array('Storm dok: access'));
$this->drupalLogin($privileged_user);
$this->drupalGet('doks');
$this->assertText(t('Doks'), t('Make sure the correct page has been displayed by checking that the title is "Doks".'));
}
public function testStormdokCreate() {
// Create and login user
$user = $this->drupalCreateUser(array('Storm organization: add', 'Storm organization: view all', 'Storm project: add', 'Storm project: view all', 'Storm task: add', 'Storm task: view all', 'Storm dok: add', 'Storm dok: view all'));
$this->drupalLogin($user);
// Create organization and invoice
$org = array(
'title' => $this->randomName(32),
'body' => $this->randomName(64),
);
$prj = array(
'title' => $this->randomName(32),
'organization_nid' => '1',
);
$task = array(
'title' => $this->randomName(32),
'body' => $this->randomName(64),
);
$dok = array(
'title' => $this->randomName(32),
'body' => $this->randomName(64),
);
$this->drupalPost('node/add/stormorganization', $org, t('Save'));
$this->drupalPost('node/add/stormproject', $prj, t('Save'));
$this->drupalPost('node/add/stormtask', $task, t('Save'));
$this->drupalPost('node/add/stormdok', $dok, t('Save'));
$this->assertText(t('Dok @title has been created.', array('@title' => $dok['title'])));;
}
public function testStormdokList() {
// Create and login user
$userAll = $this->drupalCreateUser(array('Storm organization: add', 'Storm organization: view all', 'Storm dok: access', 'Storm dok: add', 'Storm dok: view all', 'Storm dok: edit all', 'Storm dok: delete all', 'Storm person: add'));
$userOrg = $this->drupalCreateUser(array('Storm organization: add', 'Storm organization: view all', 'Storm dok: access', 'Storm dok: add', 'Storm dok: view of user organization', 'Storm dok: edit of user organization', 'Storm dok: delete of user organization'));
$userOwn = $this->drupalCreateUser(array('Storm organization: add', 'Storm organization: view all', 'Storm dok: access', 'Storm dok: add', 'Storm dok: view own', 'Storm dok: edit own', 'Storm dok: delete own'));
$userViewAllEditOwn = $this->drupalCreateUser(array('Storm organization: add', 'Storm organization: view all', 'Storm dok: access', 'Storm dok: add', 'Storm dok: view all', 'Storm dok: edit own', 'Storm dok: delete own'));
$this->drupalLogin($userAll);
// Create organization
$org = array(
'title' => $this->randomName(32),
'body' => $this->randomName(64),
);
$this->drupalPost('node/add/stormorganization', $org, t('Save'));
$org = node_load(array('title' => $org['title']));
// Create organization
$org2 = array(
'title' => $this->randomName(32),
'body' => $this->randomName(64),
);
$this->drupalPost('node/add/stormorganization', $org2, t('Save'));
$org2 = node_load(array('title' => $org2['title']));
// Create stormperson with organization to userOrg
$personOrg = array(
'title' => $this->randomName(32),
'body' => $this->randomName(64),
'organization_nid' => $org->nid,
'user_name' => $userOrg->name,
);
$this->drupalPost('node/add/stormperson', $personOrg, t('Save'));
// Create doks
$dok1 = array(
'organization_nid' => $org->nid,
'title' => $this->randomName(32),
'body' => $this->randomName(64),
);
$this->drupalPost('node/add/stormdok', $dok1, t('Save'));
$dok1 = node_load(array('title' => $dok1['title']));
$this->drupalLogin($userOwn);
$dok2 = array(
'title' => $this->randomName(32),
'body' => $this->randomName(64),
'organization_nid' => $org->nid,
);
$this->drupalPost('node/add/stormdok', $dok2, t('Save'));
$dok2 = node_load(array('title' => $dok2['title']));
$this->drupalLogin($userViewAllEditOwn);
$dok3 = array(
'title' => $this->randomName(32),
'body' => $this->randomName(64),
'organization_nid' => $org2->nid,
);
$this->drupalPost('node/add/stormdok', $dok3, t('Save'));
$dok3 = node_load(array('title' => $dok3['title']));
// Test for 'Storm dok: view all'
$this->drupalLogin($userAll);
$this->drupalGet('doks');
$this->assertLink($dok1->title, 0, 'The Dok appears on the list');
$this->assertRaw('node/'. $dok1->nid .'/edit', 'The Dok edit icon appears on the list');
$this->assertRaw('node/'. $dok1->nid .'/delete', 'The Dok delete icon appears on the list');
$this->assertLink($dok2->title, 0, 'The Dok appears on the list');
$this->assertRaw('node/'. $dok2->nid .'/edit', 'The Dok edit icon appears on the list');
$this->assertRaw('node/'. $dok2->nid .'/delete', 'The Dok delete icon appears on the list');
$this->assertLink($dok3->title, 0, 'The Dok appears on the list');
$this->assertRaw('node/'. $dok3->nid .'/edit', 'The Dok edit icon appears on the list');
$this->assertRaw('node/'. $dok3->nid .'/delete', 'The Dok delete icon appears on the list');
// Test for 'Storm dok: view of user organization'
$this->drupalLogin($userOrg);
$this->drupalGet('doks');
$this->assertLink($dok1->title, 0, 'The Dok appears on the list');
$this->assertRaw('node/'. $dok1->nid .'/edit', 'The Dok edit icon appears on the list');
$this->assertRaw('node/'. $dok1->nid .'/delete', 'The Dok delete icon appears on the list');
$this->assertLink($dok2->title, 0, 'The Dok appears on the list');
$this->assertRaw('node/'. $dok2->nid .'/edit', 'The Dok edit icon appears on the list');
$this->assertRaw('node/'. $dok2->nid .'/delete', 'The Dok delete icon appears on the list');
$this->assertNoLink($dok3->title, 'The Dok does not appear on the list');
$this->assertNoRaw('node/'. $dok3->nid .'/edit', 'The Dok edit icon does not appear on the list');
$this->assertNoRaw('node/'. $dok3->nid .'/delete', 'The Dok delete icon does not appear on the list');
// Test for 'Storm dok: view own'
$this->drupalLogin($userOwn);
$this->drupalGet('doks');
$this->assertNoLink($dok1->title, 'The Dok does not appear on the list');
$this->assertNoRaw('node/'. $dok1->nid .'/edit', 'The Dok edit icon does not appear on the list');
$this->assertNoRaw('node/'. $dok1->nid .'/delete', 'The Dok delete icon does not appear on the list');
$this->assertLink($dok2->title, 0, 'The Dok appears on the list');
$this->assertRaw('node/'. $dok2->nid .'/edit', 'The Dok edit icon appears on the list');
$this->assertRaw('node/'. $dok2->nid .'/delete', 'The Dok delete icon appears on the list');
$this->assertNoLink($dok3->title, 'The Dok does not appear on the list');
$this->assertNoRaw('node/'. $dok3->nid .'/edit', 'The Dok edit icon does not appear on the list');
$this->assertNoRaw('node/'. $dok3->nid .'/delete', 'The Dok delete icon does not appear on the list');
// Test for 'Storm dok: view all', 'Storm dok: edit own'
$this->drupalLogin($userViewAllEditOwn);
$this->drupalGet('doks');
$this->assertLink($dok1->title, 0, 'The Dok appears on the list');
$this->assertNoRaw('node/'. $dok1->nid .'/edit', 'The Dok edit icon does not appear on the list');
$this->assertNoRaw('node/'. $dok1->nid .'/delete', 'The Dok edit icon does not appear on the list');
$this->assertLink($dok2->title, 0, 'The Dok appears on the list');
$this->assertNoRaw('node/'. $dok2->nid .'/edit', 'The Dok edit icon does not appear on the list');
$this->assertNoRaw('node/'. $dok2->nid .'/delete', 'The Dok delete icon does not appear on the list');
$this->assertLink($dok3->title, 0, 'The Dok appears on the list');
$this->assertRaw('node/'. $dok3->nid .'/edit', 'The Dok edit icon appears on the list');
$this->assertRaw('node/'. $dok3->nid .'/delete', 'The Dok delete icon appears on the list');
}
}

View file

@ -0,0 +1,108 @@
<?php
/**
* @file
*/
function theme_stormdok_list($header, $doks) {
$rows = array();
foreach ($doks as $dok) {
$rows[] = array(
storm_icon('doktype_'. str_replace(' ', '_', strtolower($dok->field_stormdok_content_value)), t($dok->field_stormdok_content_value)),
storm_icon('dokstatus_'. str_replace(' ', '_', strtolower($dok->field_stormdok_status_value)), t($dok->field_stormdok_status_value)),
'<span class="dok-title status_' . str_replace(' ', '_', strtolower($dok->field_stormdok_status_value)) . '">' . l($dok->title, 'node/'. $dok->nid) . theme('mark', node_mark($dok->nid, $dok->changed)) . '</span><br />' .
l($dok->organization_title, 'node/'. $dok->organization_nid) .
(!empty($dok->project_title) ? ' » ' . l($dok->project_title, 'node/'. $dok->project_nid) : '' ) .
(!empty($dok->task_title) ? ' » ' . l($dok->task_title, 'node/'. $dok->task_nid) : '' ),
$dok->clip ? storm_icon('attached', t('Has attached files')) : '&nbsp;',
format_date($dok->created, 'small'),
format_date($dok->changed, 'small'),
$dok->version,
array(
'data' => storm_icon_edit_node($dok, $_GET) . storm_icon_delete_node($dok, $_GET),
'class' => 'storm_list_operations',
),
);
}
$o = theme('table', $header, $rows, array('id' => 'stormdoks'));
return $o;
}
function theme_stormdok_view($node, $teaser = FALSE, $page = FALSE) {
drupal_add_css(drupal_get_path('module', 'storm') . '/storm-node.css', 'module');
$node = node_prepare($node, $teaser);
$l_pos = 1; // Used to increase the link position number (see issue 814820)
$node->content['links'] = array(
'#prefix' => '<div class="stormlinks"><dl>',
'#suffix' => '</dl></div>',
'#weight' => $l_pos++,
);
$node->content['group1'] = array(
'#prefix' => '<div class="stormfields">',
'#suffix' => '</div>',
'#weight' => module_exists('content') ? content_extra_field_weight($node->type, 'group1') : -20,
);
if (!empty($node->organization_nid)) {
$node->content['group1']['organization'] = array(
'#prefix' => '<div class="organization">',
'#suffix' => '</div>',
'#value' => theme('storm_view_item', t('Organization'), l($node->organization_title, 'node/'. $node->organization_nid)),
'#weight' => 4,
);
}
if (!empty($node->project_nid)) {
$node->content['group1']['project'] = array(
'#prefix' => '<div class="project">',
'#suffix' => '</div>',
'#value' => theme('storm_view_item', t('Project'), l($node->project_title, 'node/'. $node->project_nid)),
'#weight' => 5,
);
}
if (!empty($node->task_nid)) {
$node->content['group1']['task'] = array(
'#prefix' => '<div class="task">',
'#suffix' => '</div>',
'#value' => theme('storm_view_item', t('Task'), l($node->task_title, 'node/'. $node->task_nid)),
'#weight' => 6,
);
}
$node->content['group1']['author'] = array(
'#prefix' => '<div class="author">',
'#suffix' => '</div>',
'#value' => theme('storm_view_item', t('Author'), theme('username', $node)),
'#weight' => 11,
);
$node->content['group1']['created'] = array(
'#prefix' => '<div class="created">',
'#suffix' => '</div>',
'#value' => theme('storm_view_item', t('Created'), format_date($node->created, 'small')),
'#weight' => 12,
);
if ($node->changed != $node->created) {
$node->content['group1']['modified'] = array(
'#prefix' => '<div class="modified">',
'#suffix' => '</div>',
'#value' => theme('storm_view_item', t('Modified'), format_date($node->changed, 'small')),
'#weight' => 13,
);
}
$node->content['group1']['version'] = array(
'#prefix' => '<div class="version">',
'#suffix' => '</div>',
'#value' => theme('storm_view_item', t('Revision'), $node->version),
'#weight' => 14,
);
$node->content['body_field'] = array(
'#prefix' => '<div class="stormbody">',
'#suffix' => '</div>',
'#value' => theme('storm_view_item', t('Description'), $node->content['body']['#value']),
'#weight' => module_exists('content') ? content_extra_field_weight($node->type, 'body_field') : -18,
);
unset($node->content['body']);
return $node;
}

View file

@ -0,0 +1,143 @@
<?php
/**
* @file
* Functions to expose storm dok module data to views
*/
function stormdok_views_data() {
$data['stormdok']['table']['group'] = t('SuiteDesk Dok');
$data['stormdok']['table']['join'] = array(
'node' => array(
'left_field' => 'vid',
'field' => 'vid',
),
);
$data['stormdok']['organization_nid'] = array(
'title' => t('Organization'),
'help' => t('Dok -> Organization'),
'relationship' => array(
'base' => 'node',
'field' => 'nid',
'handler' => 'views_handler_relationship',
'label' => t('Dok -> Organization'),
),
);
$data['stormdok']['organization_title'] = array(
'title' => t('Organization'),
'help' => t('SuiteDesk Dok Organization (title only)'),
'field' => array(
'click sortable' => TRUE,
),
'sort' => array(
'handler' => 'views_handler_sort',
),
'filter' => array(
'handler' => 'views_handler_filter_string',
),
'argument' => array(
'handler' => 'views_handler_argument_string',
),
);
$data['stormdok']['project_nid'] = array(
'title' => t('Project'),
'help' => t('Dok -> Project'),
'relationship' => array(
'base' => 'node',
'field' => 'nid',
'handler' => 'views_handler_relationship',
'label' => t('Dok -> Project'),
),
);
$data['stormdok']['project_title'] = array(
'title' => t('Project'),
'help' => t('SuiteDesk Dok Project (title only)'),
'field' => array(
'click sortable' => TRUE,
),
'sort' => array(
'handler' => 'views_handler_sort',
),
'filter' => array(
'handler' => 'views_handler_filter_string',
),
'argument' => array(
'handler' => 'views_handler_argument_string',
),
);
$data['stormdok']['task_nid'] = array(
'title' => t('Task'),
'help' => t('Dok -> Task'),
'relationship' => array(
'base' => 'node',
'field' => 'nid',
'handler' => 'views_handler_relationship',
'label' => t('Dok -> Task'),
),
);
$data['stormdok']['task_stepno'] = array(
'title' => t('Task step number'),
'help' => t('SuiteDesk Dok Task Step Number'),
'field' => array(
'click sortable' => TRUE,
),
'sort' => array(
'handler' => 'views_handler_sort',
),
'filter' => array(
'handler' => 'views_handler_filter_string',
),
'argument' => array(
'handler' => 'views_handler_argument_string',
),
);
$data['stormdok']['task_title'] = array(
'title' => t('Task'),
'help' => t('SuiteDesk Dok Task (title only)'),
'field' => array(
'click sortable' => TRUE,
),
'sort' => array(
'handler' => 'views_handler_sort',
),
'filter' => array(
'handler' => 'views_handler_filter_string',
),
'argument' => array(
'handler' => 'views_handler_argument_string',
),
);
$data['stormdok']['operation'] = array(
'field' => array(
'title' => t('Edit/Delete link'),
'help' => t('Provide a simple link to edit and delete the node.'),
'handler' => 'storm_handler_field_operation',
'type' => 'stormdok',
),
);
return $data;
}
function stormdok_views_handlers() {
return array(
'info' => array(
'path' => drupal_get_path('module', 'storm'),
),
'handlers' => array(
'storm_handler_filter_attributes_domain' => array(
'parent' => 'views_handler_filter_in_operator',
),
'storm_handler_field_operation' => array(
'parent' => 'views_handler_field_node_link',
'path' => drupal_get_path('module', 'storm'),
),
),
);
}