Merge pull request #19307 from eileenmcnaughton/534
[civicrm-core.git] / ext / search / ang / crmSearchAdmin.module.js
index e06b22339db9061c2307dff9f910a60ae4fe82f0..7e737d109667ce4f1cefade078762a2680608d1e 100644 (file)
         }
       }
       function parseExpr(expr) {
-        var result = {fn: null, modifier: ''},
-          fieldName = expr,
-          bracketPos = expr.indexOf('(');
+        if (!expr) {
+          return;
+        }
+        var splitAs = expr.split(' AS '),
+          info = {fn: null, modifier: ''},
+          fieldName = splitAs[0],
+          bracketPos = splitAs[0].indexOf('(');
         if (bracketPos >= 0) {
-          var parsed = expr.substr(bracketPos).match(/[ ]?([A-Z]+[ ]+)?([\w.:]+)/);
+          var parsed = splitAs[0].substr(bracketPos).match(/[ ]?([A-Z]+[ ]+)?([\w.:]+)/);
           fieldName = parsed[2];
-          result.fn = _.find(CRM.crmSearchAdmin.functions, {name: expr.substring(0, bracketPos)});
-          result.modifier = _.trim(parsed[1]);
+          info.fn = _.find(CRM.crmSearchAdmin.functions, {name: expr.substring(0, bracketPos)});
+          info.modifier = _.trim(parsed[1]);
         }
-        var fieldAndJoin = expr ? getFieldAndJoin(fieldName, searchEntity) : undefined;
-        if (fieldAndJoin.field) {
+        var fieldAndJoin = getFieldAndJoin(fieldName, searchEntity);
+        if (fieldAndJoin) {
           var split = fieldName.split(':'),
             prefixPos = split[0].lastIndexOf(fieldAndJoin.field.name);
-          result.path = split[0];
-          result.prefix = prefixPos > 0 ? result.path.substring(0, prefixPos) : '';
-          result.suffix = !split[1] ? '' : ':' + split[1];
-          result.field = fieldAndJoin.field;
-          result.join = fieldAndJoin.join;
+          info.path = split[0];
+          info.prefix = prefixPos > 0 ? info.path.substring(0, prefixPos) : '';
+          info.suffix = !split[1] ? '' : ':' + split[1];
+          info.field = fieldAndJoin.field;
+          info.join = fieldAndJoin.join;
+          info.alias = splitAs[1] || (info.fn ? info.fn.name + ':' + info.path + info.suffix : split[0]);
         }
-        return result;
+        return info;
       }
       return {
         getEntity: getEntity,