============================================
Content type dojo
============================================
The initial dojo node content type which, as of CCK 5.x-1.2, can be imported via administer > content types > import (./admin/content/types/import).
============================================
$content[type] = array ( 'name' => 'Dojo', 'type' => 'dojo', 'description' => 'dojo', 'title_label' => 'Title', 'body_label' => 'Body', 'min_word_count' => '0', 'help' => '', 'node_options' => array ( 'status' => true, 'promote' => true, 'sticky' => false, 'revision' => false, ), 'comment' => '2', 'upload' => 1, 'old_type' => 'dojo', 'orig_type' => '', 'module' => 'node', 'custom' => '1', 'modified' => '1', 'locked' => '0', ); $content[fields] = array ( 0 => array ( 'widget_type' => 'options_select', 'label' => 'Belt Color', 'weight' => '0', 'description' => '', 'group' => false, 'required' => '0', 'multiple' => '0', 'text_processing' => '0', 'max_length' => '', 'allowed_values' => 'white yellow orange green brown black', 'allowed_values_php' => '', 'field_name' => 'field_belt_color', 'field_type' => 'text', 'module' => 'text, optionwidgets', ), );
============================================
Views
============================================
dojoclass v.1: The initial import code
for the "Dojo" view.
============================================
Can be imported via administer > views > import (./admin/build/views/import).
$view = new stdClass();
$view->name = 'dojo';
$view->description = 'Dojo example view';
$view->access = array (
);
$view->view_args_php = '';
$view->page = TRUE;
$view->page_title = 'Dojo Class';
$view->page_header = '';
$view->page_header_format = '1';
$view->page_footer = '';
$view->page_footer_format = '1';
$view->page_empty = '';
$view->page_empty_format = '1';
$view->page_type = 'table';
$view->url = 'dojoclass';
$view->use_pager = TRUE;
$view->nodes_per_page = '25';
$view->sort = array (
);
$view->argument = array (
);
$view->field = array (
array (
'tablename' => 'node',
'field' => 'title',
'label' => 'Name',
'handler' => 'views_handler_field_nodelink',
'sortable' => '1',
'defaultsort' => 'ASC',
'options' => 'link',
),
array (
'tablename' => 'node',
'field' => 'created',
'label' => 'Joined',
'handler' => 'views_handler_field_date_small',
'sortable' => '1',
),
array (
'tablename' => 'node_data_field_belt_color',
'field' => 'field_belt_color_value',
'label' => 'Belt Level',
'sortable' => '1',
'options' => 'plain',
),
array (
'tablename' => 'node',
'field' => 'edit',
'label' => '',
),
);
$view->filter = array (
array (
'tablename' => 'node',
'field' => 'status',
'operator' => '=',
'options' => '',
'value' => '1',
),
array (
'tablename' => 'node',
'field' => 'type',
'operator' => 'OR',
'options' => '',
'value' => array (
0 => 'dojo',
),
),
array (
'tablename' => 'node_data_field_belt_color',
'field' => 'field_belt_color_value_default',
'operator' => 'OR',
'options' => '',
'value' => array (
),
),
);
$view->exposed_filter = array (
array (
'tablename' => 'node_data_field_belt_color',
'field' => 'field_belt_color_value_default',
'label' => '',
'optional' => '1',
'is_default' => '0',
'operator' => '1',
'single' => '1',
),
);
$view->requires = array(node, node_data_field_belt_color);
$views[$view->name] = $view;
===========================================
===========================================
dojoclass v.2: The second version of
the exported "Dojo" view.
===========================================
$view = new stdClass();
$view->name = 'dojo';
$view->description = 'Dojo example view';
$view->access = array (
);
$view->view_args_php = '';
$view->page = TRUE;
$view->page_title = 'Dojo Class';
$view->page_header = '';
$view->page_header_format = '1';
$view->page_footer = '';
$view->page_footer_format = '1';
$view->page_empty = 'Sorry, no results found.';
$view->page_empty_format = '1';
$view->page_type = 'table';
$view->url = 'dojoclass';
$view->use_pager = TRUE;
$view->nodes_per_page = '25';
$view->sort = array (
);
$view->argument = array (
array (
'type' => 'taxletter',
'argdefault' => '2',
'title' => '',
'options' => '',
'wildcard' => '',
'wildcard_substitution' => '',
),
);
$view->field = array (
array (
'tablename' => 'node',
'field' => 'title',
'label' => 'Name',
'handler' => 'views_handler_field_nodelink',
'sortable' => '1',
'defaultsort' => 'ASC',
'options' => 'link',
),
array (
'tablename' => 'node',
'field' => 'created',
'label' => 'Joined',
'handler' => 'views_handler_field_date_small',
'sortable' => '1',
),
array (
'tablename' => 'node_data_field_belt_color',
'field' => 'field_belt_color_value',
'label' => 'Belt Level',
'sortable' => '1',
'options' => 'plain',
),
array (
'tablename' => 'node_data_field_battles_won',
'field' => 'field_battles_won_value',
'label' => 'Wins',
'options' => 'default',
),
array (
'tablename' => 'node_data_field_battles_lost',
'field' => 'field_battles_lost_value',
'label' => 'Losses',
'options' => 'default',
),
array (
'tablename' => 'node',
'field' => 'edit',
'label' => '',
),
array (
'tablename' => 'term_node_1',
'field' => 'name',
'label' => '',
'options' => 'link',
),
);
$view->filter = array (
array (
'tablename' => 'node',
'field' => 'status',
'operator' => '=',
'options' => '',
'value' => '1',
),
array (
'tablename' => 'node',
'field' => 'type',
'operator' => 'OR',
'options' => '',
'value' => array (
0 => 'dojo',
),
),
array (
'tablename' => 'node_data_field_belt_color',
'field' => 'field_belt_color_value_default',
'operator' => 'OR',
'options' => '',
'value' => array (
),
),
);
$view->exposed_filter = array (
array (
'tablename' => 'node_data_field_belt_color',
'field' => 'field_belt_color_value_default',
'label' => 'Belt Level',
'optional' => '1',
'is_default' => '0',
'operator' => '1',
'single' => '1',
),
);
$view->requires = array(node, node_data_field_belt_color, node_data_field_battles_won, node_data_field_battles_lost, term_node_1);
$views[$view->name] = $view;
===========================================
=============================================
./current theme directory/node-battle.tpl.php
v.1
=============================================
type); ?>
theme('username', $node), '!date' => format_date($node->created))); ?>
field_contestant_1[0]['nid']);
$contestant2 = node_load($node->field_contestant_2[0]['nid']);
echo $node->content['body']['#value'];
echo '
'.$contestant1->title.'
';
echo 'Won: '.$contestant1->field_battles_won[0]['value'].' Lost: '.$contestant1->field_battles_lost[0]['value'].'
';
echo ''.$contestant2->title.'
';
echo 'Won: '.$contestant2->field_battles_won[0]['value'].' Lost: '.$contestant2->field_battles_lost[0]['value'].'
';
?>
=============================================
=============================================
CCK export of Dojo Battle content type
=============================================
$content[type] = array (
'name' => 'Dojo Battle',
'type' => 'battle',
'description' => 'Where we battle!',
'title_label' => 'Title',
'body_label' => 'Body',
'min_word_count' => '0',
'help' => '',
'node_options' =>
array (
'status' => true,
'promote' => false,
'sticky' => false,
'revision' => false,
),
'comment' => '2',
'upload' => '1',
'old_type' => 'battle',
'orig_type' => '',
'module' => 'node',
'custom' => '1',
'modified' => '1',
'locked' => '0',
);
$content[fields] = array (
0 =>
array (
'widget_type' => 'nodereference_select',
'label' => 'Contestant #1',
'weight' => '0',
'description' => '',
'group' => false,
'required' => '1',
'multiple' => '0',
'referenceable_types' =>
array (
'dojo' => true,
0 => 1,
'battle' => false,
'project_issue' => false,
'page' => false,
'story' => false,
'project_project' => false,
'project_release' => false,
),
'advanced_view' => '--',
'field_name' => 'field_contestant_1',
'field_type' => 'nodereference',
'module' => 'nodereference',
),
1 =>
array (
'widget_type' => 'nodereference_select',
'label' => 'Contestant #2',
'weight' => '0',
'description' => '',
'group' => false,
'required' => '1',
'multiple' => '0',
'referenceable_types' =>
array (
'dojo' => true,
0 => 1,
'battle' => false,
'project_issue' => false,
'page' => false,
'story' => false,
'project_project' => false,
'project_release' => false,
),
'advanced_view' => '--',
'field_name' => 'field_contestant_2',
'field_type' => 'nodereference',
'module' => 'nodereference',
),
);
=============================================
=============================================
./current theme directory/node-battle.tpl.php
v.2
=============================================
type); ?>
theme('username', $node), '!date' => format_date($node->created))); ?>
field_contestant_1[0]['nid']);
$contestant2 = node_load($node->field_contestant_2[0]['nid']);
echo $node->content['body']['#value'];
echo '
'.$contestant1->title.'
';
echo 'Won: '.$contestant1->field_battles_won[0]['value'].' Lost: '.$contestant1->field_battles_lost[0]['value'].'
';
echo ''.$contestant2->title.'
';
echo 'Won: '.$contestant2->field_battles_won[0]['value'].' Lost: '.$contestant2->field_battles_lost[0]['value'].'
';
?>
=============================================
=============================================
dojo.module (v.1 for this lesson)
=============================================
type == 'dojo') {
drupal_set_message('DOJO NODE SUBMITTED!');
}
break;
case 'search result':
if ($node->uid == 1) { // use the uid of your puppy-hater here
$output = 'THIS USER HATES PUPPIES!';
return $output;
}
break;
case 'validate':
// what we want is for this to check the perms if the revision bit is not set.
if ($node->revision != 1 && user_access('post dojo without revision') == FALSE) {
form_set_error('revision', t('Hey man, you have to make a revision'));
}
break;
case 'update index':
If($node->type == 'dojo') {
return 'dojotastic';
}
break;
case 'view':
If($node->type == 'dojo') {
$node->content['body']['#value'] .= 'This was added in nodeapi for dojo nodes onle!
';
}
break;
}
}
/**
* Imlementation of hook_form_alter
*
* This will add a validation callback and turn an input format into
* radio buttons.
*/
function dojo_form_alter($form_id, &$form) {
if ($form_id == 'dojo_node_form') {
// print_r($form);
$form['#theme'] = 'dojo';
$form['#validate']['dojo_validate'] = array();
// $form['field_belt_color']['key']['#type'] = 'radios';
$tree = taxonomy_get_tree(1);
// print_r($tree);
$belts = array();
foreach($tree as $term) {
// $belts[$term->tid] = $term->name;
}
// $form['field_belt_color']['key']['#options'] = $belts;
unset($form['options']['revision']);
$form['revision'] = array(
'#type' => 'checkbox',
'#title' => 'Create new revision',
'#default_value' => 1,
'#prefix' => '',
'#suffix' => '
',
'#weight' => -100,
);
}
if ($form_id == 'search_form') {
// restrict search terms w/custom validation callback
$form['#validate']['dojo_search_validate'] = array();
}
if ($form_id == 'battle_node_form') {
// substitute vid for Battle Type on your system
// on Josh's it was 2
unset($form['taxonomy'][7]['#options'][0]);
$form['taxonomy'][7]['#required'] = TRUE;
}
}
function theme_dojo($form) {
// print_r($form);
$output .= drupal_render($form);
return $output;
}
function dojo_validate($form_id, $form_values, $form) {
if($form_values['title'] == 'Foo') {
form_set_error('title', t('Foo is not allowed!'));
}
}
function dojo_search_validate($form_id, $form_values, $form) {
// if the user doesn't have access, stop them from searching for the dojo
if(user_access('post dojo without revision') == FALSE && strstr($form_values['keys'], 'dojo')) {
form_set_error('keys', t('Yoy cannot search for the Dojo!'));
}
}
/**
* I'm writing this funtion because I need to understand db_rewrite_sql
*/
function dojo_query() {
$sql = 'SELECT * from {node} WHERE nid = %d';
$sql = db_rewrite_sql($sql);
print_r($sql);
$result = db_query($sql, 2);
$node = db_fetch_object($result);
print_r($node);
}
=============================================
=============================================
dojo.module (v.2 for this lesson)
=============================================
'admin/settings/dojo',
'title' => t('Dojo Settings'),
'description' => t('Staring a granular taxonomy requirement system'),
'callback' => 'drupal_get_form',
'callback arguments' => array('dojo_settings'),
'access' => user_access('administer site configuration'),
'type' => MENU_NORMAL_ITEM, // optional
);
return $items;
}
function dojo_settings() {
$types = node_get_types();
// print_r($types);
$vocabs = taxonomy_get_vocabularies();
// print_r($vocabs);
$header = array(t('Vocabulary'));
foreach($vocabs as $vid => $vocab) {
// make a row
$row = array();
$row[] = $vocab->name;
foreach($types as $type => $data) {
$row[] = '[x]';
$header[] = $type;
}
$rows[] = $row;
}
$form = array();
$form['table'] = array(
'#type' => 'markup',
'#value' => theme('table', $header, $rows),
);
return $form;
}
function dojo_perm() {
return array('post dojo without revision');
}
/**
* Implementation of hook_nodeapi
*
* For dojo lesson and great justice!
*/
function dojo_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
switch ($op) {
case 'submit':
If($node->type == 'dojo') {
drupal_set_message('DOJO NODE SUBMITTED!');
}
break;
case 'search result':
if ($node->uid == 1) { // use the uid of your puppy-hater here
$output = 'THIS USER HATES PUPPIES!';
return $output;
}
break;
case 'validate':
// what we want is for this to check the perms if the revision bit is not set.
if ($node->revision != 1 && user_access('post dojo without revision') == FALSE) {
form_set_error('revision', t('Hey man, you have to make a revision'));
}
break;
case 'update index':
If($node->type == 'dojo') {
return 'dojotastic';
}
break;
case 'view':
If($node->type == 'dojo') {
$node->content['body']['#value'] .= 'This was added in nodeapi for dojo nodes onle!
';
}
break;
}
}
/**
* Imlementation of hook_form_alter
*
* This will add a validation callback and turn an input format into
* radio buttons.
*/
function dojo_form_alter($form_id, &$form) {
if ($form_id == 'dojo_node_form') {
// print_r($form);
$form['#theme'] = 'dojo';
$form['#validate']['dojo_validate'] = array();
// $form['field_belt_color']['key']['#type'] = 'radios';
$tree = taxonomy_get_tree(1);
// print_r($tree);
$belts = array();
foreach($tree as $term) {
// $belts[$term->tid] = $term->name;
}
// $form['field_belt_color']['key']['#options'] = $belts;
unset($form['options']['revision']);
$form['revision'] = array(
'#type' => 'checkbox',
'#title' => 'Create new revision',
'#default_value' => 1,
'#prefix' => '',
'#suffix' => '
',
'#weight' => -100,
);
}
if ($form_id == 'search_form') {
// restrict search terms w/custom validation callback
$form['#validate']['dojo_search_validate'] = array();
}
if ($form_id == 'battle_node_form') {
// substitute vid of vocabulary Battle Type on your system
// on Josh's system it was 2
unset($form['taxonomy'][7]['#options'][0]);
$form['taxonomy'][7]['#required'] = TRUE;
}
}
function theme_dojo($form) {
// print_r($form);
$output .= drupal_render($form);
return $output;
}
function dojo_validate($form_id, $form_values, $form) {
if($form_values['title'] == 'Foo') {
form_set_error('title', t('Foo is not allowed!'));
}
}
function dojo_search_validate($form_id, $form_values, $form) {
// if the user doesn't have access, stop them from searching for the dojo
if(user_access('post dojo without revision') == FALSE && strstr($form_values['keys'], 'dojo')) {
form_set_error('keys', t('Yoy cannot search for the Dojo!'));
}
}
/**
* I'm writing this funtion because I need to understand db_rewrite_sql
*/
function dojo_query() {
$sql = 'SELECT * from {node} WHERE nid = %d';
$sql = db_rewrite_sql($sql);
print_r($sql);
$result = db_query($sql, 2);
$node = db_fetch_object($result);
print_r($node);
}
=============================================
fin
=============================================