134 lines
3.9 KiB
PHP
134 lines
3.9 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Form builder to create or edit presets.
|
|
*/
|
|
function cer_form(array $form, array &$form_state, CerPreset $preset, $do = 'edit', $entity_type = NULL) {
|
|
field_attach_form('cer', $preset, $form, $form_state);
|
|
|
|
$form['cer_right']['#id'] = 'edit-cer-right';
|
|
|
|
$form['cer_left'][LANGUAGE_NONE]['#ajax'] = array(
|
|
'callback' => 'cer_update_right',
|
|
'wrapper' => $form['cer_right']['#id'],
|
|
);
|
|
|
|
$form['actions'] = array(
|
|
'submit' => array(
|
|
'#type' => 'submit',
|
|
'#value' => t('Save'),
|
|
),
|
|
'#weight' => 10,
|
|
);
|
|
|
|
return $form;
|
|
}
|
|
|
|
function cer_form_submit(array &$form, array &$form_state) {
|
|
$preset = entity_ui_form_submit_build_entity($form, $form_state)->save();
|
|
|
|
drupal_set_message(t('The preset has been saved.'));
|
|
$form_state['redirect'] = 'admin/config/content/cer';
|
|
}
|
|
|
|
function cer_update_right(array &$form, array &$form_state) {
|
|
$preset = $form_state['build_info']['args'][0];
|
|
field_attach_submit('cer', $preset, $form, $form_state, array('field_name' => 'cer_left'));
|
|
|
|
$left = $preset->wrapper->cer_left->chain->value();
|
|
$left_identifier = $left->__toString();
|
|
$left_re = $left->regex();
|
|
|
|
$hierarchy = new FieldHierarchy();
|
|
foreach (CerFieldChain::collectAll() as $chain) {
|
|
if (preg_match($left_re, $chain->__toString()) && preg_match($chain->regex(), $left_identifier)) {
|
|
$hierarchy->addChain($chain);
|
|
}
|
|
}
|
|
|
|
$options = $hierarchy->options();
|
|
if ($options) {
|
|
$form['cer_right'][LANGUAGE_NONE]['#options'] = $options;
|
|
}
|
|
else {
|
|
drupal_set_message(t('There are no fields which can correspond with your selection.'), 'warning');
|
|
}
|
|
|
|
return $form['cer_right'];
|
|
}
|
|
|
|
/**
|
|
* Enables or disables a preset, depending on its current status. This callback
|
|
* is defined by CerUIController::hook_menu().
|
|
*/
|
|
function cer_toggle_preset(CerPreset $preset) {
|
|
$preset->wrapper->cer_enabled->set(! $preset->wrapper->cer_enabled->value());
|
|
$preset->save();
|
|
|
|
drupal_goto(isset($_GET['destination']) ? $_GET['destination'] : 'admin/config/content/cer');
|
|
}
|
|
|
|
/**
|
|
* Permanently inverts a preset (i.e., deletes the original). This callback
|
|
* is defined by CerUIController::hook_menu().
|
|
*/
|
|
function cer_invert_preset(CerPreset $original) {
|
|
$original->invert()->save();
|
|
$original->delete();
|
|
|
|
drupal_goto(isset($_GET['destination']) ? $_GET['destination'] : 'admin/config/content/cer');
|
|
}
|
|
|
|
/**
|
|
* Allows batch updating of existing entities.
|
|
*/
|
|
function cer_bulk_update_form(array $form, array &$form_state) {
|
|
$form['type'] = array(
|
|
'#type' => 'select',
|
|
'#title' => t('Entity type'),
|
|
'#required' => TRUE,
|
|
'#options' => array(),
|
|
'#description' => t('Select the entity type that you want to update.'),
|
|
);
|
|
foreach (entity_get_info() as $type => $class) {
|
|
$form['type']['#options'][$type] = $class['label'];
|
|
}
|
|
|
|
$form['submit'] = array(
|
|
'#type' => 'submit',
|
|
'#value' => t('Submit'),
|
|
);
|
|
|
|
return $form;
|
|
}
|
|
|
|
/**
|
|
* The update form. Allows bulk updating of current entities.
|
|
*/
|
|
function cer_bulk_update_form_submit(array $form, array &$form_state) {
|
|
$batch = array(
|
|
'finished' => 'cer_batch_update_existing_finished',
|
|
'title' => t('Processing'),
|
|
'init_message' => t('Preparing to update corresponding entity references for existing entities...'),
|
|
'progress_message' => t('Processing entities...'),
|
|
'error_message' => t('Corresponding entity references - existing entity update has encountered an error.'),
|
|
'operations' => array(),
|
|
);
|
|
|
|
$entity_type = $form_state['values']['type'];
|
|
$query = new EntityFieldQuery();
|
|
$query->entityCondition('entity_type', $entity_type);
|
|
if ($entity_type == 'user') {
|
|
$query->entityCondition('entity_id', 0, '>');
|
|
}
|
|
$result = $query->execute();
|
|
|
|
if (isset($result[$entity_type])) {
|
|
foreach (array_keys($result[$entity_type]) as $entity_id) {
|
|
$batch['operations'][] = array('cer_processing_entity', array('update', $entity_id, $entity_type));
|
|
}
|
|
}
|
|
|
|
batch_set($batch);
|
|
}
|