comparison image/ad_image.module @ 2:e5584a19768b ad

maj module ad
author sly
date Wed, 15 Apr 2009 07:58:32 +0000
parents 948362c2a207
children 6aeff3329e01
comparison
equal deleted inserted replaced
1:948362c2a207 2:e5584a19768b
1 <?php 1 <?php
2 // $Id: ad_image.module,v 1.2.2.13.2.40.2.11.2.5 2009/03/11 16:12:07 jeremy Exp $ 2 // $Id: ad_image.module,v 1.2.2.13.2.40.2.11.2.6 2009/04/02 15:48:29 jeremy Exp $
3 3
4 /** 4 /**
5 * @file 5 * @file
6 * Enhances the ad module to support banner ads. 6 * Enhances the ad module to support banner ads.
7 * 7 *
150 '#suffix' => '</div>', 150 '#suffix' => '</div>',
151 '#value' => theme_placeholder("$group->description"), 151 '#value' => theme_placeholder("$group->description"),
152 ); 152 );
153 153
154 $format = db_fetch_object(db_query('SELECT * FROM {ad_image_format} WHERE gid = %d', $tid)); 154 $format = db_fetch_object(db_query('SELECT * FROM {ad_image_format} WHERE gid = %d', $tid));
155 $form["group-$tid"]["max-size-$tid"] = array(
156 '#type' => 'textfield',
157 '#title' => t('Maximum filesize'),
158 '#size' => 5,
159 '#maxlength' => 15,
160 '#default_value' => isset($format->max_size) ? $format->max_size : 0,
161 '#description' => t('Optionally specify a maximum filesize in bytes for images in this group. To specify no maximum filesize, enter <em>0</em>.'),
162 );
155 $form["group-$tid"]["min-height-$tid"] = array( 163 $form["group-$tid"]["min-height-$tid"] = array(
156 '#type' => 'textfield', 164 '#type' => 'textfield',
157 '#title' => t('Minimum height'), 165 '#title' => t('Minimum height'),
158 '#size' => 5, 166 '#size' => 5,
159 '#maxlength' => 5, 167 '#maxlength' => 5,
204 $groups = module_invoke('ad', 'groups_list', TRUE); 212 $groups = module_invoke('ad', 'groups_list', TRUE);
205 foreach ($groups as $group) { 213 foreach ($groups as $group) {
206 // TODO: Update the database schema, convert gid to tid. 214 // TODO: Update the database schema, convert gid to tid.
207 $gid = db_result(db_query('SELECT gid FROM {ad_image_format} WHERE gid = %d', $group->tid)); 215 $gid = db_result(db_query('SELECT gid FROM {ad_image_format} WHERE gid = %d', $group->tid));
208 if (is_numeric($gid)) { 216 if (is_numeric($gid)) {
209 db_query("UPDATE {ad_image_format} SET min_width = %d, max_width = %d, min_height = %d, max_height = %d WHERE gid = %d", $form_state['values']["min-width-$group->tid"], $form_state['values']["max-width-$group->tid"], $form_state['values']["min-height-$group->tid"], $form_state['values']["max-height-$group->tid"], $group->tid); 217 db_query("UPDATE {ad_image_format} SET min_width = %d, max_width = %d, min_height = %d, max_height = %d, max_size = %d WHERE gid = %d", $form_state['values']["min-width-$group->tid"], $form_state['values']["max-width-$group->tid"], $form_state['values']["min-height-$group->tid"], $form_state['values']["max-height-$group->tid"], $form_state['values']["max-size-$group->tid"], $group->tid);
210 } 218 }
211 else { 219 else {
212 db_query("INSERT INTO {ad_image_format} (gid, min_width, max_width, min_height, max_height) VALUES (%d, %d, %d, %d, %d)", $group->tid, $form_state['values']["min-width-$group->tid"], $form_state['values']["max-width-$group->tid"], $form_state['values']["min-height-$group->tid"], $form_state['values']["max-height-$group->tid"]); 220 db_query("INSERT INTO {ad_image_format} (gid, min_width, max_width, min_height, max_height, max_size) VALUES (%d, %d, %d, %d, %d, %d)", $group->tid, $form_state['values']["min-width-$group->tid"], $form_state['values']["max-width-$group->tid"], $form_state['values']["min-height-$group->tid"], $form_state['values']["max-height-$group->tid"], $form_state['values']["max-size-$group->tid"]);
213 } 221 }
214 } 222 }
215 drupal_set_message('Image ad global settings updated.'); 223 drupal_set_message('Image ad global settings updated.');
216 } 224 }
217 225
234 return $return; 242 return $return;
235 243
236 case 'insert': 244 case 'insert':
237 case 'update': 245 case 'update':
238 $fid = isset($node->files) ? (int)ad_image_active_file($node->files) : 0; 246 $fid = isset($node->files) ? (int)ad_image_active_file($node->files) : 0;
239 if ($fid) { 247 $image = ad_image_load_image($node);
240 $image = ad_image_load_image($node);
241 }
242 else if (isset($node->remote_image)) {
243 list($image->width, $image->height) = getimagesize($node->remote_image);
244 }
245 // This is ugly, but as "a" comes before "u" we don't seem to be able 248 // This is ugly, but as "a" comes before "u" we don't seem to be able
246 // to modify the upload module's form. Instead, we check after the fact 249 // to modify the upload module's form. Instead, we check after the fact
247 // if someone is editing images when they're not allowed, and if so we 250 // if someone is editing images when they're not allowed, and if so we
248 // prevent the ad from being saved. 251 // prevent the ad from being saved.
249 if ($op == 'update' && !ad_permission($node->nid, 'manage active image')) { 252 if ($op == 'update' && !ad_permission($node->nid, 'manage active image')) {
270 else { 273 else {
271 $image = FALSE; 274 $image = FALSE;
272 } 275 }
273 } 276 }
274 if ($op == 'insert') { 277 if ($op == 'insert') {
275 db_query("INSERT INTO {ad_image} (aid, fid, url, tooltip, remote_image, width, height) VALUES(%d, %d, '%s', '%s', '%s', %d, %d)", $node->nid, $node->fid, $node->url, $node->tooltip, $node->remote_image, $node->width, $node->height); 278 db_query("INSERT INTO {ad_image} (aid, fid, url, tooltip, remote_image, width, height) VALUES(%d, %d, '%s', '%s', '%s', %d, %d)", $node->nid, $node->fid, $node->url, $node->tooltip, $node->remote_image, isset($node->width) ? $node->width : 0, isset($node->height) ? $node->height : 0);
276 } 279 }
277 else { 280 else {
278 db_query("UPDATE {ad_image} SET fid = %d, url = '%s', tooltip = '%s', remote_image = '%s', width = %d, height = %d WHERE aid = %d", $fid, $node->url, $node->tooltip, $node->remote_image, $node->width, $node->height, $node->nid); 281 db_query("UPDATE {ad_image} SET fid = %d, url = '%s', tooltip = '%s', remote_image = '%s', width = %d, height = %d WHERE aid = %d", $fid, $node->url, $node->tooltip, $node->remote_image, isset($node->width) ? $node->width : 0, isset($node->height) ? $node->height : 0, $node->nid);
279 } 282 }
280 if (!isset($node->remote_image) || empty($node->remote_image)) { 283 // No valid image has been uploaded, don't allow ad to be 'active'.
281 // No valid image has been uploaded, don't allow ad to be 'active'. 284 if ($image === FALSE || !ad_image_active_file(($node->files))) {
282 if ($image === FALSE || !ad_image_active_file(($node->files))) { 285 db_query("UPDATE {ads} SET adstatus = '%s' WHERE aid = %d AND adstatus = '%s'", t('pending'), $node->nid, t('active'));
283 db_query("UPDATE {ads} SET adstatus = '%s' WHERE aid = %d AND adstatus = '%s'", t('pending'), $node->nid, t('active')); 286 if (db_affected_rows()) {
284 if (db_affected_rows()) { 287 drupal_set_message(t('Image validation failed, unable to mark ad as %active. Setting ad as %pending.', array('%active' => t('active'), '%pending' => t('pending'))), 'error');
285 drupal_set_message(t('Image validation failed, unable to mark ad as %active. Setting ad as %pending.', array('%active' => t('active'), '%pending' => t('pending'))), 'error'); 288 }
286 } 289 }
287 } 290 else if (!$node->remote_image && !$fid) {
288 else if (!$fid) { 291 db_query("UPDATE {ads} SET adstatus = '%s' WHERE aid = %d AND adstatus = '%s'", t('pending'), $node->nid, t('active'));
289 db_query("UPDATE {ads} SET adstatus = '%s' WHERE aid = %d AND adstatus = '%s'", t('pending'), $node->nid, t('active')); 292 if (db_affected_rows()) {
290 if (db_affected_rows()) { 293 drupal_set_message(t('Unable to mark ad as <em>active</em> until uploaded image is validated. If you do not see any more errors, you should now be able to set your ad as <em>active</em>.'), 'error');
291 drupal_set_message(t('Unable to mark ad as <em>active</em> until uploaded image is validated. If you do not see any more errors, you should now be able to set your ad as <em>active</em>.'), 'error');
292 }
293 } 294 }
294 } 295 }
295 break; 296 break;
296 297
297 case 'validate': 298 case 'validate':
380 function ad_image_format_load($gid) { 381 function ad_image_format_load($gid) {
381 static $format; 382 static $format;
382 if (isset($format[$gid])) { 383 if (isset($format[$gid])) {
383 return $format[$gid]; 384 return $format[$gid];
384 } 385 }
385 $format[$gid] = db_fetch_object(db_query('SELECT min_width, max_width, min_height, max_height FROM {ad_image_format} WHERE gid = %d', $gid)); 386 $format[$gid] = db_fetch_object(db_query('SELECT min_width, max_width, min_height, max_height, max_size FROM {ad_image_format} WHERE gid = %d', $gid));
386 return $format[$gid]; 387 return $format[$gid];
387 } 388 }
388 389
389 /** 390 /**
390 * Validate that the size of the uploaded image is within the defined limits. 391 * Validate that the size of the uploaded image is within the defined limits.
403 // default image size. 404 // default image size.
404 $terms[] = NULL; 405 $terms[] = NULL;
405 } 406 }
406 foreach ($terms as $tid => $term) { 407 foreach ($terms as $tid => $term) {
407 list($size->width, $size->height) = getimagesize($file->filepath); 408 list($size->width, $size->height) = getimagesize($file->filepath);
409 $size->bytes = strlen(join('', file($file->filepath)));
408 if ($format = ad_image_format_load($tid)) { 410 if ($format = ad_image_format_load($tid)) {
409 if ($size->width < $format->min_width) { 411 if ($size->width < $format->min_width) {
410 drupal_set_message(t('The image <em>%name</em> is only %current pixels wide, which is less than the minimum of %minimum pixels allowed in the %group ad group.', array('%name' => $file->filename, '%current' => $size->width, '%minimum' => $format->min_width, '%group' => theme_placeholder($term->name))), 'error'); 412 drupal_set_message(t('The image %name is only %current pixels wide, which is less than the minimum of %minimum pixels allowed in the %group ad group.', array('%name' => $file->filename, '%current' => $size->width, '%minimum' => $format->min_width, '%group' => isset($term->name) ? $term->name : t('default'))), 'error');
411 $error = TRUE; 413 $error = TRUE;
412 } 414 }
413 else if ($format->max_width && ($size->width > $format->max_width)) { 415 else if ($format->max_width && ($size->width > $format->max_width)) {
414 drupal_set_message(t('The image <em>%name</em> is %current pixels wide, which is more than the maximum of %maximum pixels allowed in the %group ad group.', array('%name' => $file->filename, '%current' => $size->width, '%maximum' => $format->max_width, '%group' => theme_placeholder($term->name))), 'error'); 416 drupal_set_message(t('The image %name is %current pixels wide, which is more than the maximum of %maximum pixels allowed in the %group ad group.', array('%name' => $file->filename, '%current' => $size->width, '%maximum' => $format->max_width, '%group' => isset($term->name) ? $term->name : t('default'))), 'error');
415 $error = TRUE; 417 $error = TRUE;
416 } 418 }
417 if ($size->height < $format->min_height) { 419 if ($size->height < $format->min_height) {
418 drupal_set_message(t('The image <em>%name</em> is only %current pixels high, which is less than the minimum of %minimum pixels allowed in the %group ad group.', array('%name' => $file->filename, '%current' => $size->height, '%minimum' => $format->min_height, '%group' => theme_placeholder($term->name))), 'error'); 420 drupal_set_message(t('The image %name is only %current pixels high, which is less than the minimum of %minimum pixels allowed in the %group ad group.', array('%name' => $file->filename, '%current' => $size->height, '%minimum' => $format->min_height, '%group' => isset($term->name) ? $term->name : t('default'))), 'error');
419 $error = TRUE; 421 $error = TRUE;
420 } 422 }
421 else if ($format->max_height && $size->height > $format->max_height) { 423 else if ($format->max_height && $size->height > $format->max_height) {
422 drupal_set_message(t('The image <em>%name</em> is %current pixels high, which is more than the maximum of %maximum pixels allowed in the %group ad group.', array('%name' => $file->filename, '%current' => $size->height, '%maximum' => $format->max_height, '%group' => theme_placeholder($term->name))), 'error'); 424 drupal_set_message(t('The image %name is %current pixels high, which is more than the maximum of %maximum pixels allowed in the %group ad group.', array('%name' => $file->filename, '%current' => $size->height, '%maximum' => $format->max_height, '%group' => isset($term->name) ? $term->name : t('default'))), 'error');
425 $error = TRUE;
426 }
427 if ($format->max_size && $size->bytes > $format->max_size) {
428 drupal_set_message(t('The image %name is %current bytes in size, which is more than the maximum of %maximum bytes allowed in the %group ad group.', array('%name' => $file->filename, '%current' => $size->bytes, '%maximum' => $format->max_size, '%group' => isset($term->name) ? $term->name : t('default'))), 'error');
423 $error = TRUE; 429 $error = TRUE;
424 } 430 }
425 } 431 }
426 } 432 }
427 } 433 }
439 445
440 /** 446 /**
441 * Returns image object from given ad node. 447 * Returns image object from given ad node.
442 */ 448 */
443 function ad_image_load_image($node) { 449 function ad_image_load_image($node) {
444 if (isset($node->files) && is_array($node->files)) { 450 if (isset($node->remote_image) && !empty($node->remote_image)) {
451 $file->filename = $node->remote_image;
452 $file->filepath = $node->remote_image;
453 $image = ad_image_validate_size($file, $node->nid);
454 if ($image !== FALSE) {
455 return $image;
456 }
457 }
458 else if (isset($node->files) && is_array($node->files)) {
445 foreach ($node->files as $file) { 459 foreach ($node->files as $file) {
446 if (is_array($file)) { 460 if (is_array($file)) {
447 if ($file['list'] && file_exists($file['filepath'])) { 461 if ($file['list'] && file_exists($file['filepath'])) {
448 $image = ad_image_validate_size((object)$file, $node->nid); 462 $image = ad_image_validate_size((object)$file, $node->nid);
449 if ($image !== FALSE) { 463 if ($image !== FALSE) {
479 '#title' => t('Image'), 493 '#title' => t('Image'),
480 '#collapsible' => TRUE, 494 '#collapsible' => TRUE,
481 ); 495 );
482 496
483 if (!empty($node->remote_image)) { 497 if (!empty($node->remote_image)) {
484 list($image->width, $image->height) = getimagesize($node->remote_image); 498 $file->filename = $node->remote_image;
499 $file->filepath = $node->remote_image;
500 $image = ad_image_validate_size($file, $node->nid);
485 $path = '<img src="'. $node->remote_image .'" alt="'. t('image') .'" /> '; 501 $path = '<img src="'. $node->remote_image .'" alt="'. t('image') .'" /> ';
502 if ($image === FALSE) {
503 $path .= t('(invalid image)'). '<br />';
504 }
486 } 505 }
487 else if (isset($node->files)) { 506 else if (isset($node->files)) {
488 $files = $node->files; 507 $files = $node->files;
489 } 508 }
490 else { 509 else {