/[drupal]/contributions/sandbox/GurpartapSingh/modules/smileys/smileys.module
ViewVC logotype

Contents of /contributions/sandbox/GurpartapSingh/modules/smileys/smileys.module

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (show annotations) (download) (as text)
Thu Nov 9 08:58:09 2006 UTC (3 years ago) by Gurpartap
Branch: MAIN
CVS Tags: HEAD
File MIME type: text/x-php
New smileys module for Drupal 5.x. Development commit.
1 <?php
2 // $Id: smileys.module,v 1.46 2006/07/12 10:41:16 unconed Exp $
3
4 function smileys_help($section) {
5 switch ($section) {
6 case 'admin/settings/smileys':
7 case 'admin/settings/smileys/list':
8 return t('Here you can add/edit the smileys that are recognised by your site.');
9 }
10 }
11
12 function smileys_perm() {
13 return array('administer smileys', 'use smiley select box');
14 }
15
16 function smileys_filter_tips($delta, $format, $long = false) {
17 if ($long) {
18 return t('If you include a textual smiley in your post (see chart below), it will be replaced by a graphical smiley.') . '<br />' . smileys_table();
19 }
20 else {
21 $GLOBALS['display_smileys_block'] = true;
22 return t('Textual smileys will be replaced with graphical ones.');
23 }
24 }
25
26 function _smileys_list($refresh = 0, $whereclause = '') {
27 if($whereclause != '') {
28 $whereclause = ' WHERE ' . $whereclause;
29 }
30 static $list;
31 if (!$list || $refresh) {
32 $result = db_query('SELECT * FROM {smileys} ' . $whereclause);
33 $list = array();
34 while ($a = db_fetch_object($result)) {
35 $list[] = $a;
36 }
37 }
38 return $list;
39 }
40
41 function smileys_block($op = 'list', $delta = 0) {
42 if ($op == 'list') {
43 $blocks[0]['info'] = t('Smileys on submission pages');
44 return $blocks;
45 }
46 else if ($op == 'view') {
47 switch ($delta) {
48 case 0:
49 $block['subject'] = t('Smileys');
50 $block['content'] = $GLOBALS['display_smileys_block'] ? smileys_table() : '';
51 return $block;
52 }
53 }
54 }
55
56 function smileys_form_alter($form_id, &$form) {
57 if (user_access('use smiley select box') && ((isset($form['type']) && $form['type']['#value'] .'_node_form' == $form_id) && variable_get('smileys_enable_for_nodes', 0)) || ('comment_form' == $form_id && variable_get('smileys_enable_for_comments', 0))) {
58 $output = '';
59 $form['smileys'] = array(
60 '#type' => 'fieldset',
61 '#title' => t('Smileys'),
62 '#collapsible' => TRUE,
63 '#weight' => 0,
64 );
65 $form['smileys']['smileys_box'] = array(
66 '#type' => 'markup',
67 '#value' => theme('smileys_select_table'),
68 );
69 }
70 return $form;
71 }
72
73 function theme_smileys_select_table() {
74 drupal_add_js(drupal_get_path('module', 'smileys') .'/smileys.js');
75 drupal_add_css(drupal_get_path('module', 'smileys') .'/smileys.css');
76 $content .= '<div id="smileys">';
77 $list = _smileys_list();
78 foreach ($list as $smiley) {
79 $acronyms = explode(' ', $smiley->acronyms);
80 $alt = check_plain(implode(' ', $acronyms));
81 $desc = implode('&nbsp; ', $acronyms);
82 $content .= '<span><img src="'. check_url(base_path() . $smiley->image) .'" title="'. check_plain($smiley->description) .'" alt="'. $acronyms[0] .'" class="smiley-class"/></span>';
83 }
84 $content .= '</div>';
85 return $content;
86 }
87
88 function smileys_table() {
89 drupal_add_js(drupal_get_path('module', 'smileys') .'/smileys.js');
90 drupal_add_css(drupal_get_path('module', 'smileys') .'/smileys.css');
91 $form = array();
92 $output = '';
93 $header = array(t('Smiley'), t('Acronyms'));
94 $rows = array();
95 $list = _smileys_list(1);
96 foreach ($list as $smiley) {
97 $acronyms = explode(' ', $smiley->acronyms);
98 $rows[] = array(
99 '<img src="'. check_url(base_path() . $smiley->image) .'" alt="'. $acronyms[0] .'" title="'. check_plain($smiley->description) .'" class="smiley-class" />',
100 check_plain($smiley->acronyms)
101 );
102 }
103 $form['smileys'] = array(
104 '#type' => 'fieldset',
105 '#title' => t('Smileys'),
106 '#collapsible' => TRUE,
107 );
108 $form['smileys']['smileys_box'] = array(
109 '#type' => 'markup',
110 '#value' => theme('table', $header, $rows),
111 );
112 $output .= drupal_render($form);
113 return $output;
114 }
115
116 function smileys_filter($op, $delta = 0, $format = -1, $text = "") {
117 switch ($op) {
118 case 'list':
119 return array(0 => t('Smileys filter'));
120 case 'description':
121 return t('Replaces smileys inside posts with images.');
122 case 'settings':
123 $form['smileys_filter'] = array('#type' => 'fieldset', '#title' => t('Smileys filter'), '#value' => t('You can define a global list of smileys on the ' . l('smileys settings page', 'admin/settings/smileys') . '.'));
124 return $form;
125 case "process":
126 return smileys_filter_process($text);
127 default:
128 return $text;
129 }
130 }
131
132 function smileys_filter_process($text) {
133 $text = ' '. $text .' ';
134 $list = _smileys_list();
135 foreach ($list as $smiley) {
136 $acronyms = explode(" ", $smiley->acronyms);
137 $alt = str_replace('\\', '\\\\', check_plain($smiley->description));
138 foreach ($acronyms as $a) {
139 if ($smiley->standalone)
140 $text = eregi_replace("([ ,\.\?!:\(\)\r\n\<\>])". preg_quote($a) ."([ ,\.\?!:\(\)\r\n\<\>])", "\\1<img src=\"". check_url(base_path() . $smiley->image) ."\" title=\"". check_plain($alt) ."\" alt=\"". check_plain($alt) ."\" />\\2", $text);
141 else
142 $text = eregi_replace(preg_quote($a), '<img src="'. check_url(base_path() . $smiley->image) .'" title="'. check_plain($alt) .'" alt="'. check_plain($alt) .'" />', $text);
143 }
144 }
145 $text = substr($text, 1, -1);
146
147 return $text;
148 }
149
150 function smileys_menu($may_cache) {
151 $items = array();
152
153 if ($may_cache) {
154 $access = user_access('administer smileys');
155
156 $items[] = array(
157 'path' => 'admin/settings/smileys',
158 'title' => t('Smileys'),
159 'description' => t('Replaces smileys inside posts with images.'),
160 'callback' => 'smileys_admin_list',
161 'access' => $access);
162
163 $items[] = array(
164 'path' => 'admin/settings/smileys/list',
165 'title' => t('List'),
166 'callback' => 'smileys_admin_list',
167 'type' => MENU_DEFAULT_LOCAL_TASK,
168 'weight' => -10);
169
170 $items[] = array(
171 'path' => 'admin/settings/smileys/add',
172 'title' => t('Add'),
173 'callback' => 'smileys_admin_add',
174 'access' => $access,
175 'type' => MENU_LOCAL_TASK);
176
177 $items[] = array(
178 'path' => 'admin/settings/smileys/configure',
179 'title' => t('Settings'),
180 'description' => t('Smileys configuration.'),
181 'callback' => 'drupal_get_form',
182 'callback arguments' => 'smileys_admin_settings',
183 'access' => user_access('administer smileys'),
184 'weight' => 8,
185 'type' => MENU_LOCAL_TASK,);
186
187 $items[] = array(
188 'path' => 'admin/settings/smileys/edit',
189 'title' => t('Edit smiley'),
190 'callback' => 'smileys_admin_add',
191 'access' => $access,
192 'type' => MENU_CALLBACK);
193
194 $items[] = array(
195 'path' => 'admin/settings/smileys/delete',
196 'title' => t('Delete smiley'),
197 'callback' => 'smileys_admin_delete',
198 'access' => $access,
199 'type' => MENU_CALLBACK);
200 }
201 return $items;
202 }
203
204 function smileys_admin_settings() {
205 $form = array();
206 $form['smileys'] = array(
207 '#type' => 'fieldset',
208 '#title' => t('Smileys settings'),
209 );
210 $form['smileys']['smileys_enable_for'] = array(
211 '#type' => 'markup',
212 '#value' => t('Enable smileys select box for'),
213 );
214 $form['smileys']['smileys_enable_for_nodes'] = array(
215 '#type' => 'checkbox',
216 '#title' => t('Nodes'),
217 '#default_value' => variable_get('smileys_enable_for_nodes', 0),
218 );
219 $form['smileys']['smileys_enable_for_comments'] = array(
220 '#type' => 'checkbox',
221 '#title' => t('Comments'),
222 '#default_value' => variable_get('smileys_enable_for_comments', 0),
223 );
224
225 return system_settings_form($form);
226 }
227
228 function smileys_admin_list() {
229 $header = array(t('Smiley'), t('Acronyms'), t('Description'), t('Operations'));
230 $rows = array();
231 $output = '';
232 $smileyp = db_query("SELECT DISTINCT package FROM {smileys} ORDER BY package");
233 while ($pack = db_fetch_object($smileyp)) {
234 $package = $pack->package;
235 $list = _smileys_list(1, " package = '$package' ");
236 foreach ($list as $smiley) {
237 $rows[] = array(
238 '<img src="'. check_url(base_path() . $smiley->image) .'" alt="'. check_plain($smiley->description) .'" />',
239 check_plain($smiley->acronyms),
240 check_plain($smiley->description),
241 l(t('Edit'), 'admin/settings/smileys/edit/'. $smiley->id) . ' | ' . l(t('Delete'), 'admin/settings/smileys/delete/'. $smiley->id)
242 );
243 }
244 $form['smileys'][$package] = array(
245 '#type' => 'fieldset',
246 '#title' => t($package),
247 '#collapsed' => TRUE,
248 '#collapsible' => TRUE,
249 );
250 $form['smileys'][$package]['smileys_box'] = array(
251 '#type' => 'markup',
252 '#value' => theme('table', $header, $rows),
253 );
254 $output .= drupal_render($form);
255 $form = array();
256 $rows = array();
257 }
258 if ($output == '') {
259 $import = module_exists('smileys_import') ? '<a href="' . url('admin/settings/smileys/import') . '">import</a>' : 'install smileys_import module & import';
260 drupal_set_message(t('No smilies found. You may <a href="' . url('admin/settings/smileys/add') . '">add</a> custom smilies, or ' . $import . ' smiley packages.'));
261 }
262
263 return $output;
264 }
265
266 function smileys_admin_form($edit = array()) {
267 $form = array();
268 if ($edit['id']) {
269 $form['id'] = array('#type' => 'hidden', '#value' => $edit['id']);
270 }
271 $form['acronyms'] = array('#type' => 'textfield', '#title' => t('Acronyms'), '#default_value' => $edit['acronyms'], '#size' => 16, '#maxlength' => 255, '#description' => t('Enter a list of shorthands for the smiley you wish to add, separated by spaces. E.g. \':) ;) :smile:\''));
272 $form['image'] = array('#type' => 'textfield', '#title' => t('Image URL'), '#default_value' => $edit['image'], '#size' => 50, '#maxlength' => 255, '#description' => t('Enter the URL of the smiley-image relative to the root of your Drupal site. E.g. \'images/smileys/happy.png\'.'));
273 $form['description'] = array('#type' => 'textfield', '#title' => t('Description'), '#default_value' => $edit['description'], '#size' => 50, '#maxlength' => 64, '#description' => t('A short description of the emotion depicted to be used as tooltip for the image. E.g. \'Laughing out loud\'.'));
274 $form['standalone'] = array('#type' => 'checkbox', '#title' => t('Stand-alone'), '#default_value' => $edit['standalone'], '#description' => t('When checked, the smiley will only be inserted when an acronym is found as a separate word. This is useful for preventing accidental smileys with short acronyms.'));
275 $form['submit'] = array('#type' => 'submit', '#value' => t('Save Smiley'));
276 if ($edit['id']) {
277 $form['delete'] = array('#type' => 'submit', '#value' => t('Delete Smiley'));
278 }
279
280 return $form;
281 }
282
283 function smileys_admin_form_submit($form_id, $form_values) {
284 if (isset($form_values['id'])) {
285 if ($form_values['op'] == t('Delete Smiley')) {
286 smileys_admin_delete($form_values['id']);
287 return 'admin/settings/smileys';
288 }
289 db_query("UPDATE {smileys} SET acronyms='%s', image='%s', description='%s', standalone=%d WHERE id = %d", $form_values['acronyms'], $form_values['image'], $form_values['description'], $form_values['standalone'], $form_values['id']);
290 $message = t('Updated smiley: %smiley', array('%smiley' => $form_values['acronyms']));
291 }
292 else {
293 db_query("INSERT INTO {smileys} (acronyms, image, description, standalone) VALUES ('%s', '%s', '%s', %d)", $form_values["acronyms"], $form_values["image"], $form_values["description"], $form_values["standalone"]);
294 $message = t('Added smiley: %smiley', array('%smiley' => $form_values['acronyms']));
295 }
296
297 watchdog('regular', $message);
298 drupal_set_message($message);
299 return 'admin/settings/smileys';
300 }
301
302 function smileys_admin_form_validate($form_id, $form_values) {
303 if (trim($form_values['acronyms']) == t('Delete Smiley')) {
304 form_set_error('acronyms', t('Please enter an acronym for your smiley.'));
305 }
306
307 if ($form_values['image'] == '') {
308 form_set_error('image', t('Please enter the URL of the smiley image.'));
309 }
310 return !form_get_errors();
311 }
312
313 function smileys_admin_delete($sid) {
314 $smiley_id = $sid ? $sid : arg(4);
315 $smiley = db_fetch_array(db_query('SELECT * FROM {smileys} WHERE id = %d', $smiley_id));
316 if ($smiley_id) {
317 db_query("DELETE FROM {smileys} WHERE id = %d", $smiley_id);
318 $message = t('Deleted smiley: %smiley', array('%smiley' => $smiley['acronyms']));
319 watchdog('regular', $message);
320 drupal_set_message($message);
321 }
322 drupal_goto('admin/settings/smileys');
323 }
324
325 function smileys_admin_add() {
326 $edit = $_POST['edit'];
327 if ($smiley_id = arg(4)) {
328 $smiley = db_fetch_array(db_query('SELECT * FROM {smileys} WHERE id = %d', $smiley_id));
329 $edit = $smiley ? $smiley : $_POST['edit'];
330 }
331 return drupal_get_form('smileys_admin_form', $edit);
332 }

  ViewVC Help
Powered by ViewVC 1.1.2