View source
<?php
include_once 'instagram_feeds_moderation.features.inc';
function instagram_feeds_moderation_preprocess_views_view_table(&$vars) {
if ('instagram_feeds_moderation' == $vars['view']->name && 'admin_instagram_media_items' == $vars['view']->current_display) {
foreach ($vars['view']->result as $id => $row) {
if (isset($row->field_field_instf_blacklist_type[0]['raw']['value']) && 'black' == $row->field_field_instf_blacklist_type[0]['raw']['value']) {
$vars['row_classes'][$id][] = 'blacklisted';
}
}
}
}
function instagram_feeds_moderation_form_alter(&$form, &$form_state, $form_id) {
switch ($form_id) {
case 'taxonomy_form_term':
if (INSTAGRAM_FEEDS_USERS_VOCABULARY_NAME == $form['vocabulary_machine_name']['#value']) {
$form['description']['#access'] = FALSE;
$form['metatags']['#access'] = FALSE;
$form['relations']['#access'] = FALSE;
$form['redirect']['#access'] = FALSE;
$form['field_instf_uid']['#access'] = FALSE;
$form['#attached']['css'][] = drupal_get_path('module', 'instagram_feeds_moderation') . '/css/instagram_feeds_moderation.css';
}
break;
case 'views_exposed_form':
if (isset($form_state['view']) && 'instagram_feeds_moderation' == $form_state['view']->name && 'admin_instagram_media_items' == $form_state['view']->current_display) {
$feeds_opts = instagram_feeds_moderation_get_feeds();
$feeds_opts_t = array(
'All' => t('- Any -'),
);
foreach ($feeds_opts as $key => $value) {
$feeds_opts_t[$key] = t('!feedname', array(
'!feedname' => $value,
));
}
$form['feed'] = array(
'#type' => 'select',
'#options' => $feeds_opts_t,
'#default_value' => 'All',
);
array_unshift($form['#submit'], 'instagram_feeds_moderation_views_exposed_form_submit');
$form['#info']['filter-feed'] = array(
'value' => 'feed',
'label' => t('Feed Name'),
);
$mode_options = array(
'published' => t('Published'),
'flagged' => t('Flagged'),
'archived' => t('Archived'),
'blocked' => t('Blocked'),
);
$form['node_status']['#value'] = '';
$form['node_status']['#type'] = 'value';
$form['flagged']['#value'] = '';
$form['flagged']['#type'] = 'value';
$form['archived']['#value'] = '';
$form['archived']['#type'] = 'value';
$def_status = 'All';
if (NODE_NOT_PUBLISHED === $form['node_status']['#default_value']) {
$def_status = 'blocked';
$form['node_status']['#value'] = FALSE;
}
elseif (1 == $form['archived']['#default_value']) {
$def_status = 'archived';
$form['archived']['#value'] = 1;
}
elseif (1 == $form['flagged']['#default_value']) {
$def_status = 'flagged';
$form['flagged']['#value'] = 1;
}
elseif ($form['node_status']['#default_value']) {
$def_status = 'published';
}
unset($form['node_status']['#default_value'], $form['flagged']['#default_value'], $form['archived']['#default_value']);
$form['mod_status'] = array(
'#type' => 'select',
'#options' => $mode_options,
'#options' => array(
'All' => t('- Any -'),
) + $mode_options,
'#default_value' => $def_status,
);
$form['#info']['filter-mod_status']['value'] = 'mod_status';
$form['#info']['filter-mod_status']['label'] = $form['#info']['filter-status']['label'];
unset($form['#info']['filter-status'], $form['#info']['filter-flagged'], $form['#info']['filter-flagged_1']);
$input_block = array(
'filter-input_block' => array(
'value' => 'input_block',
),
);
$form['#info'] = array_merge($input_block, $form['#info']);
$form['input_block'] = array(
'#type' => 'container',
'#attributes' => array(
'class' => array(
'field-under-fields',
),
),
'#weight' => -10,
);
$form['user']['#title'] = $form['#info']['filter-field_instf_user_tid']['label'];
$form['input_block']['user'] = $form['user'];
unset($form['user'], $form['#info']['filter-field_instf_user_tid']);
$form['tag']['#title'] = $form['#info']['filter-field_instf_hash_tags_tid']['label'];
$form['input_block']['tag'] = $form['tag'];
unset($form['tag'], $form['#info']['filter-field_instf_hash_tags_tid']);
$form['date']['min']['#title_display'] = $form['date']['max']['#title_display'] = 'invisible';
if (isset($form_state['view']->exposed_input['feed']) && is_numeric($form_state['view']->exposed_input['feed'])) {
$form['input_block']['user']['#value'] = implode(',', instagram_feeds_moderation_get_usernames($form_state['view']->exposed_input['feed']));
$form['input_block']['tag']['#value'] = implode(',', instagram_feeds_moderation_get_tagnames($form_state['view']->exposed_input['feed']));
}
}
break;
case 'views_form_instagram_feeds_moderation_admin_instagram_media_items':
if (!isset($form['confirm']['#value']) || !$form['confirm']['#value']) {
$form['#attached']['css'][] = drupal_get_path('module', 'instagram_feeds_moderation') . '/css/instagram_feeds_moderation.css';
$form['#attached']['js'][] = drupal_get_path('module', 'instagram_feeds_moderation') . '/js/instagram-items-moderation.js';
$form['select']['#collapsible'] = FALSE;
}
break;
case 'views_form_instagram_feeds_moderation_admin_instagram_feeds':
if (!isset($form['confirm']['#value']) || !$form['confirm']['#value']) {
$form['select']['#collapsible'] = FALSE;
$form['select']['add_feed'] = array(
'#type' => 'item',
'#markup' => l(t('Add Feed'), 'node/add/' . str_replace('_', '-', INSTAGRAM_FEEDS_SETTINGS_NODE_TYPE), array(
'attributes' => array(
'class' => array(
'button',
),
),
'query' => drupal_get_destination(),
)),
'#weight' => -1,
);
$form['#attached']['css'][] = drupal_get_path('module', 'instagram_feeds_moderation') . '/css/instagram_feeds_moderation.css';
$form['#attached']['js'][] = drupal_get_path('module', 'instagram_feeds_moderation') . '/js/instagram-items-moderation.js';
}
break;
case 'instagram_feed_node_form':
if (!empty($form['nid']['#value'])) {
$form['actions']['manage_images'] = array(
'#type' => 'submit',
'#value' => t('Manage Images'),
'#weight' => 1,
'#submit' => array(
'instagram_feeds_moderation_node_form_submit',
),
);
}
break;
}
}
function instagram_feeds_moderation_views_exposed_form_submit($form, &$form_state) {
switch ($form_state['values']['mod_status']) {
case 'published':
$form_state['values']['archived'] = FALSE;
$form_state['values']['flagged'] = FALSE;
$form_state['values']['node_status'] = NODE_PUBLISHED;
break;
case 'blocked':
$form_state['values']['node_status'] = FALSE;
break;
case 'archived':
$form_state['values']['archived'] = 1;
$form_state['values']['flagged'] = FALSE;
break;
case 'flagged':
$form_state['values']['flagged'] = 1;
break;
}
}
function instagram_feeds_moderation_node_form_submit($form, &$form_state) {
$node = node_form_submit_build_node($form, $form_state);
node_save($node);
$node_link = l(t('view'), 'node/' . $node->nid);
$watchdog_args = array(
'@type' => $node->type,
'%title' => $node->title,
);
$t_args = array(
'@type' => node_type_get_name($node),
'%title' => $node->title,
);
watchdog('content', '@type: updated %title.', $watchdog_args, WATCHDOG_NOTICE, $node_link);
drupal_set_message(t('@type %title has been updated.', $t_args));
cache_clear_all();
if (isset($_GET['destination'])) {
unset($_GET['destination']);
}
$form_state['redirect'] = array(
'admin/content/instagram/media',
array(
'query' => array(
'feed' => $node->nid,
),
),
);
}
function instagram_feeds_moderation_action_info() {
return array(
'instagram_feeds_moderation_flag_archive' => array(
'type' => 'node',
'label' => t('Archive images'),
'configurable' => FALSE,
'behavior' => array(
'changes_property',
),
),
'instagram_feeds_moderation_flag_block' => array(
'type' => 'node',
'label' => t('Block images'),
'configurable' => FALSE,
'behavior' => array(
'changes_property',
),
),
);
}
function instagram_feeds_moderation_flag_archive($node) {
if (NODE_PUBLISHED != $node->status) {
$node->status = NODE_PUBLISHED;
node_save($node);
}
$flag = flag_load('image_archived');
if ($flag && !$flag
->is_flagged($node->nid)) {
$flag
->flag('flag', $node->nid, NULL, TRUE);
}
$flag2 = flag_load('flag_as_inappropriate');
if ($flag2 && $flag2
->is_flagged($node->nid)) {
$flag2
->flag('unflag', $node->nid, NULL, TRUE);
}
}
function instagram_feeds_moderation_flag_block($node) {
if (NODE_PUBLISHED == $node->status) {
$node->status = NODE_NOT_PUBLISHED;
node_save($node);
}
$flag = flag_load('image_archived');
if ($flag && $flag
->is_flagged($node->nid)) {
$flag
->flag('unflag', $node->nid, NULL, TRUE);
}
$flag2 = flag_load('flag_as_inappropriate');
if ($flag2 && $flag2
->is_flagged($node->nid)) {
$flag2
->flag('unflag', $node->nid, NULL, TRUE);
}
}
function instagram_feeds_moderation_views_pre_render(&$view) {
if ('instagram_feeds_moderation' == $view->name && 'admin_instagram_media_items' == $view->current_display) {
$destination = drupal_get_destination();
$view->display_handler->handlers['field']['field_instf_blacklist_type']->options['alter']['path'] .= '?destination=' . urlencode($destination['destination']);
}
}
function instagram_feeds_moderation_views_pre_view(&$view) {
if ('instagram_feeds_moderation' == $view->name && 'admin_instagram_media_items' == $view->current_display) {
if (isset($_GET['feed']) && 'All' != $_GET['feed']) {
$node = node_load($_GET['feed']);
if (isset($node->type) && INSTAGRAM_FEEDS_SETTINGS_NODE_TYPE == $node->type) {
$destination = drupal_get_destination();
$import_button = l(t('Import Items'), 'node/' . $_GET['feed'] . '/import', array(
'query' => $destination,
'attributes' => array(
'class' => array(
'button',
),
),
));
$view->display_handler->options['empty']['area']['content'] .= ' ' . $import_button;
}
}
}
}
function instagram_feeds_moderation_preprocess_views_view_field(&$vars) {
if ('instagram_feeds_moderation' == $vars['view']->name && 'admin_instagram_media_items' == $vars['view']->current_display) {
switch ($vars['field']->field) {
case 'nothing':
$conditions = array(
'tags' => array(),
'users' => array(),
);
if (isset($vars['row']->_field_data['nid']['entity']->field_instf_hash_tags[LANGUAGE_NONE])) {
foreach ($vars['row']->_field_data['nid']['entity']->field_instf_hash_tags[LANGUAGE_NONE] as $tid) {
$conditions['tags'][] = $tid['tid'];
}
}
if (isset($vars['row']->_field_data['nid']['entity']->field_instf_user[LANGUAGE_NONE])) {
foreach ($vars['row']->_field_data['nid']['entity']->field_instf_user[LANGUAGE_NONE] as $tid) {
$conditions['users'][] = $tid['tid'];
}
}
$instagram_feeds = instagram_feeds_moderation_get_feeds($conditions);
$vars['output'] = implode('<br />', $instagram_feeds);
break;
case 'status':
if (!$vars['row']->node_status) {
$vars['output'] = t('Blocked');
}
elseif (!empty($vars['row']->flag_content_node_timestamp) || !empty($vars['row']->flagging_node_timestamp)) {
$vars['output'] = '<strong>' . t('Flagged') . '</strong>';
}
elseif (!empty($vars['row']->flag_content_node_1_timestamp) || !empty($vars['row']->flagging_node_1_timestamp)) {
$vars['output'] = t('Archived');
}
break;
case 'field_instf_image_url':
$vars['field']->last_render = '<img src="' . $vars['field']->original_value . '" alt="" onerror="this.src=\'/' . drupal_get_path('module', 'instagram_feeds') . '/images/image_removed.svg\'" />';
if ('field_instf_image_url_1' == $vars['field']->options['id']) {
$vars['field']->last_render .= '<div class="hover">' . $vars['field']->last_tokens['[body]'] . '</div>';
}
break;
}
}
}
function instagram_feeds_moderation_get_feeds($conditions = array(
'tags' => array(),
'users' => array(),
)) {
$feeds_list =& drupal_static(__FUNCTION__);
$feeds_list_all =& drupal_static(__FUNCTION__ . '_all');
$result = array();
if (!isset($feeds_list)) {
$feeds_list = array();
$feeds_list_all = array();
$query_result = _instagram_feeds_moderation_get_feeds_query();
foreach ($query_result as $node) {
$feeds_list_all[$node->nid] = $node->title;
if (!count(explode(',', $node->user_tids))) {
foreach (explode(',', $node->tag_tids) as $tid) {
$feeds_list[$tid . '__'][$node->nid] = $node->title;
}
}
elseif (!count(explode(',', $node->tag_tids))) {
foreach (explode(',', $node->user_tids) as $tid) {
$feeds_list['__' . $tid][$node->nid] = $node->title;
}
}
else {
foreach (explode(',', $node->tag_tids) as $tid) {
foreach (explode(',', $node->user_tids) as $utid) {
$feeds_list[$tid . '__' . $utid][$node->nid] = $node->title;
}
}
}
}
asort($feeds_list_all);
}
if (!count($conditions['tags']) && !count($conditions['users'])) {
return $feeds_list_all;
}
if (count($conditions['tags'])) {
foreach ($conditions['tags'] as $tid) {
if (isset($feeds_list[$tid . '__'])) {
$result += $feeds_list[$tid . '__'];
}
}
}
if (count($conditions['users'])) {
foreach ($conditions['users'] as $tid) {
if (isset($feeds_list['__' . $tid])) {
$result += $feeds_list['__' . $tid];
}
}
}
if (count($conditions['tags']) && count($conditions['users'])) {
foreach ($conditions['tags'] as $tid) {
foreach ($conditions['users'] as $utid) {
if (isset($feeds_list[$tid . '__' . $utid])) {
$result += $feeds_list[$tid . '__' . $utid];
}
}
}
}
asort($result);
return $result;
}
function _instagram_feeds_moderation_get_feeds_query() {
$result =& drupal_static(__FUNCTION__);
if (!isset($result)) {
$result = array();
$q = db_select('node', 'n')
->fields('n', array(
'nid',
'title',
));
$q
->leftJoin('field_data_field_instf_hash_tags', 'tags', 'n.nid = tags.entity_id');
$q
->leftJoin('field_data_field_instf_user', 'users', 'n.nid = users.entity_id');
$q
->leftJoin('taxonomy_term_data', 'term', 'tags.field_instf_hash_tags_tid = term.tid');
$q
->leftJoin('taxonomy_term_data', 'uterm', 'users.field_instf_user_tid = uterm.tid');
$q
->addExpression("GROUP_CONCAT(tags.field_instf_hash_tags_tid ORDER BY tags.field_instf_hash_tags_tid)", 'tag_tids');
$q
->addExpression("GROUP_CONCAT(term.name ORDER BY term.tid)", 'tag_names');
$q
->addExpression("GROUP_CONCAT(users.field_instf_user_tid ORDER BY users.field_instf_user_tid)", 'user_tids');
$q
->addExpression("GROUP_CONCAT(uterm.name ORDER BY uterm.tid)", 'user_names');
$q
->condition('n.type', INSTAGRAM_FEEDS_SETTINGS_NODE_TYPE);
$q
->groupBy('n.nid');
$q
->orderBy('n.title');
$result = $q
->execute()
->fetchAllAssoc('nid');
}
return $result;
}
function instagram_feeds_moderation_get_usernames($nid = NULL) {
$result = array();
$query_result = _instagram_feeds_moderation_get_feeds_query();
if (isset($query_result[$nid]) && !empty($query_result[$nid]->user_tids)) {
$node = $query_result[$nid];
$result = array_combine(explode(',', $node->user_tids), explode(',', $node->user_names));
}
return $result;
}
function instagram_feeds_moderation_get_tagnames($nid = NULL) {
$result = array();
$query_result = _instagram_feeds_moderation_get_feeds_query();
if (isset($query_result[$nid]) && !empty($query_result[$nid]->tag_tids)) {
$node = $query_result[$nid];
$result = array_combine(explode(',', $node->tag_tids), explode(',', $node->tag_names));
}
return $result;
}
function instagram_feeds_moderation_flag($op, $flag, $content_id, $account, $fcid) {
if ('image_archived' == $flag->name && 'flag' == $op) {
$inappropriate = flag_load('flag_as_inappropriate');
if ($inappropriate && $inappropriate
->is_flagged($content_id)) {
$inappropriate
->flag('unflag', $content_id, $account, TRUE);
}
}
}
function instagram_feeds_moderation_views_bulk_operations_form_alter(&$form, &$form_state, $vbo) {
if ($form_state['step'] == 'views_form_views_form') {
switch ($form['form_id']['#value']) {
case 'views_form_instagram_feeds_moderation_admin_instagram_media_items':
if (!isset($form['confirm']['#value']) || !$form['confirm']['#value']) {
$form['#attached']['css'][] = drupal_get_path('module', 'instagram_feeds_moderation') . '/css/instagram_feeds_moderation.css';
$form['select']['#collapsible'] = FALSE;
}
break;
case 'views_form_instagram_feeds_moderation_admin_instagram_feeds':
if (!isset($form['confirm']['#value']) || !$form['confirm']['#value']) {
$form['select']['#collapsible'] = FALSE;
$form['select']['add_feed'] = array(
'#type' => 'item',
'#markup' => l(t('Add Feed'), 'node/add/' . str_replace('_', '-', INSTAGRAM_FEEDS_SETTINGS_NODE_TYPE), array(
'attributes' => array(
'class' => array(
'button',
),
),
'query' => drupal_get_destination(),
)),
'#weight' => -1,
);
$form['#attached']['css'][] = drupal_get_path('module', 'instagram_feeds_moderation') . '/css/instagram_feeds_moderation.css';
}
break;
}
}
}