From 62d31b8d3be867ad066d70e889a6dca136aee1ee Mon Sep 17 00:00:00 2001
From: Romain Courteaud <romain@nexedi.com>
Date: Tue, 6 Mar 2018 17:20:50 +0000
Subject: [PATCH] [erp5_core/erp5_web_renderjs_ui] Update to jio 3.27.0

---
 .../web_page_module/rjs_jio_js.js             | 111 ++++++++++++++----
 .../web_page_module/rjs_jio_js.xml            |   4 +-
 .../portal_skins/erp5_core/jio.js.js          | 111 ++++++++++++++----
 3 files changed, 174 insertions(+), 52 deletions(-)

diff --git a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_jio_js.js b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_jio_js.js
index 21ed5ff08d..500a412879 100644
--- a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_jio_js.js
+++ b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_jio_js.js
@@ -7540,6 +7540,7 @@ return new Parser;
    * @param  {String} [param.dataType=""] The data type to retrieve
    * @param  {String} param.url The url
    * @param  {Any} [param.data] The data to send
+   * @param  {Number} param.timeout The request timeout value
    * @param  {Function} [param.beforeSend] A function called just before the
    *    send request. The first parameter of this function is the XHR object.
    * @return {Promise} The promise
@@ -7572,6 +7573,12 @@ return new Parser;
           }
         }
       }
+      if (param.timeout !== undefined && param.timeout !== 0) {
+        xhr.timeout = param.timeout;
+        xhr.ontimeout = function () {
+          return reject(new jIO.util.jIOError("Gateway Timeout", 504));
+        };
+      }
       if (typeof param.beforeSend === 'function') {
         param.beforeSend(xhr);
       }
@@ -7632,6 +7639,9 @@ return new Parser;
     if (obj === undefined) {
       return undefined;
     }
+    if (obj === null) {
+      return 'null';
+    }
     if (obj.constructor === Object) {
       key_list = Object.keys(obj).sort();
       result_list = [];
@@ -10528,6 +10538,8 @@ return new Parser;
     } else {
       this._catch_error = false;
     }
+    // If timeout not set, use 0 for no timeout value
+    this._timeout = spec.timeout || 0;
   }
 
   HttpStorage.prototype.get = function (id) {
@@ -10536,7 +10548,8 @@ return new Parser;
       .push(function () {
         return jIO.util.ajax({
           type: 'HEAD',
-          url: id
+          url: id,
+          timeout: context._timeout
         });
       })
       .push(undefined, function (error) {
@@ -10586,7 +10599,8 @@ return new Parser;
         return jIO.util.ajax({
           type: 'GET',
           url: id,
-          dataType: "blob"
+          dataType: "blob",
+          timeout: context._timeout
         });
       })
       .push(undefined, function (error) {
@@ -12142,12 +12156,26 @@ return new Parser;
 
   function isSingleLocalRoles(parsed_query) {
     if ((parsed_query instanceof SimpleQuery) &&
+        (parsed_query.operator === undefined) &&
         (parsed_query.key === 'local_roles')) {
       // local_roles:"Assignee"
       return parsed_query.value;
     }
   }
 
+  function isSingleDomain(parsed_query) {
+    if ((parsed_query instanceof SimpleQuery) &&
+        (parsed_query.operator === undefined) &&
+        (parsed_query.key !== undefined) &&
+        (parsed_query.key.indexOf('selection_domain_') === 0)) {
+      // domain_region:"europe/france"
+      var result = {};
+      result[parsed_query.key.slice('selection_domain_'.length)] =
+        parsed_query.value;
+      return result;
+    }
+  }
+
   function isMultipleLocalRoles(parsed_query) {
     var i,
       sub_query,
@@ -12159,6 +12187,7 @@ return new Parser;
       for (i = 0; i < parsed_query.query_list.length; i += 1) {
         sub_query = parsed_query.query_list[i];
         if ((sub_query instanceof SimpleQuery) &&
+            (sub_query.key !== undefined) &&
             (sub_query.key === 'local_roles')) {
           local_role_list.push(sub_query.value);
         } else {
@@ -12182,49 +12211,76 @@ return new Parser;
       .push(function (site_hal) {
         var query = options.query,
           i,
+          key,
           parsed_query,
           sub_query,
           result_list,
           local_roles,
+          local_role_found = false,
+          selection_domain,
           sort_list = [];
         if (options.query) {
           parsed_query = jIO.QueryFactory.create(options.query);
-
           result_list = isSingleLocalRoles(parsed_query);
           if (result_list) {
             query = undefined;
             local_roles = result_list;
           } else {
-
-            result_list = isMultipleLocalRoles(parsed_query);
+            result_list = isSingleDomain(parsed_query);
             if (result_list) {
               query = undefined;
-              local_roles = result_list;
-            } else if ((parsed_query instanceof ComplexQuery) &&
-                       (parsed_query.operator === 'AND')) {
-
-              // portal_type:"Person" AND local_roles:"Assignee"
-              for (i = 0; i < parsed_query.query_list.length; i += 1) {
-                sub_query = parsed_query.query_list[i];
-
-                result_list = isSingleLocalRoles(sub_query);
-                if (result_list) {
-                  local_roles = result_list;
-                  parsed_query.query_list.splice(i, 1);
-                  query = jIO.Query.objectToSearchText(parsed_query);
-                  i = parsed_query.query_list.length;
-                } else {
-                  result_list = isMultipleLocalRoles(sub_query);
+              selection_domain = result_list;
+            } else {
+
+              result_list = isMultipleLocalRoles(parsed_query);
+              if (result_list) {
+                query = undefined;
+                local_roles = result_list;
+              } else if ((parsed_query instanceof ComplexQuery) &&
+                         (parsed_query.operator === 'AND')) {
+
+                // portal_type:"Person" AND local_roles:"Assignee"
+                // AND selection_domain_region:"europe/france"
+                for (i = 0; i < parsed_query.query_list.length; i += 1) {
+                  sub_query = parsed_query.query_list[i];
+
+                  if (!local_role_found) {
+                    result_list = isSingleLocalRoles(sub_query);
+                    if (result_list) {
+                      local_roles = result_list;
+                      parsed_query.query_list.splice(i, 1);
+                      query = jIO.Query.objectToSearchText(parsed_query);
+                      local_role_found = true;
+                    } else {
+                      result_list = isMultipleLocalRoles(sub_query);
+                      if (result_list) {
+                        local_roles = result_list;
+                        parsed_query.query_list.splice(i, 1);
+                        query = jIO.Query.objectToSearchText(parsed_query);
+                        local_role_found = true;
+                      }
+                    }
+                  }
+
+                  result_list = isSingleDomain(sub_query);
                   if (result_list) {
-                    local_roles = result_list;
                     parsed_query.query_list.splice(i, 1);
                     query = jIO.Query.objectToSearchText(parsed_query);
-                    i = parsed_query.query_list.length;
+                    if (selection_domain) {
+                      for (key in result_list) {
+                        if (result_list.hasOwnProperty(key)) {
+                          selection_domain[key] = result_list[key];
+                        }
+                      }
+                    } else {
+                      selection_domain = result_list;
+                    }
+                    i -= 1;
                   }
+
                 }
               }
             }
-
           }
         }
 
@@ -12234,6 +12290,10 @@ return new Parser;
           }
         }
 
+        if (selection_domain) {
+          selection_domain = JSON.stringify(selection_domain);
+        }
+
         return jIO.util.ajax({
           "type": "GET",
           "url": UriTemplate.parse(site_hal._links.raw_search.href)
@@ -12243,7 +12303,8 @@ return new Parser;
               select_list: options.select_list || ["title", "reference"],
               limit: options.limit,
               sort_on: sort_list,
-              local_roles: local_roles
+              local_roles: local_roles,
+              selection_domain: selection_domain
             }),
           "xhrFields": {
             withCredentials: true
diff --git a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_jio_js.xml b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_jio_js.xml
index 43882e9131..fb1b9e5771 100644
--- a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_jio_js.xml
+++ b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_jio_js.xml
@@ -236,7 +236,7 @@
             </item>
             <item>
                 <key> <string>serial</string> </key>
-                <value> <string>963.22427.36654.49664</string> </value>
+                <value> <string>963.29105.23200.50073</string> </value>
             </item>
             <item>
                 <key> <string>state</string> </key>
@@ -254,7 +254,7 @@
                     </tuple>
                     <state>
                       <tuple>
-                        <float>1510318903.92</float>
+                        <float>1520356783.07</float>
                         <string>UTC</string>
                       </tuple>
                     </state>
diff --git a/product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/jio.js.js b/product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/jio.js.js
index 21ed5ff08d..500a412879 100644
--- a/product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/jio.js.js
+++ b/product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/jio.js.js
@@ -7540,6 +7540,7 @@ return new Parser;
    * @param  {String} [param.dataType=""] The data type to retrieve
    * @param  {String} param.url The url
    * @param  {Any} [param.data] The data to send
+   * @param  {Number} param.timeout The request timeout value
    * @param  {Function} [param.beforeSend] A function called just before the
    *    send request. The first parameter of this function is the XHR object.
    * @return {Promise} The promise
@@ -7572,6 +7573,12 @@ return new Parser;
           }
         }
       }
+      if (param.timeout !== undefined && param.timeout !== 0) {
+        xhr.timeout = param.timeout;
+        xhr.ontimeout = function () {
+          return reject(new jIO.util.jIOError("Gateway Timeout", 504));
+        };
+      }
       if (typeof param.beforeSend === 'function') {
         param.beforeSend(xhr);
       }
@@ -7632,6 +7639,9 @@ return new Parser;
     if (obj === undefined) {
       return undefined;
     }
+    if (obj === null) {
+      return 'null';
+    }
     if (obj.constructor === Object) {
       key_list = Object.keys(obj).sort();
       result_list = [];
@@ -10528,6 +10538,8 @@ return new Parser;
     } else {
       this._catch_error = false;
     }
+    // If timeout not set, use 0 for no timeout value
+    this._timeout = spec.timeout || 0;
   }
 
   HttpStorage.prototype.get = function (id) {
@@ -10536,7 +10548,8 @@ return new Parser;
       .push(function () {
         return jIO.util.ajax({
           type: 'HEAD',
-          url: id
+          url: id,
+          timeout: context._timeout
         });
       })
       .push(undefined, function (error) {
@@ -10586,7 +10599,8 @@ return new Parser;
         return jIO.util.ajax({
           type: 'GET',
           url: id,
-          dataType: "blob"
+          dataType: "blob",
+          timeout: context._timeout
         });
       })
       .push(undefined, function (error) {
@@ -12142,12 +12156,26 @@ return new Parser;
 
   function isSingleLocalRoles(parsed_query) {
     if ((parsed_query instanceof SimpleQuery) &&
+        (parsed_query.operator === undefined) &&
         (parsed_query.key === 'local_roles')) {
       // local_roles:"Assignee"
       return parsed_query.value;
     }
   }
 
+  function isSingleDomain(parsed_query) {
+    if ((parsed_query instanceof SimpleQuery) &&
+        (parsed_query.operator === undefined) &&
+        (parsed_query.key !== undefined) &&
+        (parsed_query.key.indexOf('selection_domain_') === 0)) {
+      // domain_region:"europe/france"
+      var result = {};
+      result[parsed_query.key.slice('selection_domain_'.length)] =
+        parsed_query.value;
+      return result;
+    }
+  }
+
   function isMultipleLocalRoles(parsed_query) {
     var i,
       sub_query,
@@ -12159,6 +12187,7 @@ return new Parser;
       for (i = 0; i < parsed_query.query_list.length; i += 1) {
         sub_query = parsed_query.query_list[i];
         if ((sub_query instanceof SimpleQuery) &&
+            (sub_query.key !== undefined) &&
             (sub_query.key === 'local_roles')) {
           local_role_list.push(sub_query.value);
         } else {
@@ -12182,49 +12211,76 @@ return new Parser;
       .push(function (site_hal) {
         var query = options.query,
           i,
+          key,
           parsed_query,
           sub_query,
           result_list,
           local_roles,
+          local_role_found = false,
+          selection_domain,
           sort_list = [];
         if (options.query) {
           parsed_query = jIO.QueryFactory.create(options.query);
-
           result_list = isSingleLocalRoles(parsed_query);
           if (result_list) {
             query = undefined;
             local_roles = result_list;
           } else {
-
-            result_list = isMultipleLocalRoles(parsed_query);
+            result_list = isSingleDomain(parsed_query);
             if (result_list) {
               query = undefined;
-              local_roles = result_list;
-            } else if ((parsed_query instanceof ComplexQuery) &&
-                       (parsed_query.operator === 'AND')) {
-
-              // portal_type:"Person" AND local_roles:"Assignee"
-              for (i = 0; i < parsed_query.query_list.length; i += 1) {
-                sub_query = parsed_query.query_list[i];
-
-                result_list = isSingleLocalRoles(sub_query);
-                if (result_list) {
-                  local_roles = result_list;
-                  parsed_query.query_list.splice(i, 1);
-                  query = jIO.Query.objectToSearchText(parsed_query);
-                  i = parsed_query.query_list.length;
-                } else {
-                  result_list = isMultipleLocalRoles(sub_query);
+              selection_domain = result_list;
+            } else {
+
+              result_list = isMultipleLocalRoles(parsed_query);
+              if (result_list) {
+                query = undefined;
+                local_roles = result_list;
+              } else if ((parsed_query instanceof ComplexQuery) &&
+                         (parsed_query.operator === 'AND')) {
+
+                // portal_type:"Person" AND local_roles:"Assignee"
+                // AND selection_domain_region:"europe/france"
+                for (i = 0; i < parsed_query.query_list.length; i += 1) {
+                  sub_query = parsed_query.query_list[i];
+
+                  if (!local_role_found) {
+                    result_list = isSingleLocalRoles(sub_query);
+                    if (result_list) {
+                      local_roles = result_list;
+                      parsed_query.query_list.splice(i, 1);
+                      query = jIO.Query.objectToSearchText(parsed_query);
+                      local_role_found = true;
+                    } else {
+                      result_list = isMultipleLocalRoles(sub_query);
+                      if (result_list) {
+                        local_roles = result_list;
+                        parsed_query.query_list.splice(i, 1);
+                        query = jIO.Query.objectToSearchText(parsed_query);
+                        local_role_found = true;
+                      }
+                    }
+                  }
+
+                  result_list = isSingleDomain(sub_query);
                   if (result_list) {
-                    local_roles = result_list;
                     parsed_query.query_list.splice(i, 1);
                     query = jIO.Query.objectToSearchText(parsed_query);
-                    i = parsed_query.query_list.length;
+                    if (selection_domain) {
+                      for (key in result_list) {
+                        if (result_list.hasOwnProperty(key)) {
+                          selection_domain[key] = result_list[key];
+                        }
+                      }
+                    } else {
+                      selection_domain = result_list;
+                    }
+                    i -= 1;
                   }
+
                 }
               }
             }
-
           }
         }
 
@@ -12234,6 +12290,10 @@ return new Parser;
           }
         }
 
+        if (selection_domain) {
+          selection_domain = JSON.stringify(selection_domain);
+        }
+
         return jIO.util.ajax({
           "type": "GET",
           "url": UriTemplate.parse(site_hal._links.raw_search.href)
@@ -12243,7 +12303,8 @@ return new Parser;
               select_list: options.select_list || ["title", "reference"],
               limit: options.limit,
               sort_on: sort_list,
-              local_roles: local_roles
+              local_roles: local_roles,
+              selection_domain: selection_domain
             }),
           "xhrFields": {
             withCredentials: true
-- 
2.30.9