Преглед изворни кода

handled translation links from node edit

Bachir Soussi Chiadmi пре 7 година
родитељ
комит
7563311a19
1 измењених фајлова са 217 додато и 47 уклоњено
  1. 217 47
      sites/all/modules/gui/materiobasemod/materio_translator.module

+ 217 - 47
sites/all/modules/gui/materiobasemod/materio_translator.module

@@ -46,7 +46,12 @@ function materio_translator_user_delete($account) {
     ->execute();
 }
 
-
+//     __  __     __
+//    / / / /__  / /___  ___  __________
+//   / /_/ / _ \/ / __ \/ _ \/ ___/ ___/
+//  / __  /  __/ / /_/ /  __/ /  (__  )
+// /_/ /_/\___/_/ .___/\___/_/  /____/
+//             /_/
 /**
  * Load the language permissions for a given user
  */
@@ -80,6 +85,12 @@ function materio_translator_load_permissions($uid = NULL) {
 }
 
 
+//    ________      __          __
+//   / ____/ /___  / /_  ____ _/ /  ____  ___  _________ ___  _____
+//  / / __/ / __ \/ __ \/ __ `/ /  / __ \/ _ \/ ___/ __ `__ \/ ___/
+// / /_/ / / /_/ / /_/ / /_/ / /  / /_/ /  __/ /  / / / / / (__  )
+// \____/_/\____/_.___/\__,_/_/  / .___/\___/_/  /_/ /_/ /_/____/
+//                              /_/
 /**
  * Implements hook_permission().
  */
@@ -90,6 +101,11 @@ function materio_translator_permission() {
       'description' => t('This permission gives this role edit/delete access to all content which are in the <a href="!url" target="_blank">selected language</a>. View/create access needs a different access level.', array('!url' => url('admin/config/regional/language/access'))),
       'restrict access' => TRUE,
     ),
+    'administer user translation language access' => array(
+      'title' => t('Administer user translation language access'),
+      'description' => t('administer user translation language access'),
+      'restrict access' => TRUE,
+    ),
   );
 }
 
@@ -107,7 +123,7 @@ function materio_translator_form_alter(&$form, &$form_state, $form_id) {
         '#type' => 'fieldset',
         '#title' => t('Translation access'),
         '#tree' => 0,
-        '#access' => user_access('administer users'),
+        '#access' => user_access('administer user translation language access'),
       );
       $form['materio_translator']['materio_translator'] = array(
         '#type' => 'checkboxes',
@@ -116,11 +132,8 @@ function materio_translator_form_alter(&$form, &$form_state, $form_id) {
         '#description' => t('The user get edit, delete access to all content which are in this enabled languages. Create, view access needs a different access level.'),
       );
     }
-
 }
 
-
-
 /**
  * Implements hook_menu().
  */
@@ -151,12 +164,11 @@ function materio_translator_admin_settings($form) {
   return system_settings_form($form);
 }
 
-
-//     _   __          __                                   _
-//    / | / /___  ____/ /__     ____ _   _____  ______   __(_)__ _      __
-//   /  |/ / __ \/ __  / _ \   / __ \ | / / _ \/ ___/ | / / / _ \ | /| / /
-//  / /|  / /_/ / /_/ /  __/  / /_/ / |/ /  __/ /   | |/ / /  __/ |/ |/ /
-// /_/ |_/\____/\__,_/\___/   \____/|___/\___/_/    |___/_/\___/|__/|__/
+//     __  ___                    ___    ____
+//    /  |/  /__  ____  __  __   /   |  / / /____  _____
+//   / /|_/ / _ \/ __ \/ / / /  / /| | / / __/ _ \/ ___/
+//  / /  / /  __/ / / / /_/ /  / ___ |/ / /_/  __/ /
+// /_/  /_/\___/_/ /_/\__,_/  /_/  |_/_/\__/\___/_/
 
 /**
  * Implements hook_menu_alter().
@@ -182,48 +194,95 @@ function materio_translator_menu_alter(&$items) {
       // dsm($pargs, "pargs");
 
       // change page callback for our own function
-      $items["node/%node/translate"]['page callback'] = "materio_translator_translation_node_overview";
+      $items[$path]['page callback'] = "materio_translator_translation_node_overview";
       // add our own page raguments
-      $items["node/%node/translate"]['page arguments'] = $pargs;
-      /*
-      original $item :
-      Array(
-        [title] =&gt; Translate
-        [page callback] =&gt; entity_translation_overview
-        [page arguments] =&gt; Array
-            (
-                [0] =&gt; node
-                [1] =&gt; 1
-                [2] =&gt; Array
-                    (
-                        [page callback] =&gt; i18n_node_translation_overview
-                        [file] =&gt; i18n_node.pages.inc
-                        [module] =&gt; i18n_node
-                    )
-
-                [3] =&gt; 1
-            )
-
-        [type] =&gt; 132
-        [weight] =&gt; 1
-        [context] =&gt; 3
-        [access callback] =&gt; entity_translation_node_tab_access
-        [access arguments] =&gt; Array
-            (
-                [0] =&gt; 1
-                [1] =&gt; _translation_tab_access
-                [2] =&gt; 1
-            )
-
-        [file] =&gt; entity_translation.admin.inc
-        [module] =&gt; entity_translation
-      )
-      */
+      $items[$path]['page arguments'] = $pargs;
+    }
+
+    // translation edit link
+    if(preg_match('/^node\/%node\/edit\/%entity_translation_language$/', $path)){
+      // dsm($item, $path);
+
+      // create new page arguments
+      $access_args = $item['access arguments'];
+      // dsm($access_args, 'access_args avt');
+      // add page call back for entity_translation call
+      // and memorize old page callback (i18n) for entity_translation call args
+      $access_args[3]['access callback'] = $item['access callback'];
+      $access_args[3]['file'] = 'entity_translation.node.inc';
+      $access_args[3]['module'] = 'entity_translation';
+      $access_args[3]['access arguments'] = $item['access arguments'];
+      // dsm($access_args, "access_args");
+
+      // change access callback for our own function
+      $items[$path]['access callback'] = 'materio_translator_node_edit_access';
+      // add our own page raguments
+      $items[$path]['access arguments'] = $access_args;
+      // dsm($access_args, 'access_args apr');
+
+      // dsm($items[$path], $path);
+    }
+
+    // translation add link
+    if(preg_match('/^node\/%node\/edit\/add\/%entity_translation_language/', $path)){
+      // dsm($item, $path);
+
     }
   }
 }
 
 
+function materio_translator_node_edit_access($entity_type, $entity, $langcode, $callback = null){
+  $args = func_get_args();
+  // dsm($args, '1 -- materio_translator_node_edit_access args');
+
+  // dsm($entity_type, "entity_type");
+  // dsm($entity, "entity");
+  // dsm($langcode, 'langcode');
+  // dsm($callback, "2 -- callback");
+
+  if (module_exists($callback['module'])) {
+    // dsm('module_exists');
+    if (isset($callback['file'])) {
+      $path = isset($callback['file path']) ? $callback['file path'] : drupal_get_path('module', $callback['module']);
+      // dsm($path, 'path');
+      require_once DRUPAL_ROOT . '/' . $path . '/' . $callback['file'];
+    }
+    // dsm($callback['access callback'], 'access callback');
+    $callback['access arguments'][1] = $entity;
+    $callback['access arguments'][2] = $langcode;
+    $callback['access arguments'][5] = $entity;
+    // dsm($callback['access arguments'], "callback['access arguments']");
+    $callbackaccess = call_user_func_array($callback['access callback'], $callback['access arguments']);
+    // dsm($callbackaccess, '3 -- callbackaccess');
+
+    if($callbackaccess){
+      global $user;
+      $perms = materio_translator_load_permissions($user->uid);
+      // dsm($perms, '4 -- perms');
+      // remove link if langcode not in perms
+      if(in_array($langcode, $perms)){
+        return true;
+      }
+    }
+    return false;
+  }
+
+
+  // $callbackaccess = call_user_func_array($callback['access callback'], $callback['access arguments']);
+
+  // return $callbackaccess;
+
+  return true;
+}
+
+
+//     _   __          __                                   _
+//    / | / /___  ____/ /__     ____ _   _____  ______   __(_)__ _      __
+//   /  |/ / __ \/ __  / _ \   / __ \ | / / _ \/ ___/ | / / / _ \ | /| / /
+//  / /|  / /_/ / /_/ /  __/  / /_/ / |/ /  __/ /   | |/ / /  __/ |/ |/ /
+// /_/ |_/\____/\__,_/\___/   \____/|___/\___/_/    |___/_/\___/|__/|__/
+
 /**
  * Implements hook_module_implements_alter().
  */
@@ -251,6 +310,7 @@ function materio_translator_module_implements_alter(&$implementations, $hook) {
  * @return array.
  */
 function materio_translator_translation_node_overview($entity_type, $entity, $callback = NULL) {
+  // dsm('materio_translator_translation_node_overview');
   // dsm($entity_type, "entity_type");
   // dsm($entity, "entity");
   // dsm($callback, "callback");
@@ -301,3 +361,113 @@ function materio_translator_overview_callback($callback) {
     return call_user_func_array($callback['page callback'], $callback['page arguments']);
   }
 }
+
+//     _   __          __        __
+//    / | / /___  ____/ /__     / /___ _____  ____ ___  ______ _____ ____
+//   /  |/ / __ \/ __  / _ \   / / __ `/ __ \/ __ `/ / / / __ `/ __ `/ _ \
+//  / /|  / /_/ / /_/ /  __/  / / /_/ / / / / /_/ / /_/ / /_/ / /_/ /  __/
+// /_/ |_/\____/\__,_/\___/  __/\__,_/_/ /_/\__, /\__,_/\__,_/\__, /\___/
+//    ________  / /__  _____/ /_(_)___  ___/____/            /____/
+//   / ___/ _ \/ / _ \/ ___/ __/ / __ \/ __ \
+//  (__  )  __/ /  __/ /__/ /_/ / /_/ / / / /
+// /____/\___/_/\___/\___/\__/_/\____/_/ /_/
+
+
+
+/**
+ * Implements hook_menu_local_tasks_alter().
+ */
+function materio_translator_menu_local_tasks_alter(&$data, $router_item, $root_path) {
+  // dsm($data, 'data');
+
+  global $user;
+  $perms = materio_translator_load_permissions($user->uid);
+
+  foreach ($data['tabs'] as $t => $tab) {
+    foreach ($tab['output'] as $l => $link) {
+      if($link['#language_tab']){
+        // dsm($link, $link["#link"]["title"]);
+        $langcode = $link["#link"]['localized_options']['language']->language;
+        if(!in_array($langcode, $perms)){
+          unset($data['tabs'][$t]['output'][$l]);
+        }
+        // dsm($data['tabs'][$t]['output'][$l]['#link']);
+      }
+    }
+  }
+}
+
+
+/**
+ * Implements hook_form_node_form_alter().
+ */
+function materio_translator_form_node_form_alter(&$form) {
+  $form['#after_build'][] = '_materio_translator_form_node_form_alter';
+}
+
+/**
+ * Unset's languages from language options if user does not have permission to
+ * use.
+ *
+ * @param $form
+ * @param $form_state
+ * @return mixed
+ */
+function _materio_translator_form_node_form_alter($form, &$form_state) {
+  if (isset($form['language']['#options']) && !user_access('bypass node access')) {
+    $perms = materio_translator_load_permissions();
+    foreach ($form['language']['#options'] as $key => $value) {
+      if (empty($perms[$key])) {
+        unset($form['language']['#options'][$key]);
+      }
+    }
+  }
+
+  return $form;
+}
+
+
+
+function materio_translator_node_tab_access(){
+  $args = func_get_args();
+  dsm($args, '1 -- materio_translator_node_tab_access args');
+
+  // dsm($entity_type, "entity_type");
+  // dsm($entity, "entity");
+  // dsm($langcode, 'langcode');
+  // dsm($callback, "2 -- callback");
+/*
+  if (module_exists($callback['module'])) {
+    // dsm('module_exists');
+    if (isset($callback['file'])) {
+      $path = isset($callback['file path']) ? $callback['file path'] : drupal_get_path('module', $callback['module']);
+      // dsm($path, 'path');
+      require_once DRUPAL_ROOT . '/' . $path . '/' . $callback['file'];
+    }
+    // dsm($callback['access callback'], 'access callback');
+    $callback['access arguments'][1] = $entity;
+    $callback['access arguments'][2] = $langcode;
+    $callback['access arguments'][5] = $entity;
+    // dsm($callback['access arguments'], "callback['access arguments']");
+    $callbackaccess = call_user_func_array($callback['access callback'], $callback['access arguments']);
+    // dsm($callbackaccess, '3 -- callbackaccess');
+
+    if($callbackaccess){
+      global $user;
+      $perms = materio_translator_load_permissions($user->uid);
+      // dsm($perms, '4 -- perms');
+      // remove link if langcode not in perms
+      if(in_array($langcode, $perms)){
+        return true;
+      }
+    }
+    return false;
+  }
+
+
+  // $callbackaccess = call_user_func_array($callback['access callback'], $callback['access arguments']);
+
+  // return $callbackaccess;
+*/
+  return true;
+}