File Coverage

blib/lib/Drupal/Module/Starter/4_6_2.pm
Criterion Covered Total %
statement 0 5 0.0
branch n/a
condition n/a
subroutine 0 2 0.0
pod 2 2 100.0
total 2 9 22.2


line stmt bran cond sub pod time code
1             package Drupal::Module::Starter::4_6_2;
2              
3              
4              
5             =head1 NAME
6              
7             Drupal::Module::Starter::4_6_2 - stub php code for 4.6.2 hooks
8              
9             =head1 VERSION
10              
11             Version 0.01
12              
13             =cut
14              
15             our $VERSION = '0.01';
16              
17             # stub code for each hook
18             our $stubs = {
19             hook_access => q!function MODULENAME_access($op, $node) {
20             global $user;
21             if ($op == 'create') {
22             return user_access('create MODULENAMEs');
23             }
24              
25             if ($op == 'update' || $op == 'delete') {
26             if (user_access('edit own MODULENAMEs') && ($user->uid == $node->uid)) {
27             return TRUE;
28             }
29             }
30             }!,
31            
32             hook_auth => q|
33             function MODULENAME_auth($username, $password, $server) {
34             /* return TRUE for a valid authentication, FALSE otherwise */
35            
36             $message = new xmlrpcmsg('drupal.login', array(new xmlrpcval($username,
37             'string'), new xmlrpcval($password, 'string')));
38              
39             $client = new xmlrpc_client('/xmlrpc.php', $server, 80);
40             $result = $client->send($message, 5);
41             if ($result && !$result->faultCode()) {
42             $value = $result->value();
43             $login = $value->scalarval();
44             }
45              
46             return $login;
47             }|,
48              
49             hook_block => q|
50             function MODULENAME_block($op = 'list', $delta = 0, $edit = array()) {
51             if ($op == 'list') {
52             $blocks[0]['info'] = t('Mymodule block #1 shows ...');
53             $blocks[1]['info'] = t('Mymodule block #2 describes ...');
54             return $blocks;
55             }
56             else if ($op == 'configure' && $delta == 0) {
57             return form_select(t('Number of items'), 'items', variable_get('mymodule_block_items', 0), array('1', '2', '3'));
58             }
59             else if ($op == 'save' && $delta == 0) {
60             variable_set('mymodule_block_items', $edit['items']);
61             }
62             else if ($op == 'view') {
63             switch($delta) {
64             case 0:
65             $block['subject'] = t('Title of block #1');
66             $block['content'] = mymodule_display_block_1();
67             break;
68             case 1:
69             $block['subject'] = t('Title of block #2');
70             $block['content'] = mymodule_display_block_2();
71             break;
72             }
73             return $block;
74             }
75             }|,
76            
77             hook_comment => q!
78             function MODULENAME_comment($op, $comment) {
79             if ($op == 'insert' || $op == 'update') {
80             $nid = $comment['nid'];
81             }
82             cache_clear_all_like(drupal_url(array('id' => $nid)));
83             }!,
84            
85             hook_cron => q!
86             function MODULENAME_cron() {
87             $result = db_query('SELECT * FROM {site} WHERE checked = 0 OR checked
88             + refresh < %d', time());
89              
90             while ($site = db_fetch_array($result)) {
91             cloud_update($site);
92             }
93             }!,
94            
95             hook_db_rewrite_sql => q|
96             function MODULENAME_db_rewrite_sql($query, $primary_table, $primary_field, $args) {
97             switch ($primary_field) {
98             case 'nid':
99             // this query deals with node objects
100             $return = array();
101             if ($primary_table != 'n') {
102             $return['join'] = "LEFT JOIN {node} n ON $primary_table.nid = n.nid";
103             }
104             $return['where'] = 'created >' . mktime(0, 0, 0, 1, 1, 2005);
105             return $return;
106             break;
107             case 'tid':
108             // this query deals with taxonomy objects
109             break;
110             case 'vid':
111             // this query deals with vocabulary objects
112             break;
113             }
114             } |,
115            
116             hook_delete => q!
117             function MODULENAME_delete(&$node) {
118             db_query('DELETE FROM {mytable} WHERE nid = %d', $node->nid);
119             }!,
120            
121             hook_exit => q!
122             function MODULENAME_exit($destination = NULL) {
123             db_query('UPDATE {counter} SET hits = hits + 1 WHERE type = 1');
124             }!,
125            
126             hook_filter => q!
127             function MODULENAME_filter($op, $delta = 0, $format = -1, $text = '') {
128             switch ($op) {
129             case 'list':
130             return array(0 => t('Code filter'));
131              
132             case 'description':
133             return t('Allows users to post code verbatim using <code> and <?php ?> tags.');
134              
135             case 'prepare':
136             // Note: we use the bytes 0xFE and 0xFF to replace < > during the filtering process.
137             // These bytes are not valid in UTF-8 data and thus least likely to cause problems.
138             $text = preg_replace('@(.+?)@se', "'\xFEcode\xFF'. codefilter_escape('\\1') .'\xFE/code\xFF'", $text);
139             $text = preg_replace('@<(\?(php)?|%)(.+?)(\?|%)>@se', "'\xFEphp\xFF'. codefilter_escape('\\3') .'\xFE/php\xFF'", $text);
140             return $text;
141              
142             case "process":
143             $text = preg_replace('@\xFEcode\xFF(.+?)\xFE/code\xFF@se', "codefilter_process_code('$1')", $text);
144             $text = preg_replace('@\xFEphp\xFF(.+?)\xFE/php\xFF@se', "codefilter_process_php('$1')", $text);
145             return $text;
146              
147             default:
148             return $text;
149             }
150             } !,
151            
152             hook_filter_tips => q!
153             function MODULENAME_filter_tips($delta, $format, $long = false) {
154             if ($long) {
155             return t('To post pieces of code, surround them with <code>...</code> tags. For PHP code, you can use <?php ... ?>, which will also colour it based on syntax.');
156             }
157             else {
158             return t('You may post code using <code>...</code> (generic) or <?php ... ?> (highlighted PHP) tags.');
159             }
160             } !,
161            
162             hook_footer => q!
163             function MODULENAME_footer($main = 0) {
164             if (variable_get('dev_query', 0)) {
165             print '
'. devel_query_table() .'
';
166             }
167             }!,
168            
169             hook_form => q!
170             function MODULENAME_form(&$node, &$param) {
171             if (function_exists('taxonomy_node_form')) {
172             $output = implode('', taxonomy_node_form('example', $node));
173             }
174              
175             $output .= form_textfield(t('Custom field'), 'field1', $node->field1, 60,
176             127);
177             $output .= form_select(t('Select box'), 'selectbox', $node->selectbox,
178             array (1 => 'Option A', 2 => 'Option B', 3 => 'Option C'),
179             t('Please choose an option.'));
180              
181             return $output;
182             }!,
183            
184             hook_help => q!
185             function MODULENAME_help($section) {
186             switch ($section) {
187             case 'admin/help#block':
188             return t('

Blocks are the boxes visible in the sidebar(s)

189             of your web site. These are usually generated automatically by
190             modules (e.g. recent forum topics), but you can also create your
191             own blocks using either static HTML or dynamic PHP content.

');
192             break;
193             case 'admin/modules#description':
194             return t('Controls the boxes that are displayed around the main content.');
195             break;
196             }
197             }!,
198            
199             hook_info => q!
200             function MODULENAME_info($field = 0) {
201             $info['name'] = 'Drupal';
202             $info['protocol'] = 'XML-RPC';
203              
204             if ($field) {
205             return $info[$field];
206             }
207             else {
208             return $info;
209             }
210             }!,
211            
212             hook_init => q|
213             function MODULENAME_init() {
214             global $recent_activity;
215              
216             if ((variable_get('statistics_enable_auto_throttle', 0)) &&
217             (!rand(0, variable_get('statistics_probability_limiter', 9)))) {
218              
219             $throttle = throttle_status();
220             // if we're at throttle level 5, we don't do anything
221             if ($throttle < 5) {
222             $multiplier = variable_get('statistics_throttle_multiplier', 60);
223             // count all hits in past sixty seconds
224             $result = db_query('SELECT COUNT(timestamp) AS hits FROM
225             {accesslog} WHERE timestamp >= %d', (time() - 60));
226             $recent_activity = db_fetch_array($result);
227             throttle_update($recent_activity['hits']);
228             }
229             }
230             }|,
231            
232             hook_insert => q!
233             function MODULENAME_insert($node) {
234             db_query("INSERT INTO {mytable} (nid, extra)
235             VALUES (%d, '%s')", $node->nid, $node->extra);
236             }!,
237            
238             hook_link => q|
239             function MODULENAME_link($type, $node = NULL, $teaser = FALSE) {
240             $links = array();
241              
242             if ($type == 'node' && $node->type == 'book') {
243             if (MODULENAME_access('update', $node)) {
244             $links[] = l(t('edit this page'), "node/$node->nid/edit",
245             array('title' => t('Suggest an update for this book page.')));
246             }
247             if (!$teaser) {
248             $links[] = l(t('printer-friendly version'), "book/print/$node->nid",
249             array('title' => t('Show a printer-friendly version of this book page
250             and its sub-pages.')));
251             }
252             }
253              
254             return $links;
255             }|,
256            
257             hook_load => q!
258             function MODULENAME_load($node) {
259             $additions = db_fetch_object(db_query('SELECT * FROM {mytable} WHERE nid = %s', $node->nid));
260             return $additions;
261             }!,
262            
263             hook_menu => q!
264             function MODULENAME_menu($may_cache) {
265             global $user;
266             $items = array();
267              
268             if ($may_cache) {
269             $items[] = array('path' => 'node/add/blog', 'title' => t('blog entry'),
270             'access' => user_access('maintain personal blog'));
271             $items[] = array('path' => 'blog', 'title' => t('blogs'),
272             'callback' => 'blog_page',
273             'access' => user_access('access content'),
274             'type' => MENU_SUGGESTED_ITEM);
275             $items[] = array('path' => 'blog/'. $user->uid, 'title' => t('my blog'),
276             'access' => user_access('maintain personal blog'),
277             'type' => MENU_DYNAMIC_ITEM);
278             $items[] = array('path' => 'blog/feed', 'title' => t('RSS feed'),
279             'callback' => 'blog_feed',
280             'access' => user_access('access content'),
281             'type' => MENU_CALLBACK);
282             }
283             return $items;
284             }!,
285            
286             hook_nodeapi => q!
287             function MODULENAME_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
288             switch ($op) {
289             case 'fields':
290             return array('score', 'users', 'votes');
291             case 'validate':
292             if ($node->nid && $node->moderate) {
293             // Reset votes when node is updated:
294             $node->score = 0;
295             $node->users = '';
296             $node->votes = 0;
297             }
298             break;
299             case 'insert':
300             case 'update':
301             if ($node->moderate && user_access('access submission queue')) {
302             print theme('box', t('Post queued'), t('The post is queued for approval.
303             You can check the votes in the submission
304             queue.', array('%queue' => url('queue'))));
305             }
306             elseif ($node->moderate) {
307             print theme('box', t('Post queued'), t('The post is queued for approval.
308             The editors will decide whether it should be published.'));
309             }
310             else {
311             print theme('box', t('Post published'), t('The post is published.'));
312             }
313             break;
314             }
315             }!,
316            
317             hook_node_grants => q!
318             function MODULENAME_node_grants($user, $op) {
319             $grants = array();
320             if ($op == 'view') {
321             if (user_access('access content')) {
322             $grants[] = 0;
323             }
324             if (user_access('access private content')) {
325             $grants[] = 1;
326             }
327             }
328             if ($op == 'update' || $op == 'delete') {
329             if (user_access('edit content')) {
330             $grants[] = 0;
331             }
332             if (user_access('edit private content')) {
333             $grants[] = 1;
334             }
335             }
336             return array('example' => $grants);
337             }!,
338            
339             hook_node_name => q|function MODULENAME_node_name($node) {
340             return MODULENAME;
341             }|,
342            
343             hook_node_types => q!function MODULENAME_node_types() {
344             return array('project-issue', 'project-project');
345             }!,
346            
347             hook_onload => q!function MODULENAME_onload() {
348             return array('my_javascript_function()');
349             }!,
350              
351              
352              
353              
354              
355             hook_perm => q!function MODULENAME_perm() {
356             return array('create MODULENAME', 'edit own MODULENAMEs');
357             }!,
358              
359             hook_ping => q"function MODULENAME_ping($name = '', $url = '') {
360             $feed = url('node/feed');
361              
362             $client = new xmlrpc_client('/RPC2', 'rpc.weblogs.com', 80);
363              
364             $message = new xmlrpcmsg('weblogUpdates.ping',
365             array(new xmlrpcval($name), new xmlrpcval($url)));
366              
367             $result = $client->send($message);
368              
369             if (!$result || $result->faultCode()) {
370             watchdog('error', 'failed to notify \'weblogs.com\' (site)');
371             }
372              
373             unset($client);
374             }" ,
375              
376             hook_search => q!function MODULENAME_search($op = 'search', $keys = null) {
377             switch ($op) {
378             case 'name':
379             return t('content');
380             case 'reset':
381             variable_del('node_cron_last');
382             return;
383             case 'search':
384             $find = do_search($keys, 'node', 'INNER JOIN {node} n ON n.nid = i.sid '. node_access_join_sql() .' INNER JOIN {users} u ON n.uid = u.uid', 'n.status = 1 AND '. node_access_where_sql());
385             $results = array();
386             foreach ($find as $item) {
387             $node = node_load(array('nid' => $item));
388             $extra = node_invoke_nodeapi($node, 'search result');
389             $results[] = array('link' => url('node/'. $item),
390             'type' => node_invoke($node, 'node_name'),
391             'title' => $node->title,
392             'user' => format_name($node),
393             'date' => $node->changed,
394             'extra' => $extra,
395             'snippet' => search_excerpt($keys, check_output($node->body, $node->format)));
396             }
397             return $results;
398             }
399             } !,
400              
401             hook_search_item => q!function MODULENAME_search_item($item) {
402             $output .= ' 403             .'">'. $item['title'] .'
';
404             $output .= ' ' . $item['description'] . '';
405             $output .= '

';
406              
407             return $output;
408             }!,
409            
410             hook_search_preprocess => q!function MODULENAME_search_preprocess($text) {
411             // Do processing on $text
412             return $text;
413             }!,
414            
415             hook_settings => q!function MODULENAME_settings() {
416             $output = form_textfield(t('Setting A'), 'example_a',
417             variable_get('example_a', 'Default setting'), 20, 255,
418             t('A description of this setting.'));
419             $output .= form_checkbox(t('Setting B'), 'example_b', 1,
420             variable_get('example_b', 0), t('A description of this setting.'));
421             return $output;
422             }!,
423            
424            
425             hook_taxonomy => q!function MODULENAME_taxonomy($op, $type, $object) {
426             if ($type == 'vocabulary' && ($op == 'insert' || $op == 'update')) {
427             if (variable_get('forum_nav_vocabulary', '') == ''
428             && in_array('forum', $object['nodes'])) {
429             // since none is already set, silently set this vocabulary as the navigation vocabulary
430             variable_set('forum_nav_vocabulary', $object['vid']);
431             }
432             }
433             }!,
434              
435             hook_textarea => q!function MODULENAME_textarea($op, $name) {
436             global $htmlarea_init, $htmlarea_fields, $htmlarea_codeview;
437              
438             if ($op == 'pre') {
439             $real_name = $name;
440             $name = _htmlarea_parse_name($name);
441              
442             if (_htmlarea_is_changed($name)) {
443             $htmlarea_init[] = "var $name = null;";
444             $htmlarea_fields[] = "attacheditor($name, '$name');";
445             }
446             }
447             }!,
448              
449             hook_update => q!function MODULENAME_update($node) {
450             db_query("UPDATE {mytable} SET extra = '%s' WHERE nid = %d",
451             $node->extra, $node->nid);
452             } !,
453              
454             hook_update_index => q!function MODULENAME_update_index() {
455             $last = variable_get('node_cron_last', 0);
456             $limit = (int)variable_get('search_cron_limit', 100);
457              
458             $result = db_query_range('SELECT n.nid, c.last_comment_timestamp FROM {node} n LEFT JOIN {node_comment_statistics} c ON n.nid = c.nid WHERE n.status = 1 AND n.moderate = 0 AND (n.created > %d OR n.changed > %d OR c.last_comment_timestamp > %d) ORDER BY GREATEST(n.created, n.changed, c.last_comment_timestamp) ASC', $last, $last, $last, 0, $limit);
459              
460             while ($node = db_fetch_object($result)) {
461             $last_comment = $node->last_comment_timestamp;
462             $node = node_load(array('nid' => $node->nid));
463              
464             // We update this variable per node in case cron times out, or if the node
465             // cannot be indexed (PHP nodes which call drupal_goto, for example).
466             // In rare cases this can mean a node is only partially indexed, but the
467             // chances of this happening are very small.
468             variable_set('node_cron_last', max($last_comment, $node->changed, $node->created));
469              
470             // Get node output (filtered and with module-specific fields).
471             if (node_hook($node, 'view')) {
472             node_invoke($node, 'view', false, false);
473             }
474             else {
475             $node = node_prepare($node, false);
476             }
477             // Allow modules to change $node->body before viewing.
478             node_invoke_nodeapi($node, 'view', false, false);
479              
480             $text = '

'. drupal_specialchars($node->title) .'

'. $node->body;
481              
482             // Fetch extra data normally not visible
483             $extra = node_invoke_nodeapi($node, 'update index');
484             foreach ($extra as $t) {
485             $text .= $t;
486             }
487              
488             // Update index
489             search_index($node->nid, 'node', $text);
490             }
491             }!,
492              
493             hook_user => q!function MODULENAME_user($op, &$edit, &$user, $category) {
494             switch ($op) {
495             case 'view':
496             if ($user->signature) {
497             return array('account' => form_item(t('Signature'), check_output($user->signature)));
498             }
499             break;
500             case 'form':
501             // When user tries to edit his own data:
502             if ($category == 'account') {
503             return array(array('title' => t('Personal information'), 'data' => form_textarea(t('Signature'), 'signature', $user->signature, 70, 3, t('Your signature will be publicly displayed at the end of your comments.') .'
'. filter_tips_short()), 'weight' => 0));
504             }
505             }
506             }!,
507              
508             hook_validate => q!function MODULENAME_validate(&$node) {
509             if ($node) {
510             if ($node->end && $node->start) {
511             if ($node->start > $node->end) {
512             form_set_error('time', t('An event may not end before it starts.'));
513             }
514             }
515             }
516             } !,
517            
518             hook_view => q!function MODULENAME_view(&$node, $teaser = FALSE, $page = FALSE) {
519             if ($page) {
520             $breadcrumb = array();
521             $breadcrumb[] = array('path' => 'example', 'title' => t('example'));
522             $breadcrumb[] = array('path' => 'example/'. $node->field1,
523             'title' => t('%category', array('%category' => $node->field1)));
524             $breadcrumb[] = array('path' => 'node/'. $node->nid);
525             menu_set_location($breadcrumb);
526             }
527              
528             $node = node_prepare($node, $teaser);
529             }!,
530            
531             hook_xmlrpc => q!function MODULENAME_xmlrpc() {
532             return array('drupal.site.ping' => array('function' => 'drupal_directory_ping'),
533             'drupal.login' => array('function' => 'drupal_login'));
534             } !,
535            
536             clean_menu => q!function MODULENAME_menu($may_cache) {
537             global $user;
538             $items = array();
539              
540             if ($may_cache) {
541            
542             MENU_ITEMLIST
543            
544             }
545             return $items!,
546              
547             };
548              
549              
550              
551             =head1 SYNOPSIS
552              
553             For this version, 4_6_2.pm is the only set of hooks provided. Other versions
554             could easily be created
555              
556             =head1 FUNCTIONS
557              
558             =head2 new - constructor - no paramaters required
559              
560             =cut
561              
562             sub new {
563 0     0 1   my ($self,$class) = ({},shift);
564 0           bless $stubs,$class;
565 0           return $stubs;
566             }
567              
568             =head2 stub - return a php function stub for the named parameter
569              
570             =cut
571              
572             sub stub {
573 0     0 1   my $self = shift;
574 0           return $self->{stubs}->{shift};
575             }
576              
577              
578              
579              
580             =head1 AUTHOR
581              
582             Steve McNabb, C<< >>
583             IT Director, F5 Site Design - http://www.f5sitedesign.com
584             Open Source Internet Application Development
585              
586             =cut
587             1;