Mercurial > defr > drupal > core
comparison modules/book/book.admin.inc @ 7:fff6d4c8c043 6.3
Drupal 6.3
author | Franck Deroche <webmaster@defr.org> |
---|---|
date | Tue, 23 Dec 2008 14:30:28 +0100 |
parents | c1f4ac30525a |
children | 8b6c45761e01 |
comparison
equal
deleted
inserted
replaced
6:2cfdc3c92142 | 7:fff6d4c8c043 |
---|---|
1 <?php | 1 <?php |
2 // $Id: book.admin.inc,v 1.8 2008/01/08 10:35:41 goba Exp $ | 2 // $Id: book.admin.inc,v 1.8.2.2 2008/07/08 10:19:46 goba Exp $ |
3 | 3 |
4 /** | 4 /** |
5 * @file | 5 * @file |
6 * Admin page callbacks for the book module. | 6 * Admin page callbacks for the book module. |
7 */ | 7 */ |
70 */ | 70 */ |
71 function book_admin_edit($form_state, $node) { | 71 function book_admin_edit($form_state, $node) { |
72 drupal_set_title(check_plain($node->title)); | 72 drupal_set_title(check_plain($node->title)); |
73 $form = array(); | 73 $form = array(); |
74 $form['#node'] = $node; | 74 $form['#node'] = $node; |
75 $form['table'] = _book_admin_table($node); | 75 _book_admin_table($node, $form); |
76 $form['save'] = array( | 76 $form['save'] = array( |
77 '#type' => 'submit', | 77 '#type' => 'submit', |
78 '#value' => t('Save book pages'), | 78 '#value' => t('Save book pages'), |
79 ); | 79 ); |
80 return $form; | 80 return $form; |
81 } | |
82 | |
83 /** | |
84 * Check that the book has not been changed while using the form. | |
85 * | |
86 * @see book_admin_edit() | |
87 */ | |
88 function book_admin_edit_validate($form, &$form_state) { | |
89 if ($form_state['values']['tree_hash'] != $form_state['values']['tree_current_hash']) { | |
90 form_set_error('', t('This book has been modified by another user, the changes could not be saved.')); | |
91 $form_state['rebuild'] = TRUE; | |
92 } | |
81 } | 93 } |
82 | 94 |
83 /** | 95 /** |
84 * Handle submission of the book administrative page form. | 96 * Handle submission of the book administrative page form. |
85 * | 97 * |
126 /** | 138 /** |
127 * Build the table portion of the form for the book administration page. | 139 * Build the table portion of the form for the book administration page. |
128 * | 140 * |
129 * @see book_admin_edit() | 141 * @see book_admin_edit() |
130 */ | 142 */ |
131 function _book_admin_table($node) { | 143 function _book_admin_table($node, &$form) { |
132 $form = array( | 144 $form['table'] = array( |
133 '#theme' => 'book_admin_table', | 145 '#theme' => 'book_admin_table', |
134 '#tree' => TRUE, | 146 '#tree' => TRUE, |
135 ); | 147 ); |
136 | 148 |
137 $tree = book_menu_subtree_data($node->book); | 149 $tree = book_menu_subtree_data($node->book); |
138 $tree = array_shift($tree); // Do not include the book item itself. | 150 $tree = array_shift($tree); // Do not include the book item itself. |
139 if ($tree['below']) { | 151 if ($tree['below']) { |
140 _book_admin_table_tree($tree['below'], $form); | 152 $hash = sha1(serialize($tree['below'])); |
141 } | 153 // Store the hash value as a hidden form element so that we can detect |
142 return $form; | 154 // if another user changed the book hierarchy. |
155 $form['tree_hash'] = array( | |
156 '#type' => 'hidden', | |
157 '#default_value' => $hash, | |
158 ); | |
159 $form['tree_current_hash'] = array( | |
160 '#type' => 'value', | |
161 '#value' => $hash, | |
162 ); | |
163 _book_admin_table_tree($tree['below'], $form['table']); | |
164 } | |
143 } | 165 } |
144 | 166 |
145 /** | 167 /** |
146 * Recursive helper to build the main table in the book administration page form. | 168 * Recursive helper to build the main table in the book administration page form. |
147 * | 169 * |
224 } | 246 } |
225 | 247 |
226 return theme('table', $header, $rows, array('id' => 'book-outline')); | 248 return theme('table', $header, $rows, array('id' => 'book-outline')); |
227 } | 249 } |
228 | 250 |
229 /** | |
230 * Recursive helper to sort each layer of a book tree by weight. | |
231 */ | |
232 function _book_admin_sort_tree(&$tree) { | |
233 uasort($tree, '_book_admin_compare'); | |
234 foreach ($tree as $key => $subtree) { | |
235 if (!empty($tree[$key]['below'])) { | |
236 _book_admin_sort_tree($tree[$key]['below']); | |
237 } | |
238 } | |
239 } | |
240 | |
241 /** | |
242 * Used by uasort() in _book_admin_sort_tree() to compare items in a book tree. | |
243 */ | |
244 function _book_admin_compare($a, $b) { | |
245 $weight = $a['link']['weight'] - $b['link']['weight']; | |
246 if ($weight) { | |
247 return $weight; | |
248 } | |
249 return strncmp($a['link']['title'], $b['link']['title']); | |
250 } |