comparison modules/dnd_test/dnd_test.module @ 26:45c6c48c2a88

Moved dnd_test module.
author David Eads <eads@chicagotech.org>
date Wed, 11 Mar 2009 22:52:20 -0500
parents dnd_test/dnd_test.module@4f58fa0a9a6d
children 7d6bf2dca269
comparison
equal deleted inserted replaced
25:e71df38143d1 26:45c6c48c2a88
1 <?php
2
3 /**
4 * Implementation of hook_menu().
5 */
6 function dnd_test_menu() {
7 $items = array();
8 $items['dnd-test/library'] = array(
9 'title' => 'Drag and drop test library',
10 'page callback' => 'dnd_test_library',
11 'access arguments' => array('access dnd test library'),
12 );
13 return $items;
14 }
15
16 /**
17 * Implementation of hook_perm().
18 */
19 function dnd_test_perm() {
20 return array('access dnd test library');
21 }
22
23 /**
24 * Implementation of hook_form_alter().
25 *
26 * This demonstrates how to attach Drag and Drop to a given textarea.
27 */
28 function dnd_test_form_alter(&$form, &$form_state) {
29 if ($form['#id'] == 'node-form' && $form['type']['#value'] == 'page') {
30 drupal_add_css(drupal_get_path('module', 'dnd_test') .'/dnd_test.css');
31 $form['body_field']['body']['#dnd-enabled'] = TRUE;
32 $form['body_field']['body']['#dnd-settings'] = array(
33 'drop_selector' => '#edit-body-dnd-library .drop',
34 'url' => 'dnd-test/library',
35 );
36 $form['body_field']['body']['#rows'] = 28;
37 }
38 }
39
40 /**
41 * Implementation of hook_theme().
42 */
43 function dnd_test_theme() {
44 return array(
45 'dnd_editor_item' => array(
46 'arguments' => array('i' => NULL, 'size' => NULL),
47 'template' => 'dnd-editor-item',
48 ),
49 'dnd_library_item' => array(
50 'arguments' => array('i' => NULL),
51 'template' => 'dnd-library-item',
52 ),
53 'dnd_library_preview' => array(
54 'arguments' => array('i' => NULL),
55 'template' => 'dnd-library-preview',
56 ),
57 'dnd_library_header' => array(
58 'arguments' => array('page' => NULL),
59 'template' => 'dnd-library-header',
60 ),
61 );
62 }
63
64 /**
65 * Page callback that returns some JSON
66 */
67 function dnd_test_library() {
68 $page = ($_GET['page']) ? $_GET['page'] : 1;
69 $test_library = dnd_test_generate_library($page);
70 return drupal_json(array(
71 'header' => theme('dnd_library_header', $page),
72 'library' => $test_library['library'],
73 'editor_representations' => $test_library['editor_representations'],
74 'library_previews' => $test_library['library_previews'],
75 'footer' => '<div class="pager">'. l(t('1'), 'dnd-test/library') . ' '. l(t('2'), 'dnd-test/library', array('query' => array('page' => 2))) .'</div>',
76 ));
77 }
78
79 /**
80 * Create contrived output
81 */
82 function dnd_test_generate_library($page = 1, $limit = 8) {
83 $start = ($page * $limit) - ($limit);
84 $end = $page * $limit;
85
86 $library = '';
87 $editor_representations = array();
88 $library_previews = array();
89 for ($i=$start + 1; $i < $end + 1; $i++) {
90 $library .= theme('dnd_library_item', $i);
91 $editor_representations += dnd_editor_items($i);
92 $library_previews['dnd-test-'. $i] = theme('dnd_library_preview', $i);
93 }
94 return array(
95 'library' => $library,
96 'editor_representations' => $editor_representations,
97 'library_previews' => $library_previews,
98 );
99 }
100
101 /**
102 * Theme wrapper that spins out multiple library representations for a given
103 * editor representation. This is because we want to demonstrate how to allow
104 * for multiple versions (i.e. different sizes) of a single item
105 */
106 function dnd_editor_items($i) {
107 $item = array();
108 foreach(array(t('S'), t('M'), t('L')) as $size) {
109 $item[$i .'-'. $size] = array(
110 'body' => theme('dnd_editor_item', $i, $size),
111 'title' => 'Item '. $i .'-S',
112 );
113 }
114 return $item;
115 }
116
117 /**
118 * Completely contrived library preview theme function
119 */
120 function template_preprocess_dnd_library_preview(&$variables) {
121 template_preprocess_dnd_library_item($variables);
122
123 $variables['id'] = 'dnd-preview-'. $variables['i'];
124 $variables['image'] = '<img src="http://'. $_SERVER['HTTP_HOST'] . base_path() . drupal_get_path('module', 'dnd_test') .'/img/item-'. $variables['img_num'] .'-S.jpg" class="drop" width="125" height="94" />';
125
126 $variables['description'] = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.';
127 }
128
129
130 /**
131 * Completely contrived edit item theme function
132 */
133 function template_preprocess_dnd_library_item(&$variables) {
134 global $_SERVER;
135
136 $i = $variables['i'];
137
138 if ($i % 3 == 0) {
139 $img = 3;
140 }
141 else if ($i % 2 == 0) {
142 $img = 2;
143 }
144 else {
145 $img = 1;
146 }
147
148 $variables['img_num'] = $img;
149 $variables['id'] = 'dnd-test-'. $i;
150 $variables['image'] = '<img src="http://'. $_SERVER['HTTP_HOST'] . base_path() . drupal_get_path('module', 'dnd_test') .'/img/item-'. $img .'-thumb.jpg?dnd_id='. $i .'-M" class="drop" />';
151 $variables['title'] = t('Lorem Ipsum @count', array('@count' => $i));
152 $variables['date'] = 'Feb 18 2009';
153 $variables['author'] = 'David Eads';
154 foreach(array(t('S'), t('M'), t('L')) as $size) {
155 $sizes[] = '<img src="http://'. $_SERVER['HTTP_HOST'] . base_path() . drupal_get_path('module', 'dnd_test') .'/img/icon/'. $size .'.png?dnd_id='. $i .'-'. $size .'" class="drop" />';
156 }
157 $variables['sizes'] = '<ul><li>'. implode('</li><li>', $sizes) .'</li></ul>';
158 }
159
160 function template_preprocess_dnd_editor_item(&$variables) {
161 list($i, $size) = array($variables['i'], $variables['size']);
162
163 if ($i % 3 == 0) {
164 $img = 3;
165 }
166 else if ($i % 2 == 0) {
167 $img = 2;
168 }
169 else {
170 $img = 1;
171 }
172 $variables['image'] = theme('image', drupal_get_path('module', 'dnd_test') .'/img/item-'. $img .'-'. $size .'.jpg', '', '', array('class' => 'dnd-dropped', 'id' => 'dnd-id-'. $i));
173 }
174
175 function template_preprocess_dnd_library_header(&$variables) {}