Search ext: Add option to format table cell as link in search display
[civicrm-core.git] / ext / search / ang / crmSearchDisplay / crmSearchDisplayTable.component.js
index 09fa60a56ff21b1e4f82ce5f64e6af66ff42b22b..6e190bb75576e581440a9e73c74a809a60caae20 100644 (file)
 
       $scope.formatResult = function(row, col) {
         var value = row[col.key];
-        return formatFieldValue(col, value);
+        return formatFieldValue(row, col, value);
       };
 
-      function formatFieldValue(col, value) {
-        var type = col.dataType;
+      function formatFieldValue(row, col, value) {
+        var type = col.dataType,
+          result = value;
         if (_.isArray(value)) {
           return _.map(value, function(val) {
             return formatFieldValue(col, val);
           }).join(', ');
         }
         if (value && (type === 'Date' || type === 'Timestamp') && /^\d{4}-\d{2}-\d{2}/.test(value)) {
-          return CRM.utils.formatDate(value, null, type === 'Timestamp');
+          result = CRM.utils.formatDate(value, null, type === 'Timestamp');
         }
         else if (type === 'Boolean' && typeof value === 'boolean') {
-          return value ? ts('Yes') : ts('No');
+          result = value ? ts('Yes') : ts('No');
         }
         else if (type === 'Money' && typeof value === 'number') {
-          return CRM.formatMoney(value);
+          result = CRM.formatMoney(value);
         }
-        return value;
+        result = _.escape(result);
+        if (col.link) {
+          result = '<a href="' + replaceTokens(col.link, row) + '">' + result + '</a>';
+        }
+        return result;
+      }
+
+      function replaceTokens(str, data) {
+        _.each(data, function(value, key) {
+          str = str.replace('[' + key + ']', value);
+        });
+        return str;
       }
 
       $scope.selectAllRows = function() {