imageblock.module in Image Block 7
Same filename and directory in other branches
imageblock.module Primarily Drupal hooks.
File
imageblock.moduleView source
<?php
/*Only a comment*/
/**
* @file imageblock.module
* Primarily Drupal hooks.
*/
/**
* Implementation of hook_theme()
*/
function imageblock_theme() {
return array(
'imageblock_content' => array(
'render element' => 'elements',
'template' => 'imageblock-content',
),
);
}
/**
* Implements hook_menu().
*/
function imageblock_menu() {
$items['admin/structure/block/imageblock_add'] = array(
'title' => 'Add image block',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'imageblock_add_block_form',
),
'access arguments' => array(
'administer blocks',
),
'file' => 'imageblock.admin.inc',
'type' => MENU_LOCAL_ACTION,
);
$items['admin/structure/block/imageblock_configure'] = array(
'title' => 'Image block settings',
'description' => 'Configure Image block settings.',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'imageblock_admin_settings_form',
),
'access arguments' => array(
'administer site configuration',
),
'file' => 'imageblock.admin.inc',
);
$items['admin/structure/block/manage/imageblock/%/delete'] = array(
'title' => 'Delete block',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'imageblock_custom_block_delete',
5,
),
'access arguments' => array(
'administer blocks',
),
'type' => MENU_CALLBACK,
'file' => 'imageblock.admin.inc',
);
return $items;
}
/**
* Implements hook_file_download().
*
* Ensure that image block images are always downloadable.
* We may want to restrict this in the future.
*/
function imageblock_file_download($uri) {
if (strpos(file_uri_target($uri), variable_get('imageblock_image_path', 'imageblock')) === 0) {
$info = image_get_info($uri);
return array(
'Content-Type' => $info['mime_type'],
);
}
}
/**
* Implements hook_block_info().
*/
function imageblock_block_info() {
$blocks = array();
$result = db_query('SELECT bid, info FROM {imageblock} ORDER BY info');
foreach ($result as $block) {
$blocks[$block->bid]['info'] = $block->info;
// Not worth caching.
$blocks[$block->bid]['cache'] = DRUPAL_NO_CACHE;
}
return $blocks;
}
/**
* Implements hook_block_configure().
*/
function imageblock_block_configure($delta = '') {
if ($delta) {
$custom_block = block_imageblock_get($delta);
}
else {
$custom_block = array();
}
$form = block_custom_block_form($custom_block);
imageblock_configure_form($form, $custom_block);
return $form;
}
/**
* Implements hook_block_save().
*/
function imageblock_block_save($delta = '', $edit = array()) {
$data = array();
if (!empty($delta) && $delta != '') {
if (!empty($edit['imageblock_imagecache'])) {
$data['imageblock_imagecache'] = $edit['imageblock_imagecache'];
}
if (!empty($edit['imageblock_alt'])) {
$data['imageblock_alt'] = $edit['imageblock_alt'];
}
if (!empty($edit['imageblock_title'])) {
$data['imageblock_title'] = $edit['imageblock_title'];
}
if (!empty($edit['imageblock_link'])) {
$data['imageblock_link'] = $edit['imageblock_link'];
}
if (!empty($edit['imageblock_link_target'])) {
$data['imageblock_link_target'] = $edit['imageblock_link_target'];
}
if (!empty($edit['imageblock_nofollow'])) {
$data['imageblock_nofollow'] = $edit['imageblock_nofollow'];
}
if (!empty($edit['body']) && !empty($edit['body']['value'])) {
$body = $edit['body'];
}
else {
$body = array(
'value' => '',
'format' => '',
);
}
$old_file = imageblock_get_file($delta);
if (!empty($edit['imageblock_file'])) {
$file = $edit['imageblock_file'];
// If the user uploaded a file, save it to a permanent location.
if (!empty($file->fid)) {
// If there is an old file, delete it.
if (!empty($old_file->fid)) {
file_usage_delete($old_file, 'imageblock', 'imageblock', $delta);
file_delete($old_file);
}
$directory = file_default_scheme() . '://' . variable_get('imageblock_image_path', 'imageblock');
// Prepare the directory.
file_prepare_directory($directory, FILE_CREATE_DIRECTORY);
$destination = file_stream_wrapper_uri_normalize($directory . "/{$file->filename}");
// Move the temporary file into the final location.
if ($file = file_move($file, $destination, FILE_EXISTS_RENAME)) {
$file->status = FILE_STATUS_PERMANENT;
file_save($file);
file_usage_add($file, 'imageblock', 'imageblock', $delta);
}
}
}
}
db_update('imageblock')
->fields(array(
'body' => $edit['body']['value'],
'info' => $edit['info'],
'format' => $edit['body']['format'],
'fid' => !empty($file) ? $file->fid : (!empty($old_file) ? $old_file->fid : 0),
'data' => serialize($data),
))
->condition('bid', $delta)
->execute();
}
/**
* Implements hook_block_view().
*/
function imageblock_block_view($delta = '') {
$block = db_query('SELECT body, format, fid, data FROM {imageblock} WHERE bid = :bid', array(
':bid' => $delta,
))
->fetchObject();
$data['subject'] = NULL;
$data['content'] = theme('imageblock_content', array(
'block' => $block,
));
return $data;
}
/**
* Implements hook_form_alter().
*/
function imageblock_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'block_admin_configure') {
if ($form['module']['#value'] == 'imageblock') {
$form['#attributes']['enctype'] = 'multipart/form-data';
$form['#validate'][] = 'imageblock_configure_form_validate';
}
}
elseif ($form_id == 'block_admin_display_form') {
foreach ($form['blocks'] as $key => $element) {
if ($element['module']['#value'] == 'imageblock') {
$form['blocks'][$key]['delete'] = array(
'#type' => 'link',
'#title' => t('delete'),
'#href' => 'admin/structure/block/manage/imageblock/' . $element['delta']['#value'] . '/delete',
);
}
}
}
}
function imageblock_configure_form(&$form, $block = NULL) {
$title = t('Image');
$description = '';
if (!empty($block['bid'])) {
$file = imageblock_get_file($block['bid']);
if (!empty($file->fid)) {
$title = t('Change Image');
$description = t('If new file is selected previous file will be deleted. This action cannot be undone.');
$form['imageblock_prev'] = array(
'#type' => 'item',
'#title' => t('Image'),
'#markup' => $file->filename,
'#weight' => isset($form['body_field']['#weight']) ? $form['body_field']['#weight'] - 0.8 : 0,
);
}
}
// Do not require body as we can have an image as the body.
$form['body_field']['body']['#required'] = FALSE;
$data = !empty($block['data']) ? unserialize($block['data']) : array();
$form['imageblock'] = array(
'#type' => 'managed_file',
'#title' => $title,
'#description' => $description,
'#size' => 40,
'#weight' => isset($form['body_field']['#weight']) ? $form['body_field']['#weight'] - 0.7 : 0,
'#upload_location' => 'public://',
);
$form['imageblock_alt'] = array(
'#type' => 'textfield',
'#title' => t('Alternate text'),
'#description' => t('This text will be used by screen readers, search engines, or when the image cannot be loaded.'),
'#size' => 40,
'#default_value' => isset($data['imageblock_alt']) ? $data['imageblock_alt'] : '',
'#weight' => isset($form['body_field']['#weight']) ? $form['body_field']['#weight'] - 0.5 : 0,
);
$form['imageblock_title'] = array(
'#type' => 'textfield',
'#title' => t('Title'),
'#description' => t('The title is used as a tool tip when the user hovers the mouse over the image.'),
'#size' => 40,
'#default_value' => isset($data['imageblock_title']) ? $data['imageblock_title'] : '',
'#weight' => isset($form['body_field']['#weight']) ? $form['body_field']['#weight'] - 0.4 : 0,
);
$form['imageblock_link'] = array(
'#type' => 'textfield',
'#title' => t('Link'),
'#description' => t('Leave empty for no link.'),
'#size' => 40,
'#maxlength' => 2083,
'#default_value' => isset($data['imageblock_link']) ? $data['imageblock_link'] : '',
'#weight' => isset($form['body_field']['#weight']) ? $form['body_field']['#weight'] - 0.3 : 0,
);
$form['imageblock_link_target'] = array(
'#type' => 'select',
'#title' => t('Link target'),
'#description' => t('Leave empty for no link.'),
'#options' => array(
'_blank' => '_blank',
'_parent' => '_parent',
'_self' => '_self',
'_top' => '_top',
),
'#default_value' => isset($data['imageblock_link_target']) ? $data['imageblock_link_target'] : '_self',
'#weight' => isset($form['body_field']['#weight']) ? $form['body_field']['#weight'] - 0.2 : 0,
);
$form['imageblock_nofollow'] = array(
'#type' => 'checkbox',
'#title' => t('NoFollow option'),
'#description' => t('Mark this item if you want add rel=nofollow to your link.</br> Links to an unendorsed document, like a paid link.(nofollow is ' . 'used by Google, to specify that the Google search spider should not follow that link)'),
'#default_value' => isset($data['imageblock_nofollow']) ? $data['imageblock_nofollow'] : '0',
'#weight' => isset($form['body_field']['#weight']) ? $form['body_field']['#weight'] - 0.1 : 0,
);
if (module_exists('image')) {
$options = array();
foreach (image_styles() as $key => $preset) {
$options[$key] = $preset['name'];
}
if (!empty($options)) {
$form['imageblock_imagecache'] = array(
'#type' => 'select',
'#title' => t('Image style'),
'#options' => array(
'' => t('<none>'),
) + $options,
'#default_value' => isset($data['imageblock_imagecache']) ? $data['imageblock_imagecache'] : '',
'#weight' => isset($form['body_field']['#weight']) ? $form['body_field']['#weight'] - 0.6 : 0,
);
}
}
}
function imageblock_configure_form_validate($form, &$form_state) {
// TODO: make these settings, make this work
// Check if already exists this block description to prevent a PDO exception.
if ($form['#form_id'] == 'imageblock_add_block_form') {
$info = $form_state['values']['info'];
$duplicate_desc = db_query('SELECT count(info) FROM {imageblock} WHERE info = :info', array(
':info' => $info,
))
->fetchField();
if ($duplicate_desc) {
form_set_error('imageblock_duplicate', t("Failed to create block. A block with this description already exists. Please edit your block description and try again."));
}
}
$validators['file_validate_is_image'] = array();
if ($max = variable_get('imageblock_max_file_size', 0)) {
$validators['file_validate_size'] = array(
parse_size($max),
0,
);
}
if ($max = variable_get('imageblock_max_dimensions', 0)) {
$validators['file_validate_image_resolution'] = array(
$max,
);
}
// Save new file uploads.
$file = file_save_upload('imageblock', $validators);
if ($file === FALSE) {
form_set_error('imageblock', t("Failed to upload the image; the %directory directory doesn't exist or is not writable.", array(
'%directory' => variable_get('imageblock_image_path', 'imageblock'),
)));
}
elseif ($file !== NULL) {
$form_state['values']['imageblock_file'] = $file;
}
}
/**
* Returns information from database about a user-created (custom) image block.
*/
function block_imageblock_get($bid) {
return db_query("SELECT * FROM {imageblock} WHERE bid = :bid", array(
':bid' => $bid,
))
->fetchAssoc();
}
/**
* Returns the file information for a give block ID.
*/
function imageblock_get_file($bid) {
$fid = db_query("SELECT fid FROM {imageblock} WHERE bid = :bid", array(
':bid' => $bid,
))
->fetchField();
return file_load($fid);
}
/**
* Process variables for imageblock-content.tpl.php.
*
* The $variables array contains the following arguments:
* - $block
*
* @see imageblock-content.tpl.php
*/
function template_preprocess_imageblock_content(&$variables) {
$variables['image'] = '';
$block = $variables['block'];
$data = !empty($block->data) ? unserialize($block->data) : array();
if (!empty($block->fid)) {
$file = file_load($block->fid);
if (!empty($file->fid)) {
$attributes = array(
'class' => array(
'imageblock-image',
),
);
$variables['path'] = $file->uri;
$variables['attributes'] = $attributes;
if (!empty($data['imageblock_alt'])) {
$variables['alt'] = $data['imageblock_alt'];
}
if (!empty($data['imageblock_title'])) {
$variables['title'] = $data['imageblock_title'];
}
if (module_exists('image') && !empty($data['imageblock_imagecache']) && ($preset = image_style_load($data['imageblock_imagecache']))) {
$variables['image'] = theme('image_style', $variables + array(
'style_name' => $preset['name'],
));
}
else {
$variables['image'] = theme('image', $variables);
}
if (!empty($data['imageblock_link'])) {
$attributes = array(
'class' => array(
'imageblock-link',
),
);
if (!empty($data['imageblock_link_target'])) {
$attributes['target'] = $data['imageblock_link_target'];
}
if (!empty($data['imageblock_nofollow']) && $data['imageblock_nofollow']) {
$attributes['rel'] = 'nofollow';
}
$variables['image'] = l($variables['image'], $data['imageblock_link'], array(
'html' => TRUE,
'attributes' => $attributes,
));
}
}
}
if (isset($block) && is_object($block)) {
$variables['content'] = check_markup($block->body, $block->format, '', TRUE);
}
else {
$variables['content'] = '';
}
}
Functions
Name![]() |
Description |
---|---|
block_imageblock_get | Returns information from database about a user-created (custom) image block. |
imageblock_block_configure | Implements hook_block_configure(). |
imageblock_block_info | Implements hook_block_info(). |
imageblock_block_save | Implements hook_block_save(). |
imageblock_block_view | Implements hook_block_view(). |
imageblock_configure_form | |
imageblock_configure_form_validate | |
imageblock_file_download | Implements hook_file_download(). |
imageblock_form_alter | Implements hook_form_alter(). |
imageblock_get_file | Returns the file information for a give block ID. |
imageblock_menu | Implements hook_menu(). |
imageblock_theme | Implementation of hook_theme() |
template_preprocess_imageblock_content | Process variables for imageblock-content.tpl.php. |