Security update for permissions_by_term
[yaffs-website] / web / modules / contrib / permissions_by_term / js / node-form.prototype.js
diff --git a/web/modules/contrib/permissions_by_term/js/node-form.prototype.js b/web/modules/contrib/permissions_by_term/js/node-form.prototype.js
new file mode 100644 (file)
index 0000000..6d09956
--- /dev/null
@@ -0,0 +1,242 @@
+var NodeForm = function($){
+  this.jQuery = $;
+  this.selectedTids = [];
+  this.formElementCssClasses = [];
+};
+
+NodeForm.prototype.getSelectedTids = function() {
+  var tids = [];
+
+  for (var index = 0; index < this.formElementCssClasses.length; ++index) {
+    if (this.selectedTids[this.formElementCssClasses[index]] !== undefined && this.selectedTids[this.formElementCssClasses[index]].constructor === Array) {
+
+      this.selectedTids[this.formElementCssClasses[index]].forEach(function(tid){
+        tids.push(tid);
+      })
+    }
+  }
+
+  return tids;
+}
+
+NodeForm.prototype.addFormElementCssClass = function(formElementCssClass) {
+  this.formElementCssClasses.push(formElementCssClass);
+}
+
+
+NodeForm.prototype.keyExists = function(key, array) {
+  if (!array || (array.constructor !== Array && array.constructor !== Object)) {
+    return false;
+  }
+  for (var i = 0; i < array.length; i++) {
+    if (array[i] === key) {
+      return true;
+    }
+  }
+  return key in array;
+}
+
+NodeForm.prototype.addSelectedTid = function(tid, formElementCssClass) {
+  if (!this.keyExists(formElementCssClass, this.formElementCssClasses)) {
+    this.formElementCssClasses.push(formElementCssClass);
+  }
+
+  if (this.selectedTids[formElementCssClass] === undefined) {
+
+    this.selectedTids[formElementCssClass] = [];
+  }
+
+  this.selectedTids[formElementCssClass].push(tid);
+}
+
+NodeForm.prototype.removeTid = function(value, formElementCssClass) {
+  const index = this.selectedTids[formElementCssClass].indexOf(parseInt(value));
+
+  if (index !== -1) {
+    this.selectedTids[formElementCssClass].splice(index, 1);
+  }
+}
+
+NodeForm.prototype.resetData = function(formElementCssClass) {
+  this.selectedTids[formElementCssClass] = [];
+}
+
+NodeForm.prototype.computeFieldWrapperCSSClasses = function(fieldNames) {
+  var wrapperCssClasses = [];
+
+  for (var index = 0; index < fieldNames.length; ++index) {
+    var fieldWrapperClass = '.field--name-' + fieldNames[index].replace(/_/g, '-');
+
+    wrapperCssClasses.push(fieldWrapperClass);
+  }
+
+  return wrapperCssClasses;
+}
+
+NodeForm.prototype.displayPermissionsByCheckbox = function(tid, checked, permissions) {
+  if (checked === false) {
+    this.resetData('checkbox_tid_' + tid);
+  } else if (checked === true){
+    this.addSelectedTid(parseInt(tid), 'checkbox_tid_' + tid);
+  }
+
+  this.renderPermissionsInfo(permissions);
+}
+
+NodeForm.prototype.displayPermissionsBySelect = function(fieldWrapperCSSClasses, permissions) {
+  for (var index = 0; index < fieldWrapperCSSClasses.length; ++index) {
+    var inputTypes = ['select', 'input'];
+
+    var fieldWrapperCSSClass = fieldWrapperCSSClasses[index];
+
+    for (var inputTypesIndex = 0; inputTypesIndex <= inputTypes.length; inputTypesIndex++) {
+      var values = this.jQuery(fieldWrapperCSSClass + ' select').val();
+
+      if (values !== undefined && values !== null && values.constructor === Array) {
+        if (values[0] === '_none') {
+          this.resetData(fieldWrapperCSSClass);
+        }
+
+        for (var i = 0; i < values.length; ++i) {
+          if (isNaN(values[i]) === false) {
+            this.addSelectedTid(parseInt(values[i]), fieldWrapperCSSClass);
+          }
+        }
+      }
+
+    }
+
+  }
+
+  this.renderPermissionsInfo(permissions);
+
+}
+
+NodeForm.prototype.displayPermissionsByAutocomplete = function(fieldWrapperCSSClasses, permissions) {
+  for (var index = 0; index < fieldWrapperCSSClasses.length; ++index) {
+    var fieldWrapperCSSClass = fieldWrapperCSSClasses[index];
+
+    var values = this.jQuery(fieldWrapperCSSClass + ' input').val();
+
+    if (values !== undefined && values.indexOf('(') !== -1 && values.indexOf(')')) {
+
+      this.resetData(fieldWrapperCSSClass);
+
+      var tidsInBrackets = values.match(/\(\d+\)/g);
+
+      if (tidsInBrackets !== undefined && tidsInBrackets !== null && tidsInBrackets.constructor === Array) {
+
+        for (var i = 0; i < tidsInBrackets.length; ++i) {
+          var selectedTid = parseInt(tidsInBrackets[i].replace('(', '').replace(')', ''));
+          this.addSelectedTid(selectedTid, fieldWrapperCSSClass);
+        }
+
+      }
+
+    }
+
+  }
+
+  this.renderPermissionsInfo(permissions);
+
+}
+
+NodeForm.prototype.separateByComma = function(values) {
+  return values.join(', ');
+}
+
+NodeForm.prototype.renderPermissionsInfo = function(permissions) {
+
+  var permissionsToDisplay = this.getPermissionsByTids(this.getSelectedTids(), permissions);
+
+  var allowedUsersHtml = '<b>' + Drupal.t('Allowed users:') + '</b> ';
+
+  if (this.isAllowedUsersRestriction(permissionsToDisplay)) {
+    allowedUsersHtml += this.separateByComma(permissionsToDisplay['permittedUsers']);
+  } else {
+    allowedUsersHtml += '<i>' + Drupal.t('No user restrictions.') + '</i>';
+  }
+
+  var allowedRolesHtml = '<b>' + Drupal.t('Allowed roles:') + '</b> ';
+
+  if (this.isAllowedRolesRestriction(permissionsToDisplay)) {
+    allowedRolesHtml += this.separateByComma(permissionsToDisplay['permittedRoles']);
+  } else {
+    allowedRolesHtml += '<i>' + Drupal.t('No role restrictions.') + '</i>';;
+  }
+
+  var generalInfoText = Drupal.t("This widget shows information about taxonomy term related permissions. It's being updated, as soon you make any related changes in the form.");
+
+  this.jQuery('#edit-permissions-by-term-info .form-type-item').html(generalInfoText + '<br /><br />' + allowedUsersHtml + '<br />' + allowedRolesHtml);
+}
+
+NodeForm.prototype.isAllowedUsersRestriction = function(permissionsToDisplay) {
+  if (permissionsToDisplay['permittedUsers'].length > 0 && permissionsToDisplay['permittedUsers'] !== null) {
+    return true;
+  }
+
+  return false;
+}
+
+NodeForm.prototype.isAllowedRolesRestriction = function(permissionsToDisplay) {
+  if (permissionsToDisplay['permittedRoles'].length > 0 && permissionsToDisplay['permittedRoles'] !== null) {
+    return true;
+  }
+
+  return false;
+}
+
+NodeForm.prototype.pushUserDisplayNames = function(tids, permissionsToDisplay, permissions) {
+  for (var index = 0; index < tids.length; ++index) {
+    if (permissions['userDisplayNames'][tids[index]] !== undefined && permissions['userDisplayNames'][tids[index]] !== null &&
+        permissionsToDisplay['permittedUsers'].indexOf(permissions['userDisplayNames'][tids[index]]) === -1) {
+
+      var userDisplayNames = permissions['userDisplayNames'][tids[index]];
+
+      if (userDisplayNames.constructor === Array && userDisplayNames.length > 1) {
+        userDisplayNames.forEach(function(value){
+          if (permissionsToDisplay['permittedUsers'].indexOf(value) === -1) {
+            permissionsToDisplay['permittedUsers'].push(value);
+          }
+        });
+      } else {
+        if (permissionsToDisplay['permittedUsers'].indexOf(userDisplayNames) === -1) {
+          permissionsToDisplay['permittedUsers'].push(userDisplayNames);
+        }
+      }
+    }
+  }
+
+  return permissionsToDisplay;
+}
+
+NodeForm.prototype.pushRoles = function(tids, permissionsToDisplay, permissions) {
+  for (var index = 0; index < tids.length; ++index) {
+
+    if (permissions['roleLabels'] === undefined) {
+      return permissionsToDisplay;
+    }
+
+    if (permissions['roleLabels'][tids[index]] !== undefined && permissions['roleLabels'][tids[index]] !== null) {
+      permissions['roleLabels'][tids[index]].forEach(function(role){
+        if (permissionsToDisplay['permittedRoles'].indexOf(role) === -1) {
+          permissionsToDisplay['permittedRoles'].push(role);
+        }
+      });
+    }
+  }
+
+  return permissionsToDisplay;
+}
+
+NodeForm.prototype.getPermissionsByTids = function(tids, permissions) {
+  var permissionsToDisplay = {
+    permittedUsers: [],
+    permittedRoles: []
+  };
+
+  permissionsToDisplay = this.pushRoles(tids, permissionsToDisplay, permissions);
+  permissionsToDisplay = this.pushUserDisplayNames(tids, permissionsToDisplay, permissions);
+
+  return permissionsToDisplay;
+}