View source
<?php
define('DOMAIN_SOURCE_USE_ACTIVE', -5);
define('DOMAIN_SOURCE_IGNORE', -10);
function domain_source_form_alter(&$form, &$form_state, $form_id) {
if (empty($form['#node_edit_form'])) {
return;
}
global $user;
$_domain = domain_get_domain();
if (!empty($form['#node']->nid)) {
$default_source = db_query("SELECT domain_id FROM {domain_source} WHERE nid = :nid", array(
':nid' => $form['#node']->nid,
))
->fetchField();
}
if (!isset($default_source)) {
$default_source = $_domain['domain_id'];
}
$lookup = domain_lookup($default_source);
if ($default_source != DOMAIN_SOURCE_USE_ACTIVE && empty($lookup['valid'])) {
$default_source = NULL;
}
$account = $user;
domain_get_user_domains($account);
$options = array();
$domains = domain_domains();
$show = FALSE;
if (user_access('set domain access')) {
$show = TRUE;
$options[DOMAIN_SOURCE_USE_ACTIVE] = t('Use active domain');
foreach ($domains as $domain) {
if ($domain['valid'] || user_access('access inactive domains')) {
$options[$domain['domain_id']] = $domain['sitename'];
}
}
}
elseif (user_access('publish to any assigned domain') && !empty($account->domain_user)) {
$show = FALSE;
$options[DOMAIN_SOURCE_USE_ACTIVE] = t('Use active domain');
foreach ($domains as $domain) {
$key = $domain['domain_id'];
if ($domain['domain_id'] == 0) {
$key = -1;
}
if (!empty($user->domain_user[$key]) && ($domain['valid'] || user_access('access inactive domains'))) {
$options[$key] = $domain['sitename'];
}
}
if (isset($form['#node']->domain_source)) {
$source = $form['#node']->domain_source == 0 ? -1 : $form['#node']->domain_source;
}
else {
$source = NULL;
$show = TRUE;
}
if (!is_null($source) && isset($account->domain_user[$source])) {
if ($account->domain_user[$source] == $source) {
$show = TRUE;
}
else {
$name = $source != -5 ? $domains[$source]['sitename'] : t('the active domain');
$form['domain']['domain_source_notes'] = array(
'#type' => 'item',
'#title' => t('Source domain'),
'#markup' => t('This content is assigned to %domain and cannot be reassigned.', array(
'%domain' => $name,
)),
);
}
}
}
if ($show) {
$form['domain']['domain_source'] = array(
'#type' => 'select',
'#title' => t('Source domain'),
'#options' => $options,
'#default_value' => $default_source,
'#description' => t('This affiliate will be used to write links to this content from other affiliates, as needed.'),
);
}
else {
$form['domain']['domain_source'] = array(
'#type' => 'value',
'#value' => $default_source,
);
}
}
function domain_source_form_domain_content_admin_alter(&$form, &$form_state) {
$_domain = domain_get_domain();
if (!user_access('set domain access') || isset($form['operation']['#value'])) {
return;
}
$options = array();
$domains = domain_domains();
$options[DOMAIN_SOURCE_IGNORE] = t('Do not change');
$options[DOMAIN_SOURCE_USE_ACTIVE] = t('Use active domain');
foreach ($domains as $domain) {
$options[$domain['domain_id']] = $domain['sitename'];
}
$form['domain']['domain_source'] = array(
'#type' => 'select',
'#title' => t('Source domain'),
'#options' => $options,
'#default_value' => $_domain['domain_id'],
'#description' => t('The canonical domain for the selected content. This element replaces existing settings for all selections.'),
);
$form['admin']['options']['submit']['#validate'][] = 'domain_source_validate';
$form['admin']['options']['submit']['#submit'][] = 'domain_source_update_nodes';
}
function domain_source_form_node_admin_content_alter(&$form, &$form_state) {
if (isset($form['operation']['#value']) && $form['operation']['#value'] == 'delete') {
return;
}
domain_source_form_domain_content_admin_alter($form, $form_state);
}
function domain_source_node_validate($node, $form) {
if (!isset($node->domain_source)) {
return;
}
$node->domain_source == 0 ? $key = -1 : ($key = $node->domain_source);
$allowed = array();
if (!empty($node->domains)) {
$allowed = $node->domains;
}
if (!empty($node->domains_raw)) {
$allowed = array_merge($allowed, $node->domains_raw);
}
if ($node->domain_site && $key == -1) {
}
elseif ($node->domain_source != DOMAIN_SOURCE_USE_ACTIVE && !in_array($key, $allowed)) {
form_set_error('domain_source', t('The source affiliate must be selected as a publishing option.'));
}
}
function domain_source_node_load($nodes, $types) {
$source = domain_source_lookup($nodes);
foreach ($nodes as $node) {
if (!isset($node->nid)) {
continue;
}
$nodes[$node->nid]->domain_source = $source[$node->nid]['domain_id'];
}
}
function domain_source_node_insert($node) {
if (!isset($node->domain_source) || is_null($node->domain_source)) {
return;
}
domain_source_node_delete($node);
db_insert('domain_source')
->fields(array(
'nid' => $node->nid,
'domain_id' => $node->domain_source,
))
->execute();
domain_source_lookup($node->nid, array(), NULL, TRUE);
}
function domain_source_node_update($node) {
domain_source_node_insert($node);
}
function domain_source_node_delete($node) {
db_delete('domain_source')
->condition('nid', $node->nid)
->execute();
}
function domain_source_node_view($node, $view_mode) {
if (empty($node->nid) || !in_array($view_mode, array(
'full',
'teaser',
))) {
return;
}
if (variable_get('domain_debug', 0) && user_access('set domain access') && isset($node->domain_source)) {
$source = domain_get_node_match($node->nid);
$extra = ' ';
$use_active = db_query("SELECT domain_id FROM {domain_source} WHERE nid = :nid", array(
':nid' => $node->nid,
))
->fetchField();
if ($use_active === FALSE) {
$extra .= t('(determined automatically)');
}
elseif ($use_active == DOMAIN_SOURCE_USE_ACTIVE) {
$extra .= t('(using active domain)');
}
if (!isset($node->content['domain']['#markup'])) {
$node->content['domain']['#markup'] = '';
}
$node->content['domain']['#markup'] .= '<p>' . t('<strong>Source domain</strong>: %source', array(
'%source' => $source['sitename'],
)) . $extra . '</p>';
}
}
function domain_source_lookup($nodes, $domains = array(), $domain_site = FALSE, $reset = FALSE) {
global $_domain;
static $lookups;
if ($reset) {
$lookups = array();
}
if (!is_array($nodes)) {
$nid = $nodes;
$node_ids = array(
$nid,
);
$array = FALSE;
}
else {
$node_ids = array_keys($nodes);
$array = TRUE;
}
if (!$reset && isset($nid) && isset($lookups[$nid])) {
return $lookups[$nid];
}
$result = db_query("SELECT nid, domain_id FROM {domain_source} WHERE nid IN (:nid)", array(
':nid' => $node_ids,
))
->fetchAll();
foreach ($result as $data) {
$source = $data->domain_id;
if ($source == DOMAIN_SOURCE_USE_ACTIVE) {
$source = $_domain['domain_id'];
}
if (is_array($nodes) && isset($nodes[$data->nid]->domains)) {
$domains = $nodes[$data->nid]->domains;
$domain_site = $nodes[$data->nid]->domain_site;
}
if (empty($domains)) {
$lookup = domain_get_node_domains($data->nid);
$domain_site = $lookup['domain_site'];
$domains = $lookup['domain_id'];
}
$source = $source == 0 ? -1 : $source;
if (empty($domain_site) && !empty($domains) && !in_array($source, $domains)) {
$source = current($domains);
}
$domain_id = $source == -1 ? 0 : $source;
$lookups[$data->nid] = domain_lookup($domain_id);
}
$no_records = $node_ids;
if (!empty($lookups)) {
$no_records = array_diff($node_ids, array_keys($lookups));
}
foreach ($no_records as $nid) {
$default_source = variable_get('domain_default_source', 0);
if ($default_source == -1) {
$lookups[$nid] = $_domain;
}
else {
$lookups[$nid] = domain_lookup($default_source);
}
}
if ($array) {
return $lookups;
}
return $lookups[$nid];
}
function domain_source_domain_source_alter(&$source, $nid) {
$source = domain_source_lookup($nid);
}
function domain_source_update_nodes($form, &$form_state) {
if ($form_state['values']['operation'] == 'domain') {
$source = $form_state['values']['domain_source'];
foreach ($form_state['values']['nodes'] as $key => $value) {
if ($key == $value) {
db_delete('domain_source')
->condition('nid', $key)
->execute();
db_insert('domain_source')
->fields(array(
'nid' => $key,
'domain_id' => $source,
))
->execute();
}
}
}
}
function domain_source_validate($form, &$form_state) {
if ($form_state['values']['operation'] == 'domain') {
$form_state['values']['domain_source'] == 0 ? $key = -1 : ($key = $form_state['values']['domain_source']);
if ($form_state['values']['domain_site'] && $key == -1 || $key == DOMAIN_SOURCE_USE_ACTIVE) {
}
elseif ($key == DOMAIN_SOURCE_IGNORE) {
$nodes = array_filter($form_state['values']['nodes']);
foreach ($nodes as $nid) {
$source = domain_source_lookup($nid, array(), $form_state['values']['domain_site'], TRUE);
$key = $source['domain_id'] == 0 ? -1 : $source['domain_id'];
$behavior = $form_state['values']['behavior'];
if ($behavior < 2) {
if (empty($form_state['values']['domains'][$key])) {
$node = node_load($nid);
form_set_error('domain_source', t('The source affiliate must be selected as a publishing option. %title is assigned to %domain.', array(
'%title' => $node->title,
'%domain' => $source['sitename'],
)));
}
}
elseif (!empty($form_state['values']['domains'][$key])) {
$node = node_load($nid);
form_set_error('domain_source', t('The source affiliate must be selected as a publishing option. %title is assigned to %domain.', array(
'%title' => $node->title,
'%domain' => $source['sitename'],
)));
}
}
}
elseif (empty($form_state['values']['domains'][$key])) {
form_set_error('domain_source', t('The source affiliate must be selected as a publishing option.'));
}
}
}
function domain_source_domainupdate($op, $domain, $form_state = array()) {
if ($op == 'delete' && $domain['domain_id'] > 0) {
db_delete('domain_source')
->condition('domain_id', $domain['domain_id'])
->execute();
}
}
function domain_source_views_api() {
if (module_exists('domain_views')) {
return array(
'api' => 2.0,
);
}
}