simpleads.helper.inc in SimpleAds 7
SimpleAds Helper functions.
File
includes/simpleads.helper.incView source
<?php
/**
* @file
* SimpleAds Helper functions.
*/
/**
* Helper function.
* Returns data array for an adertisement block.
*
* @param int $tid
* @param int $limit
* @return array
*/
function _simpleads_load_ads($tid, $limit) {
$result = array();
$term_ids = array();
if (is_array($tid)) {
$term_ids = $tid;
}
else {
$term_ids[] = $tid;
}
if (is_numeric($limit)) {
$ad_settings = _simpleads_adgroup_settings($tid);
$order_delta = isset($ad_settings['ads_order']) ? $ad_settings['ads_order'] : 'random';
$queries = module_invoke_all('simpleads_order', $order_delta, $term_ids, $limit);
if (count($queries) > 0) {
foreach ($queries as $i => $query) {
foreach ($queries[$i] as $row) {
$node = node_load($row->nid);
$active = TRUE;
if (isset($node->field_ad_status[$node->language])) {
if ($node->field_ad_status[$node->language][0]['value'] != 1) {
$active = FALSE;
}
}
if ($active) {
$result[] = _simpleads_ads_data($node);
}
}
}
}
}
return $result;
}
/**
* Helper function.
* Builts array for templates.
* @param object $node
*/
function _simpleads_ads_data($node) {
$data =& drupal_static(__FUNCTION__);
if (is_object($node)) {
$type = 'graphic';
if (isset($node->field_ad_type[$node->language]) && !empty($node->field_ad_type[$node->language][0]['value'])) {
$type = $node->field_ad_type[$node->language][0]['value'];
}
$destination_url = "";
if (isset($node->field_ad_url[$node->language]) && !empty($node->field_ad_url[$node->language][0]['value'])) {
$destination_url = $node->field_ad_url[$node->language][0]['value'];
}
$image = "";
$image_uri = "";
$alt = "";
if (isset($node->field_ad_image[$node->language]) && !empty($node->field_ad_image[$node->language][0]['uri'])) {
$image = file_create_url($node->field_ad_image[$node->language][0]['uri']);
$alt = $node->field_ad_image[$node->language][0]['alt'];
$image_uri = $node->field_ad_image[$node->language][0]['uri'];
}
$flash = "";
if (isset($node->field_ad_flash[$node->language]) && !empty($node->field_ad_flash[$node->language][0]['uri'])) {
$flash = file_create_url($node->field_ad_flash[$node->language][0]['uri']);
}
$text_ad = "";
$text_format = "plain_text";
if (isset($node->field_ad_text[$node->language]) && !empty($node->field_ad_text[$node->language][0]['value'])) {
if (isset($node->field_ad_text[$node->language]) && $node->field_ad_text[$node->language][0]['format'] != $text_format) {
$text_format = $node->field_ad_text[$node->language][0]['format'];
$text_ad = check_markup($node->field_ad_text[$node->language][0]['value'], $text_format);
}
else {
$text_ad = strip_tags($node->field_ad_text[$node->language][0]['value']);
}
}
$target = TRUE;
if (isset($node->field_ad_url_taget[$node->language]) && $node->field_ad_url_taget[$node->language][0]['value'] == 0) {
$target = FALSE;
}
$data = array(
'type' => $type,
'url' => url('simpleads/redirect/' . $node->nid, array(
'absolute' => TRUE,
)),
'destination_url' => $destination_url,
'target' => $target,
'image' => $image,
'image_uri' => $image_uri,
'alt' => $alt,
'nid' => $node->nid,
'node' => $node,
'text' => $text_ad,
'text_format' => $text_format,
'flash' => $flash,
);
drupal_alter('simpleads', $data);
return $data;
}
}
/**
* Helper function.
* Return rendered SimpleAds block template.
*
* @param array $nodes
* @param int $tid
* @param int $limit
* @param array $settings1
* @param array $settings2
* @return string
*/
function _simpleads_render_ajax_template($nodes, $tid, $limit, $settings1 = array(), $settings2 = array()) {
$settings = array();
$result = "";
$count = 0;
foreach ($nodes as $ad) {
$ad_block = db_select('simpleads_blocks', 'sb')
->fields('sb', array(
'settings',
))
->condition('sb.tid', $tid)
->execute()
->fetchField();
$this_ad_setting = unserialize($ad_block);
if (count($settings1) > 0) {
$ad_setting = array_merge($this_ad_setting, $settings1);
}
else {
$ad_setting = $this_ad_setting;
}
$css_class = array();
if ($count == 0) {
$css_class = array(
'first',
);
}
else {
if ($count == count($nodes) - 1) {
$css_class = array(
'last',
);
}
}
if ($ad['type'] == 'graphic') {
$result .= theme('simpleads_img_element', array(
'ad' => $ad,
'settings' => $ad_setting,
'css_class' => $css_class,
));
}
elseif ($ad['type'] == 'text') {
$result .= theme('simpleads_text_element', array(
'ad' => $ad,
'settings' => $ad_setting,
'css_class' => $css_class,
));
}
else {
$result .= theme('simpleads_flash_element', array(
'ad' => $ad,
'settings' => $ad_setting,
'css_class' => $css_class,
));
}
$count++;
}
$this_block_settings = _simpleads_adgroup_settings($tid);
if (count($settings2) > 0) {
$settings = array_merge($this_block_settings, $settings2);
}
else {
$settings = $this_block_settings;
}
return theme('simpleads_ajax_call', array(
'content' => $result,
'total_ads' => $count,
'tid' => $tid,
'settings' => $settings,
));
}
/**
* Helper function.
* Return node id from arguments (used in hook_menu).
*/
function simpleadsid_to_arg($arg) {
if ($arg == '%') {
return 'none';
}
else {
return $arg;
}
}
/**
* Access callback.
* Node Ad stats tab.
*/
function _simpleads_node_stat_tab() {
if (arg(0) == 'node' && is_numeric(arg(1))) {
$node = node_load(arg(1));
if (is_object($node) && $node->type == 'simpleads' && user_access('access ad statistics')) {
return TRUE;
}
else {
return FALSE;
}
}
else {
return FALSE;
}
}
/**
* Helper procedure.
* Saves ad clicks.
*
* @param int $nid
*/
function _simpleads_save_click($node) {
module_invoke_all('simpleads_ad_click', 'insert', $node);
}
/**
* Helper procedure.
* Deletes ad clicks.
*
* @param int $nid
*/
function _simpleads_delete_click($node) {
module_invoke_all('simpleads_ad_click', 'delete', $node);
}
/**
* Helper procedure.
* Saves ad impressions
*
* @param int $nid
*/
function _simpleads_save_impression($node) {
module_invoke_all('simpleads_ad_impression', 'insert', $node);
}
/**
* Helper procedure.
* Deletes ad impressions.
*
* @param int $nid
*/
function _simpleads_delete_impression($node) {
module_invoke_all('simpleads_ad_impression', 'delete', $node);
}
/**
* Helper procedure.
* Deletes aggregates stats.
*
* @param int $nid
*/
function _simpleads_delete_aggregated($node) {
db_delete('simpleads_stats')
->condition('nid', $node->nid)
->execute();
}
/**
* Helper functon.
* Increases impressions counter.
*
* @global object $user
* @param object $node
*/
function _simpleads_increase_impression($node) {
global $user;
_simpleads_save_impression($node);
}
/**
* Helper function.
* Return TRUE if the visitor is a bot.
* @return boolean
*/
function _simpleads_bot_detect() {
if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match('/bot|crawl|slurp|spider/i', $_SERVER['HTTP_USER_AGENT'])) {
return TRUE;
}
else {
return FALSE;
}
}
/**
* Helper function.
* Returns node object if not executed in hook_cron().
*
* @param object $node
* @param string $who
* @return object
*/
function _simpleads_activate_deactive_ad($node, $who = 'cron') {
$start_time = '';
$end_time = '';
if (isset($node->field_ad_start_date[$node->language]) && !empty($node->field_ad_start_date[$node->language][0]['value'])) {
$start_time = $node->field_ad_start_date[$node->language][0]['value'];
}
if (isset($node->field_ad_end_date[$node->language]) && !empty($node->field_ad_end_date[$node->language][0]['value'])) {
$end_time = $node->field_ad_end_date[$node->language][0]['value'];
}
$current_status = _simpleads_get_node_status($node->nid);
$start_time = (int) strtotime($start_time);
$end_time = (int) strtotime($end_time);
$now = REQUEST_TIME;
if ($start_time != '' && $end_time != '') {
if ($now >= $start_time && $end_time > $now && $current_status == 0) {
$node->status = 1;
if ($who == 'cron') {
node_save($node);
}
}
elseif ($end_time <= $now && $current_status == 1) {
$node->status = 0;
if ($who == 'cron') {
node_save($node);
}
}
}
elseif ($start_time == '' && $end_time != '') {
if ($end_time <= $now && $current_status == 1) {
$node->status = 0;
if ($who == 'cron') {
node_save($node);
}
}
else {
$node->status = 1;
if ($who == 'cron') {
node_save($node);
}
}
}
else {
if ($now >= $start_time && $start_time != '' && $current_status == 0) {
$node->status = 1;
if ($who == 'cron') {
node_save($node);
}
}
}
if ($who != 'cron') {
return $node;
}
else {
module_invoke_all('simpleads_status_change', $node, $node->status);
}
}
/**
* Helper function.
* Get block settings by ad group id.
*
* @param int $tid
* @return array
*/
function _simpleads_adgroup_settings($tid) {
if (is_numeric($tid)) {
$block = db_select('simpleads_blocks', 'sb')
->fields('sb')
->condition('sb.tid', $tid)
->execute()
->fetchObject();
return unserialize($block->settings);
}
else {
return FALSE;
}
}
/**
* Helper funciton.
* Returns array of supported effects types for blocks.
*/
function _simpleads_rotation_effects() {
return array(
0 => t('None'),
1 => t('Default'),
2 => t('Fast FadeIn'),
);
}
/**
* Helper function.
* Adds additional information to statistics page.
*
* @param object $node
* @param string $op
* @return string
*/
function _simpleads_stats_info($node, $op = 'list') {
$result = array();
$c = 0;
if ($hook = module_invoke_all('simpleads_stats_info', $node, $op)) {
if (is_array($hook) && !empty($hook)) {
foreach ($hook as $data) {
$result[] = '<div class="stat-item">' . $data . '</div>';
}
return '<div class="simpleads-stat-' . $op . '">' . join("", $result) . '</div>';
}
}
}
/**
* Helper function.
* Build query to get the list of ads for the Ads Listing page.
*
* @param array $filter
* @return query
*/
function _simpleads_ads_listing_query($filter = array()) {
if ($filter['adgroup'] == '') {
$query = db_select('node', 'n')
->extend('PagerDefault')
->limit($filter['adsperpage']);
$query
->fields('n', array(
'nid',
));
$query
->condition('n.type', 'simpleads');
if ($filter['adstatus'] != '') {
$query
->condition('n.status', $filter['adstatus']);
}
$results = $query
->execute();
}
else {
$query = db_select('node', 'n')
->extend('PagerDefault')
->limit($filter['adsperpage']);
$query
->leftJoin('taxonomy_index', 'ti', 'ti.nid = n.nid');
$query
->fields('n', array(
'nid',
));
$query
->addTag('node_access');
$query
->condition('n.type', 'simpleads');
if (isset($filter['adgroup'])) {
$query
->condition('ti.tid', $filter['adgroup']);
}
if ($filter['adstatus'] != '') {
$query
->condition('n.status', $filter['adstatus']);
}
$results = $query
->execute();
}
return $results;
}
/**
* Helper function.
* Validates redirection URL.
*/
function _simpleads_validate_url($url) {
if (!preg_match("~^(?:f|ht)tps?://~i", $url)) {
// Allow internal url if user has access to it.
if (drupal_valid_path(drupal_get_normal_path($url))) {
$url = url($url, array(
'absolute' => TRUE,
));
}
else {
$url = 'http://' . $url;
}
}
else {
$url = url($url, array(
'absolute' => TRUE,
));
}
return $url;
}
/**
* Helper function.
* Hide field from simpleads node form if some other module disabled,
* but not uninstalled yet.
* See hook_simpleads_form().
*
* @param string $field_name
*/
function _simpleads_hide_field($field_name) {
$fields_to_hide = variable_get('simpleads_form_alter', array());
$new_array = array();
if (count($fields_to_hide)) {
foreach ($fields_to_hide as $field) {
$new_array[$field] = $field;
}
}
$new_array[$field_name] = $field_name;
variable_set('simpleads_form_alter', $new_array);
}
/**
* Helper function.
* Show field in simpleads node form if other module is enabled.
* See hook_simpleads_form().
*
* @param string $field_name
*/
function _simpleads_show_field($field_name) {
$fields_to_hide = variable_get('simpleads_form_alter', array());
$new_array = array();
if (count($fields_to_hide)) {
foreach ($fields_to_hide as $field) {
if ($field != $field_name) {
$new_array[$field] = $field;
}
}
}
variable_set('simpleads_form_alter', $new_array);
}
/**
* Helper function.
*/
function _simpleads_theme_attributes_init($vars) {
$vars['attributes_array'] = array();
$vars['title_attributes_array'] = array();
$vars['content_attributes_array'] = array();
$vars['classes_array'] = array(
'',
);
if (isset($vars['css_class']) && count($vars['css_class']) > 0) {
$vars['css_attributes'] = join(" ", $vars['css_class']);
}
else {
$vars['css_attributes'] = '';
}
return $vars;
}
/**
* Check SimpleAds node status
*/
function _simpleads_get_node_status($nid) {
$node_status = db_select('node', 'n')
->fields('n', array(
'status',
))
->condition('n.nid', $nid)
->execute()
->fetchField();
return (int) $node_status;
}
Functions
Name | Description |
---|---|
simpleadsid_to_arg | Helper function. Return node id from arguments (used in hook_menu). |
_simpleads_activate_deactive_ad | Helper function. Returns node object if not executed in hook_cron(). |
_simpleads_adgroup_settings | Helper function. Get block settings by ad group id. |
_simpleads_ads_data | Helper function. Builts array for templates. |
_simpleads_ads_listing_query | Helper function. Build query to get the list of ads for the Ads Listing page. |
_simpleads_bot_detect | Helper function. Return TRUE if the visitor is a bot. |
_simpleads_delete_aggregated | Helper procedure. Deletes aggregates stats. |
_simpleads_delete_click | Helper procedure. Deletes ad clicks. |
_simpleads_delete_impression | Helper procedure. Deletes ad impressions. |
_simpleads_get_node_status | Check SimpleAds node status |
_simpleads_hide_field | Helper function. Hide field from simpleads node form if some other module disabled, but not uninstalled yet. See hook_simpleads_form(). |
_simpleads_increase_impression | Helper functon. Increases impressions counter. |
_simpleads_load_ads | Helper function. Returns data array for an adertisement block. |
_simpleads_node_stat_tab | Access callback. Node Ad stats tab. |
_simpleads_render_ajax_template | Helper function. Return rendered SimpleAds block template. |
_simpleads_rotation_effects | Helper funciton. Returns array of supported effects types for blocks. |
_simpleads_save_click | Helper procedure. Saves ad clicks. |
_simpleads_save_impression | Helper procedure. Saves ad impressions |
_simpleads_show_field | Helper function. Show field in simpleads node form if other module is enabled. See hook_simpleads_form(). |
_simpleads_stats_info | Helper function. Adds additional information to statistics page. |
_simpleads_theme_attributes_init | Helper function. |
_simpleads_validate_url | Helper function. Validates redirection URL. |