amazon_media.module in Amazon Product Advertisement API 7.2
Same filename and directory in other branches
Provides additional behaviors and data type for amazon items which are DVDs, software, video games, music, etc.
File
amazon_media/amazon_media.moduleView source
<?php
/**
* @file
* Provides additional behaviors and data type for amazon items which are
* DVDs, software, video games, music, etc.
*/
/**
* Implements hook_theme().
*/
function amazon_media_theme() {
$templates = array(
'amazon_inline_item__dvd' => array(
'variables' => array(
'item' => array(),
),
),
'amazon_inline_item__software' => array(
'variables' => array(
'item' => array(),
),
),
'amazon_inline_item__games' => array(
'variables' => array(
'item' => array(),
),
),
'amazon_inline_item__console_video_games' => array(
'variables' => array(
'item' => array(),
),
'function' => 'theme_amazon_inline_item__games',
),
'amazon_item__book__details' => array(
'variables' => array(
'item' => array(),
),
'template' => 'amazon-item--book--details',
),
'amazon_item__dvd__details' => array(
'variables' => array(
'item' => array(),
),
'template' => 'amazon-item--dvd--details',
),
'amazon_item__software__details' => array(
'variables' => array(
'item' => array(),
),
'template' => 'amazon-item--software--details',
),
'amazon_item__games__details' => array(
'variables' => array(
'item' => array(),
),
'template' => 'amazon-item--games--details',
),
);
return $templates;
}
/**
* Implements hook_theme_registry_alter().
*
* Because we aren't defining our own stuff here, just providing some
* high-specificity templates for theme_amazon_item, we'll add this
* module's directory to the list of paths to search for when finding
* amazon_item tpl's.
*/
function amazon_media_theme_registry_alter(&$theme_registry) {
$theme_registry['amazon_item']['theme path'] = drupal_get_path('module', 'amazon_media');
if (!empty($theme_registry['amazon_item'])) {
// We'll try our best to avoid stepping on theme template files.
if (!empty($theme_registry['amazon_item']['theme_paths']) && count($theme_registry['amazon_item']['theme paths']) > 1) {
$theme = array_pop($theme_registry['amazon_item']['theme paths']);
}
$theme_registry['amazon_item']['theme paths'][] = drupal_get_path('module', 'amazon_media');
if (isset($theme)) {
$theme_registry['amazon_item']['theme paths'][] = $theme;
}
}
}
/**
* Implements hook_preprocess.
*
* @param $variables
*/
function amazon_media_preprocess_amazon_item(&$variables) {
if (!empty($variables['publicationdate'])) {
$date = explode('-', $variables['publicationdate']);
$variables['publicationyear'] = $date[0];
}
// Various bits we want to ensure have defaults.
$variables += array(
'director' => '',
'actor' => '',
'audiencerating' => t('NR - Not Rated'),
'publicationyear' => '',
'runningtime' => '',
);
}
/**
* Load and return additional information for an Amazon item.
* @param $item
* The item requiring additions.
* @return
* The added array elements, as an array.
*/
function amazon_media_amazon_item_load($item) {
$table = amazon_media_get_table_name($item);
if (!empty($table)) {
$additions = db_select($table)
->condition('asin', $item['asin'])
->fields($table)
->execute()
->fetchAssoc();
return $additions;
}
}
/**
* Given an item, return the name of the table it's associated with.
* @param $item
* populated amazon_item with $item['producttypename'] populated.
* @return
* the name of the associated table.
*/
function amazon_media_get_table_name($item) {
static $names = array(
'ABIS_BOOK' => 'amazon_book',
'BOOKS_1973_AND_LATER' => 'amazon_book',
'VIDEO_DVD' => 'amazon_dvd',
'ABIS_DVD' => 'amazon_dvd',
'ABIS_MUSIC' => 'amazon_music',
'CONSOLE_VIDEO_GAMES' => 'amazon_software',
'VIDEO_GAMES' => 'amazon_software',
'SOFTWARE' => 'amazon_software',
);
if (!empty($names[$item['producttypename']])) {
return $names[$item['producttypename']];
}
}
/**
* Insert the associated information into the related table.
* @param $item
* Populated amazon item record.
*/
function amazon_media_amazon_item_insert($item) {
static $item_keys = NULL;
if (empty($item_keys)) {
require_once 'amazon_media.install';
$schema = amazon_media_schema();
$item_keys = $schema;
}
$table = amazon_media_get_table_name($item);
if (!empty($table)) {
// We need to present a record that only has the items in it used by
// this table.
$db_item = array_intersect_key($item, $item_keys[$table]['fields']);
try {
db_insert($table)
->fields($db_item)
->execute();
} catch (Exception $e) {
amazon_db_error_watchdog("Failed to insert item into amazon table", $e, $db_item);
}
}
}
/**
* Delete a record using the asin as key.
* @param $asin
* the asin to delete.
*/
function amazon_media_amazon_item_delete($asin) {
// This is pretty inefficient; we're going to thrash these tables
// every time a product gets deleted or updated. We'll solve it later.
db_delete('amazon_book')
->condition('asin', $asin)
->execute();
db_delete('amazon_dvd')
->condition('asin', $asin)
->execute();
db_delete('amazon_music')
->condition('asin', $asin)
->execute();
db_delete('amazon_software')
->condition('asin', $asin)
->execute();
}
/**
* Implements hook_views_api.
*/
function amazon_media_views_api() {
return array(
'api' => 2,
);
}
/**
* Implements theme_ with specialty dvd.
*
* @param $item
* fully populated amazon item.
* @param $style
* 'full', 'thumbnail', or whatever.
*/
function theme_amazon_item__dvd($item, $style = 'default') {
drupal_set_message('Theming with theme_amazon_item__dvd');
$output = '';
$type = $item['type'];
switch ($style) {
case 'full':
$output .= '<div class="' . _amazon_item_classes($type) . ' amazon-item-full">';
$output .= theme('image', array(
'path' => $item['imagesets']['mediumimage']['url'],
'alt' => t('Cover image'),
'title' => check_markup($item['title']),
'attributes' => array(),
'getsize' => FALSE,
));
$output .= '<h3>' . l(check_plain($item['title']), $item['detailpageurl'], array(
'attributes' => array(
'rel' => 'nofollow',
),
)) . '</h3>';
$output .= '</div>';
break;
case 'thumbnail':
$output .= '<div class="' . _amazon_item_classes($type) . ' amazon-item-thumbnail">';
$output .= theme('image', array(
'path' => $item['imagesets']['mediumimage']['url'],
'alt' => t('Cover image'),
'title' => check_markup($item['title']),
'attributes' => array(),
'getsize' => FALSE,
));
$output .= '</div>';
break;
default:
$output .= '<div class="' . _amazon_item_classes($type) . '">';
$output .= theme('image', array(
'path' => $item['imagesets']['smallimage']['url'],
'alt' => t('Cover image'),
'title' => check_markup($item['title']),
'attributes' => array(),
'getsize' => FALSE,
));
$output .= '<h3>' . l(check_markup($item['title']), $item['detailpageurl'], array(
'attributes' => array(
'rel' => 'nofollow',
),
)) . '</h3>';
$output .= '<div><strong>' . t('Director') . ':</strong> ' . implode(', ', $item['director']) . '</div>';
$output .= '<div><strong>' . t('Rating') . ':</strong> ' . $item['audiencerating'] . '</div>';
$output .= '<div><strong>' . t('Running time') . ':</strong> ' . $item['runningtime'] . ' ' . t('minutes') . '</div>';
$output .= '</div>';
break;
}
return $output;
}
/**
* Theme with inline item dvd.
* @param $item
* @return
* rendered output.
*/
function theme_amazon_inline_item__dvd($item) {
$type = $item['type'];
$output = '';
$output .= '<span class="' . _amazon_item_classes($type) . ' amazon-item-inline">';
$output .= l($item['title'], $item['detailpageurl'], array(
'attributes' => array(
'rel' => 'nofollow',
),
));
$output .= '</span>';
return $output;
}
function theme_amazon_inline_item__software($item) {
$output = '';
$output .= '<span class="' . _amazon_item_classes($item) . ' amazon-item-inline">';
$output .= l($item['title'] . ' (' . $item['operatingsystem'] . ')', $item['detailpageurl'], array(
'attributes' => array(
'rel' => 'nofollow',
),
));
$output .= '</span>';
return $output;
}
function theme_amazon_inline_item__games($item) {
$output = '';
$output .= '<span class="' . _amazon_item_classes($item) . ' amazon-item-inline">';
$output .= l($item['title'] . ' (' . $item['hardwareplatform'] . ')', $item['detailpageurl'], array(
'attributes' => array(
'rel' => 'nofollow',
),
));
$output .= '</span>';
return $output;
}
Functions
Name![]() |
Description |
---|---|
amazon_media_amazon_item_delete | Delete a record using the asin as key. |
amazon_media_amazon_item_insert | Insert the associated information into the related table. |
amazon_media_amazon_item_load | Load and return additional information for an Amazon item. |
amazon_media_get_table_name | Given an item, return the name of the table it's associated with. |
amazon_media_preprocess_amazon_item | Implements hook_preprocess. |
amazon_media_theme | Implements hook_theme(). |
amazon_media_theme_registry_alter | Implements hook_theme_registry_alter(). |
amazon_media_views_api | Implements hook_views_api. |
theme_amazon_inline_item__dvd | Theme with inline item dvd. |
theme_amazon_inline_item__games | |
theme_amazon_inline_item__software | |
theme_amazon_item__dvd | Implements theme_ with specialty dvd. |