123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- <?php
- /**
- * Contains the controller class for CER's UI (i.e., preset management pages),
- * used by Entity API.
- */
- class CerUIController extends EntityDefaultUIController {
- public function hook_menu() {
- $items = parent::hook_menu();
- $items[$this->path]['title'] = t('Corresponding Entity References');
- $items["{$this->path}/list"]['title'] = t('Presets');
- $this->setTitle($items["{$this->path}/add"], t('Add preset'));
- $this->setTitle($items["{$this->path}/import"], t('Import preset'));
- $items["{$this->path}/manage/%entity_object/toggle"] = $this->createCallback('cer_toggle_preset', 'update');
- $items["{$this->path}/manage/%entity_object/invert"] = $this->createCallback('cer_invert_preset', 'create');
- // Don't provide a page for cloning a preset.
- unset($items["{$this->path}/manage/%entity_object/clone"]);
- return $items;
- }
- private function createCallback($function, $operation, array $init = array()) {
- return $init + array(
- 'type' => MENU_CALLBACK,
- 'page callback' => $function,
- 'page arguments' => array(5),
- 'load arguments' => array('cer'),
- 'access callback' => 'entity_access',
- 'access arguments' => array($operation, 'cer'),
- 'file' => 'cer.admin.inc',
- 'file path' => drupal_get_path('module', 'cer'),
- );
- }
- /**
- * Sets a static title on a menu item.
- */
- private function setTitle(array &$item, $title) {
- $item['title'] = $title;
- unset($item['title callback'], $item['title arguments']);
- }
- public function operationForm($form, &$form_state, $entity, $action) {
- switch ($action) {
- case 'delete':
- return confirm_form($form, t('Are you sure you want to delete this preset?'), $this->path, t('@left will no longer synchronize with @right.', $entity->label_variables));
- default:
- return parent::operationForm($form, $form_state, $entity, $action);
- }
- }
- public function overviewForm($form, &$form_state) {
- $form = parent::overviewForm($form, $form_state);
- $form['actions'] = array(
- 'update' => array(
- '#type' => 'submit',
- '#value' => t('Save changes'),
- ),
- '#type' => 'actions',
- );
- return $form;
- }
- public function overviewFormSubmit($form, &$form_state) {
- foreach ($form_state['values']['table'] as $id => $values) {
- $preset = entity_object_load($id, $this->entityType);
-
- $preset->wrapper->cer_enabled->set($values['cer_enabled'][LANGUAGE_NONE][0]['value']);
- $preset->wrapper->cer_bidirectional->set($values['cer_bidirectional'][LANGUAGE_NONE][0]['value']);
- $preset->wrapper->cer_weight->set($values['cer_weight'][LANGUAGE_NONE][0]['value']);
- $preset->save();
- }
- drupal_set_message(t('The changes have been saved.'));
- }
- public function overviewTable($conditions = array()) {
- $render = array(
- '#header' => array(
- t('Left Field'),
- t('Right Field'),
- t('Status'),
- t('Enabled'),
- t('Bidirectional'),
- t('Weight'),
- t('Operations'),
- ),
- '#tabledrag' => array(
- array(
- 'action' => 'order',
- 'relationship' => 'sibling',
- 'group' => 'cer-weight',
- ),
- ),
- '#empty' => t('None.'),
- '#type' => 'table',
- );
- $query = new EntityFieldQuery();
- $query->entityCondition('entity_type', $this->entityType);
- // Add all conditions to query.
- foreach ($conditions as $key => $value) {
- $query->propertyCondition($key, $value);
- }
- if ($this->overviewPagerLimit) {
- $query->pager($this->overviewPagerLimit);
- }
-
- $query->fieldOrderBy('cer_weight', 'value');
- $results = $query->execute();
- $entities = isset($results['cer']) ? entity_load('cer', array_keys($results['cer'])) : array();
- foreach ($entities as $entity) {
- $render[$entity->pid] = $this->overviewTableRow($conditions, $entity->pid, $entity);
- }
- return $render;
- }
- protected function overviewTableRow($conditions, $id, $entity, $additional_cols = array()) {
- $render_fields = field_attach_view($this->entityType, $entity, 'default');
- $render_fields['cer_left']['#label_display'] = 'inline';
- $render_fields['cer_left']['#title'] = $entity->wrapper->cer_left->chain->value()->end()->fieldTypeLabel;
- $row['cer_left'] = $render_fields['cer_left'];
- $render_fields['cer_right']['#label_display'] = 'inline';
- $render_fields['cer_right']['#title'] = $entity->wrapper->cer_right->chain->value()->end()->fieldTypeLabel;
- $row['cer_right'] = $render_fields['cer_right'];
- $row['status'] = array(
- '#theme' => 'entity_status',
- '#status' => $entity->status,
- );
- $form_fields = array();
- $form_state = form_state_defaults();
- $form_state['build_info']['form_id'] = 'cer_overview_form';
- field_attach_form($this->entityType, $entity, $form_fields, $form_state);
- unset($form_fields['cer_enabled'][LANGUAGE_NONE]['#title']);
- $row['cer_enabled'] = $form_fields['cer_enabled'];
- unset($form_fields['cer_bidirectional'][LANGUAGE_NONE]['#title']);
- $row['cer_bidirectional'] = $form_fields['cer_bidirectional'];
- unset($form_fields['cer_weight'][LANGUAGE_NONE]['#title']);
- $form_fields['cer_weight'][LANGUAGE_NONE]['#attributes']['class'][] = 'cer-weight';
- $row['cer_weight'] = $form_fields['cer_weight'];
- // Add in any passed additional cols.
- foreach ($additional_cols as $key => $col) {
- $row[$key] = $col;
- }
- // I like drop buttons more than an inline set of links.
- $links = array(
- 'toggle' => array(
- 'title' => $entity->wrapper->cer_enabled->value() ? t('disable') : t('enable'),
- 'href' => "{$this->path}/manage/{$id}/toggle",
- 'query' => drupal_get_destination(),
- ),
- 'edit' => array(
- 'title' => t('edit'),
- 'href' => "{$this->path}/manage/{$id}",
- ),
- );
- // If the preset is one-directional, expose a link to invert it.
- if (! $entity->wrapper->cer_bidirectional->value()) {
- $links['invert'] = array(
- 'title' => t('invert'),
- 'href' => "{$this->path}/manage/{$id}/invert",
- 'query' => drupal_get_destination(),
- );
- }
- if (entity_has_status($this->entityType, $entity, ENTITY_OVERRIDDEN)) {
- $links['revert'] = array(
- 'title' => t('revert'),
- 'href' => "{$this->path}/manage/{$id}/revert",
- 'query' => drupal_get_destination(),
- );
- }
- else {
- $links['delete'] = array(
- 'title' => t('delete'),
- 'href' => "{$this->path}/manage/{$id}/delete",
- 'query' => drupal_get_destination(),
- );
- }
- $links['export'] = array(
- 'title' => t('export'),
- 'href' => "{$this->path}/manage/{$id}/export",
- );
- $row['operations'] = array(
- '#theme' => 'links__ctools_dropbutton',
- '#links' => $links,
- );
- $row['#attributes']['class'][] = 'draggable';
- return $row;
- }
- }
|