annotate text/ad_text.module @ 0:d8a3998dac8e ad

ajout module ad
author pierre
date Fri, 20 Feb 2009 14:04:09 +0000
parents
children 948362c2a207
rev   line source
pierre@0 1 <?php
pierre@0 2 // $Id: ad_text.module,v 1.2.2.7.2.24.2.13 2009/02/17 18:56:26 jeremy Exp $
pierre@0 3
pierre@0 4 /**
pierre@0 5 * @file
pierre@0 6 * Enhances the ad module to support static text ads.
pierre@0 7 *
pierre@0 8 * Copyright (c) 2005-2009.
pierre@0 9 * Jeremy Andrews <jeremy@tag1consulting.com>.
pierre@0 10 */
pierre@0 11
pierre@0 12 /**
pierre@0 13 * Function used to display the selected ad.
pierre@0 14 */
pierre@0 15 function ad_text_display_ad($ad) {
pierre@0 16 return theme('ad_text_ad', $ad);
pierre@0 17 }
pierre@0 18
pierre@0 19 /**
pierre@0 20 * Return a themed ad of type ad_text.
pierre@0 21 *
pierre@0 22 * @param @ad
pierre@0 23 * The ad object.
pierre@0 24 * @return
pierre@0 25 * A string containing the ad markup.
pierre@0 26 */
pierre@0 27 function theme_ad_text_ad($ad) {
pierre@0 28 if (isset($ad->aid)) {
pierre@0 29 $output = '<div class="text-advertisement" id="ad-'. $ad->aid .'">';
pierre@0 30 if (isset($ad->url) && !empty($ad->url)) {
pierre@0 31 $output .= theme('ad_text_text', ad_text_display_prepare($ad->adheader, $ad->format), ad_text_display_prepare($ad->adbody, $ad->format), $ad->redirect .'/@HOSTID___');
pierre@0 32 }
pierre@0 33 else {
pierre@0 34 $output .= theme('ad_text_text', ad_text_display_prepare($ad->adheader, $ad->format), ad_text_display_prepare($ad->adbody, $ad->format));
pierre@0 35 }
pierre@0 36 $output .= '</div>';
pierre@0 37 return $output;
pierre@0 38 }
pierre@0 39 }
pierre@0 40
pierre@0 41 /**
pierre@0 42 * Return a themed text ad.
pierre@0 43 *
pierre@0 44 * @param $header
pierre@0 45 * The header of the text ad.
pierre@0 46 * @param $body
pierre@0 47 * The body of the text ad.
pierre@0 48 * @param $link
pierre@0 49 * Optional link URL for header.
pierre@0 50 * @return
pierre@0 51 * A string containing the text ad.
pierre@0 52 */
pierre@0 53 function theme_ad_text_text($header, $body, $link = NULL) {
pierre@0 54 $output = '<div class="ad-header">';
pierre@0 55 if (isset($link) && !empty($link)) {
pierre@0 56 $output .= l($header, $link, array('attributes' => ad_link_attributes(), 'html' => TRUE));
pierre@0 57 }
pierre@0 58 else {
pierre@0 59 $output .= $header;
pierre@0 60 }
pierre@0 61 $output .= '</div>';
pierre@0 62 $output .= '<div class="ad-body">'. $body .'</div>';
pierre@0 63 return $output;
pierre@0 64 }
pierre@0 65
pierre@0 66 /**
pierre@0 67 * Strip illegal characters, apply input filters, then encode the rest UTF-8.
pierre@0 68 */
pierre@0 69 function ad_text_display_prepare($string, $format) {
pierre@0 70 $string = preg_replace("/[\b\f\n\r\t]/", ' ', $string);
pierre@0 71 $string = check_markup($string, $format, FALSE);
pierre@0 72 return $string;
pierre@0 73 }
pierre@0 74
pierre@0 75 /**
pierre@0 76 * Implementation of hook_theme().
pierre@0 77 */
pierre@0 78 function ad_text_theme() {
pierre@0 79 return array(
pierre@0 80 'ad_text_ad' => array(
pierre@0 81 'file' => 'ad_text.module',
pierre@0 82 'arguments' => array(
pierre@0 83 'ad' => NULL,
pierre@0 84 ),
pierre@0 85 ),
pierre@0 86 'ad_text_text' => array(
pierre@0 87 'file' => 'ad_text.module',
pierre@0 88 'arguments' => array(
pierre@0 89 'header' => NULL,
pierre@0 90 'body' => NULL,
pierre@0 91 'link' => NULL,
pierre@0 92 ),
pierre@0 93 ),
pierre@0 94 );
pierre@0 95 }
pierre@0 96
pierre@0 97 /**
pierre@0 98 * Implementation of hook_help().
pierre@0 99 */
pierre@0 100 function ad_text_help($path, $arg) {
pierre@0 101 $output = '';
pierre@0 102 switch ($path) {
pierre@0 103 case 'node/add/ad#text':
pierre@0 104 $output = t('A text advertisement.');
pierre@0 105 break;
pierre@0 106 }
pierre@0 107 return $output;
pierre@0 108 }
pierre@0 109
pierre@0 110 /**
pierre@0 111 * Implementation of hook_access().
pierre@0 112 */
pierre@0 113 function ad_text_access($op, $node, $account) {
pierre@0 114 return ad_access($op, $node, $account);
pierre@0 115 }
pierre@0 116
pierre@0 117 /**
pierre@0 118 * Text ad settings form.
pierre@0 119 */
pierre@0 120 function ad_text_global_settings($form_state) {
pierre@0 121 $form = array();
pierre@0 122
pierre@0 123 $form['header_min'] = array(
pierre@0 124 '#type' => 'textfield',
pierre@0 125 '#title' => t('Header minimum length'),
pierre@0 126 '#size' => 3,
pierre@0 127 '#maxlength' => 3,
pierre@0 128 '#default_value' => variable_get('header_min', 0),
pierre@0 129 '#description' => t('Optionally specify the minimum number of characters allowed in the header of a text ad. Set to <em>0</em> to specify no minimum length.'),
pierre@0 130 );
pierre@0 131 $form['header_max'] = array(
pierre@0 132 '#type' => 'textfield',
pierre@0 133 '#title' => t('Header maximum length'),
pierre@0 134 '#size' => 3,
pierre@0 135 '#maxlength' => 3,
pierre@0 136 '#default_value' => variable_get('header_max', 0),
pierre@0 137 '#description' => t('Optionally specify the maximum number of characters allowed in the header of a text ad. Set to <em>0</em> to specify no maximum length.'),
pierre@0 138 );
pierre@0 139 $form['body_min'] = array(
pierre@0 140 '#type' => 'textfield',
pierre@0 141 '#title' => t('Body minimum length'),
pierre@0 142 '#size' => 10,
pierre@0 143 '#maxlength' => 10,
pierre@0 144 '#default_value' => variable_get('body_min', 0),
pierre@0 145 '#description' => t('Optionally specify the minimum number of characters allowed in the body of a text ad. Set to <em>0</em> to specify no minimum length.'),
pierre@0 146 );
pierre@0 147 $form['body_max'] = array(
pierre@0 148 '#type' => 'textfield',
pierre@0 149 '#title' => t('Body maximum length'),
pierre@0 150 '#size' => 10,
pierre@0 151 '#maxlength' => 10,
pierre@0 152 '#default_value' => variable_get('body_max', 0),
pierre@0 153 '#description' => t('Optionally specify the maximum number of characters allowed in the body of a text ad. Set to <em>0</em> to specify no maximum length.'),
pierre@0 154 );
pierre@0 155
pierre@0 156
pierre@0 157 $form['save'] = array(
pierre@0 158 '#type' => 'submit',
pierre@0 159 '#value' => t('Save'),
pierre@0 160 );
pierre@0 161
pierre@0 162 return $form;
pierre@0 163 }
pierre@0 164
pierre@0 165 /**
pierre@0 166 * Settings form validation handler.
pierre@0 167 */
pierre@0 168 function ad_text_global_settings_validate($form, &$form_state) {
pierre@0 169 if ((int)$form_state['values']['header_min'] > (int)$form_state['values']['header_max']) {
pierre@0 170 form_set_error('header_min', t('The header minimum length can not be greater than the header maximum length.'));
pierre@0 171 }
pierre@0 172 if ((int)$form_state['values']['body_min'] > (int)$form_state['values']['body_max']) {
pierre@0 173 form_set_error('body_min', t('The body minimum length can not be greater than the body maximum length.'));
pierre@0 174 }
pierre@0 175 }
pierre@0 176
pierre@0 177 /**
pierre@0 178 * Settings form submit handler.
pierre@0 179 */
pierre@0 180 function ad_text_global_settings_submit($form, &$form_state) {
pierre@0 181 variable_set('header_min', $form_state['values']['header_min']);
pierre@0 182 variable_set('header_max', $form_state['values']['header_max']);
pierre@0 183 variable_set('body_min', $form_state['values']['body_min']);
pierre@0 184 variable_set('body_max', $form_state['values']['body_max']);
pierre@0 185 }
pierre@0 186
pierre@0 187 /**
pierre@0 188 * Implementation of hook_adapi().
pierre@0 189 */
pierre@0 190 function ad_text_adapi($op, &$node) {
pierre@0 191 switch ($op) {
pierre@0 192 case 'load':
pierre@0 193 $return = db_fetch_array(db_query('SELECT aid, url, adheader, adbody FROM {ad_text} WHERE aid = %d', $node['aid']));
pierre@0 194 $return['ad'] = ad_text_display_prepare($return['adheader'], $node['format']) .'<br />'. ad_text_display_prepare($return['adbody'], $node['format']);
pierre@0 195 return $return;
pierre@0 196
pierre@0 197 case 'insert':
pierre@0 198 db_query("INSERT INTO {ad_text} (aid, url, adheader, adbody) VALUES(%d, '%s', '%s', '%s')", $node->nid, $node->url, $node->adheader, $node->adbody);
pierre@0 199 break;
pierre@0 200
pierre@0 201 case 'update':
pierre@0 202 if (ad_adaccess($node, 'manage ad text')) {
pierre@0 203 db_query("UPDATE {ad_text} SET url = '%s', adheader = '%s', adbody = '%s' WHERE aid = %d", $node->url, $node->adheader, $node->adbody, $node->nid);
pierre@0 204 }
pierre@0 205 break;
pierre@0 206
pierre@0 207 case 'delete':
pierre@0 208 db_query('DELETE FROM {ad_text} WHERE aid = %d', $node->nid);
pierre@0 209 break;
pierre@0 210
pierre@0 211 case 'form':
pierre@0 212 return ad_text_node_form($node);
pierre@0 213
pierre@0 214 case 'view':
pierre@0 215 return ad_text_node_view($node);
pierre@0 216
pierre@0 217 case 'redirect':
pierre@0 218 return db_result(db_query('SELECT url FROM {ad_text} WHERE aid = %d', $node->nid));
pierre@0 219
pierre@0 220 case 'validate':
pierre@0 221 $todo = array();
pierre@0 222 return ad_text_node_validate($node, $todo);
pierre@0 223
pierre@0 224 case 'type':
pierre@0 225 return array(
pierre@0 226 'text' => array(
pierre@0 227 'name' => t('Text ad'),
pierre@0 228 'module' => 'ad_text',
pierre@0 229 'description' => t('A text advertisement.'),
pierre@0 230 'help' => t('A text advertisement.'),
pierre@0 231 ),
pierre@0 232 );
pierre@0 233
pierre@0 234 case 'permissions':
pierre@0 235 if (!isset($node->adtype) || $node->adtype == 'text') {
pierre@0 236 return array('manage ad text');
pierre@0 237 }
pierre@0 238 }
pierre@0 239 }
pierre@0 240
pierre@0 241 /**
pierre@0 242 * Adapi helper function for displaying a node form.
pierre@0 243 */
pierre@0 244 function ad_text_node_form(&$node) {
pierre@0 245 $form = array();
pierre@0 246
pierre@0 247 $form['ad_text'] = array(
pierre@0 248 '#type' => 'fieldset',
pierre@0 249 '#title' => t('Text'),
pierre@0 250 '#collapsible' => TRUE,
pierre@0 251 );
pierre@0 252
pierre@0 253 if (ad_adaccess($node, 'manage ad text') || arg(1) == 'add' && user_access('create advertisements')) {
pierre@0 254 $access = TRUE;
pierre@0 255 }
pierre@0 256 else {
pierre@0 257 $access = FALSE;
pierre@0 258 $form['ad_text']['notice'] = array(
pierre@0 259 '#type' => 'markup',
pierre@0 260 '#value' => '<p>'. t('You do not have permission to edit this advertisement.') .'</p>',
pierre@0 261 );
pierre@0 262 }
pierre@0 263
pierre@0 264 $form['ad_text']['text'] = array(
pierre@0 265 '#type' => 'markup',
pierre@0 266 '#value' => ad_text_display_ad($node),
pierre@0 267 );
pierre@0 268
pierre@0 269 $form['ad_text']['url'] = array(
pierre@0 270 '#type' => 'textfield',
pierre@0 271 '#title' => t('Destination URL'),
pierre@0 272 '#maxlength' => 255,
pierre@0 273 '#default_value' => isset($node->url) ? $node->url : '',
pierre@0 274 '#description' => t('Enter the complete URL where you want people to be redirected when they click on this advertisement. The URL must be valid and begin with http:// or https://, for example %url, unless you !disable. If you do not enter a URL, the advertisement will not be clickable.', array('%url' => t('http://www.sample.org/'), '!disable' => l(t('disable URL validation'), 'admin/content/ad/configure', array('fragment' => 'edit-ad-validate-url-wrapper')))),
pierre@0 275 '#disabled' => !$access,
pierre@0 276 );
pierre@0 277
pierre@0 278 $form['ad_text']['adheader'] = array(
pierre@0 279 '#type' => 'textfield',
pierre@0 280 '#title' => t('Ad header'),
pierre@0 281 '#required' => $access,
pierre@0 282 '#default_value' => isset($node->adheader) ? $node->adheader : '',
pierre@0 283 '#description' => t('This is the first line of the ad which will be linked to the URL entered above.'),
pierre@0 284 '#disabled' => !$access,
pierre@0 285 );
pierre@0 286 $form['ad_text']['adbody'] = array(
pierre@0 287 '#type' => 'textarea',
pierre@0 288 '#title' => t('Ad body'),
pierre@0 289 '#required' => $access,
pierre@0 290 '#default_value' => isset($node->adbody) ? $node->adbody : '',
pierre@0 291 '#description' => t('This is the rest of the ad.'),
pierre@0 292 '#disabled' => !$access,
pierre@0 293 );
pierre@0 294
pierre@0 295 return $form;
pierre@0 296 }
pierre@0 297
pierre@0 298 /**
pierre@0 299 * Adapi helper function for displaying ad itself.
pierre@0 300 */
pierre@0 301 function ad_text_node_view(&$node) {
pierre@0 302 $node->content['ad'] = array(
pierre@0 303 '#value' => theme('box', '', preg_replace('&@HOSTID___&', '0', (ad_text_display_ad($node)))),
pierre@0 304 '#weight' => -1,
pierre@0 305 );
pierre@0 306 if (!empty($node->url)) {
pierre@0 307 $link = t('Links to !url.', array('!url' => $node->url));
pierre@0 308 $link = check_plain($link, $node->format, FALSE);
pierre@0 309 $node->content['ad-link'] = array(
pierre@0 310 '#value' => "<div class=\"links-to\">$link</div>",
pierre@0 311 '#weight' => 1,
pierre@0 312 );
pierre@0 313 }
pierre@0 314 }
pierre@0 315
pierre@0 316 /**
pierre@0 317 * Text ads node validator.
pierre@0 318 */
pierre@0 319 function ad_text_node_validate($node, &$form_state) {
pierre@0 320 // Enforce minimum and maximum lengths.
pierre@0 321 $header_len = isset($node->adheader) ? strlen($node->adheader) : 0;
pierre@0 322 $header_min = variable_get('header_min', 0);
pierre@0 323 $header_max = variable_get('header_max', 0);
pierre@0 324 if ($header_min && ($header_len < $header_min)) {
pierre@0 325 form_set_error('adheader', t('Your text ad header is only %cur characters but must be at least %min characters.', array('%cur' => $header_len, '%min' => $header_min)));
pierre@0 326 }
pierre@0 327 else if ($header_max && ($header_len > $header_max)) {
pierre@0 328 form_set_error('adheader', t('Your text ad header is %cur characters but can not be more than %max characters.', array('%cur' => $header_len, '%max' => $header_max)));
pierre@0 329 }
pierre@0 330 $body_len = strlen($node->adbody);
pierre@0 331 $body_min = variable_get('body_min', 0);
pierre@0 332 $body_max = variable_get('body_max', 0);
pierre@0 333 if ($body_min && ($body_len < $body_min)) {
pierre@0 334 form_set_error('adbody', t('Your text ad body is only %cur characters but must be at least %min characters.', array('%cur' => $body_len, '%min' => $body_min)));
pierre@0 335 }
pierre@0 336 else if ($body_max && ($body_len > $body_max)) {
pierre@0 337 form_set_error('adbody', t('Your text ad body is %cur characters but can not be more than %max characters.', array('%cur' => $body_len, '%max' => $body_max)));
pierre@0 338 }
pierre@0 339
pierre@0 340 if ($node->url && variable_get('ad_validate_url', 1) && (!valid_url($node->url, TRUE))) {
pierre@0 341 form_set_error('url', t('You must specify a valid %field.', array('%field' => t('Destination URL'))));
pierre@0 342 }
pierre@0 343 }