123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 |
- <?php
- /**
- * Abstract entity ui controller class for source plugin that provides
- * getEntity() method to retrieve list of entities of specific type. It also
- * allows to implement alter hook to alter the entity query for a specific type.
- *
- * @ingroup tmgmt_source
- */
- abstract class TMGMTEntityDefaultSourceUIController extends TMGMTDefaultSourceUIController {
- /**
- * Entity source list items limit.
- *
- * @var int
- */
- public $pagerLimit = 25;
- /**
- * Gets entities data of provided type needed to build overview form list.
- *
- * @param $type
- * Entity type for which to get list of entities.
- * @param array $property_conditions
- * Array of key => $value pairs passed into
- * tmgmt_entity_get_translatable_entities() as the second parameter.
- *
- * @return array
- * Array of entities.
- */
- public function getEntitiesTranslationData($type, $property_conditions = array()) {
- $return_value = array();
- $entities = tmgmt_entity_get_translatable_entities($type, $property_conditions, TRUE);
- $entity_info = entity_get_info($type);
- $bundles = tmgmt_entity_get_translatable_bundles($type);
- // For retrieved entities add translation specific data.
- foreach ($entities as $entity) {
- list($entity_id, , $bundle) = entity_extract_ids($type, $entity);
- $entity_uri = entity_uri($type, $entity);
- // This occurs on user entity type.
- if (empty($entity_id)) {
- continue;
- }
- /**
- * @var EntityTranslationDefaultHandler $handler
- */
- $handler = entity_translation_get_handler($type, $entity);
- // Get existing translations and current job items for the entity
- // to determine translation statuses
- $translations = $handler->getTranslations();
- $source_lang = entity_language($type, $entity);
- $current_job_items = tmgmt_job_item_load_latest('entity', $type, $entity_id, $source_lang);
- // Load basic entity data.
- $return_value[$entity_id] = array(
- 'entity_type' => $type,
- 'entity_id' => $entity_id,
- 'entity_label' => entity_label($type, $entity),
- 'entity_uri' => $entity_uri['path'],
- );
- if (count($bundles) > 1) {
- $return_value[$entity_id]['bundle'] = isset($bundles[$bundle]) ? $bundles[$bundle] : t('Unknown');
- }
- // Load entity translation specific data.
- foreach (language_list() as $langcode => $language) {
- $translation_status = 'current';
- if ($langcode == $source_lang) {
- $translation_status = 'original';
- }
- elseif (!isset($translations->data[$langcode])) {
- $translation_status = 'missing';
- }
- elseif (!empty($translations->data[$langcode]['translate'])) {
- $translation_status = 'outofdate';
- }
- $return_value[$entity_id]['current_job_items'][$langcode] = isset($current_job_items[$langcode]) ? $current_job_items[$langcode]: NULL;
- $return_value[$entity_id]['translation_statuses'][$langcode] = $translation_status;
- }
- }
- return $return_value;
- }
- /**
- * Builds search form for entity sources overview.
- *
- * @param array $form
- * Drupal form array.
- * @param $form_state
- * Drupal form_state array.
- * @param $type
- * Entity type.
- *
- * @return array
- * Drupal form array.
- */
- public function overviewSearchFormPart($form, &$form_state, $type) {
- // Add search form specific styling.
- drupal_add_css(drupal_get_path('module', 'tmgmt_entity') . '/css/tmgmt_entity.admin.entity_source_search_form.css');
- $form = array();
- // Add entity type value into form array so that it is available in
- // the form alter hook.
- $form_state['entity_type'] = $type;
- $form['search_wrapper'] = array(
- '#prefix' => '<div class="tmgmt-sources-wrapper tmgmt-entity-sources-wrapper">',
- '#suffix' => '</div>',
- '#weight' => -15,
- );
- $form['search_wrapper']['search'] = array(
- '#tree' => TRUE,
- );
- $form['search_wrapper']['search_submit'] = array(
- '#type' => 'submit',
- '#value' => t('Search'),
- '#weight' => 10,
- );
- $form['search_wrapper']['search_cancel'] = array(
- '#type' => 'submit',
- '#value' => t('Cancel'),
- '#weight' => 11,
- );
- $entity_info = entity_get_info($type);
- $label_key = isset($entity_info['entity keys']['label']) ? $entity_info['entity keys']['label'] : NULL;
- if (!empty($label_key)) {
- $form['search_wrapper']['search'][$label_key] = array(
- '#type' => 'textfield',
- '#title' => t('@entity_name title', array('@entity_name' => $entity_info['label'])),
- '#size' => 25,
- '#default_value' => isset($_GET[$label_key]) ? $_GET[$label_key] : NULL,
- );
- }
- $language_options = array();
- foreach (language_list() as $langcode => $language) {
- $language_options[$langcode] = $language->name;
- }
- $form['search_wrapper']['search']['language'] = array(
- '#type' => 'select',
- '#title' => t('Source Language'),
- '#options' => $language_options,
- '#empty_option' => t('All'),
- '#default_value' => isset($_GET['language']) ? $_GET['language'] : NULL,
- );
- $bundle_key = $entity_info['entity keys']['bundle'];
- $bundle_options = tmgmt_entity_get_translatable_bundles($type);
- if (count($bundle_options) > 1) {
- $form['search_wrapper']['search'][$bundle_key] = array(
- '#type' => 'select',
- '#title' => t('@entity_name type', array('@entity_name' => $entity_info['label'])),
- '#options' => $bundle_options,
- '#empty_option' => t('All'),
- '#default_value' => isset($_GET[$bundle_key]) ? $_GET[$bundle_key] : NULL,
- );
- }
- // In case entity translation is not enabled for any of bundles
- // display appropriate message.
- elseif (count($bundle_options) == 0) {
- drupal_set_message(t('Entity translation is not enabled for any of existing content types. To use this functionality go to Content types administration and enable entity translation for desired content types.'), 'warning');
- unset($form['search_wrapper']);
- }
- $options = array();
- foreach (language_list() as $langcode => $language) {
- $options[$langcode] = $language->name;
- }
- $form['search_wrapper']['search']['target_language'] = array(
- '#type' => 'select',
- '#title' => t('Target language'),
- '#options' => $options,
- '#empty_option' => t('Any'),
- '#default_value' => isset($_GET['target_language']) ? $_GET['target_language'] : NULL,
- );
- $form['search_wrapper']['search']['target_status'] = array(
- '#type' => 'select',
- '#title' => t('Target status'),
- '#options' => array(
- 'untranslated_or_outdated' => t('Untranslated or outdated'),
- 'untranslated' => t('Untranslated'),
- 'outdated' => t('Outdated'),
- ),
- '#default_value' => isset($_GET['target_status']) ? $_GET['target_status'] : NULL,
- '#states' => array(
- 'invisible' => array(
- ':input[name="search[target_language]"]' => array('value' => ''),
- ),
- ),
- );
- return $form;
- }
- /**
- * Performs redirect with search params appended to the uri.
- *
- * In case of triggering element is edit-search-submit it redirects to
- * current location with added query string containing submitted search form
- * values.
- *
- * @param array $form
- * Drupal form array.
- * @param $form_state
- * Drupal form_state array.
- * @param $type
- * Entity type.
- */
- public function overviewSearchFormRedirect($form, &$form_state, $type) {
- if ($form_state['triggering_element']['#id'] == 'edit-search-cancel') {
- drupal_goto($_GET['q']);
- }
- elseif ($form_state['triggering_element']['#id'] == 'edit-search-submit') {
- $query = array();
- foreach ($form_state['values']['search'] as $key => $value) {
- $query[$key] = $value;
- }
- drupal_goto($_GET['q'], array('query' => $query));
- }
- }
- /**
- * {@inheritdoc}
- */
- public function hook_menu() {
- $items = parent::hook_menu();
- if (isset($items['admin/tmgmt/sources/entity_node'])) {
- // We assume that nodes are the most important overview if enabled, so
- // make sure they show up first.
- $items['admin/tmgmt/sources/entity_node']['weight'] = -20;
- }
- return $items;
- }
- }
|