1 var NodeForm = function($){
3 this.selectedTids = [];
4 this.formElementCssClasses = [];
7 NodeForm.prototype.getSelectedTids = function() {
10 for (var index = 0; index < this.formElementCssClasses.length; ++index) {
11 if (this.selectedTids[this.formElementCssClasses[index]] !== undefined && this.selectedTids[this.formElementCssClasses[index]].constructor === Array) {
13 this.selectedTids[this.formElementCssClasses[index]].forEach(function(tid){
22 NodeForm.prototype.addFormElementCssClass = function(formElementCssClass) {
23 this.formElementCssClasses.push(formElementCssClass);
27 NodeForm.prototype.keyExists = function(key, array) {
28 if (!array || (array.constructor !== Array && array.constructor !== Object)) {
31 for (var i = 0; i < array.length; i++) {
32 if (array[i] === key) {
39 NodeForm.prototype.addSelectedTid = function(tid, formElementCssClass) {
40 if (!this.keyExists(formElementCssClass, this.formElementCssClasses)) {
41 this.formElementCssClasses.push(formElementCssClass);
44 if (this.selectedTids[formElementCssClass] === undefined) {
46 this.selectedTids[formElementCssClass] = [];
49 this.selectedTids[formElementCssClass].push(tid);
52 NodeForm.prototype.removeTid = function(value, formElementCssClass) {
53 const index = this.selectedTids[formElementCssClass].indexOf(parseInt(value));
56 this.selectedTids[formElementCssClass].splice(index, 1);
60 NodeForm.prototype.resetData = function(formElementCssClass) {
61 this.selectedTids[formElementCssClass] = [];
64 NodeForm.prototype.computeFieldWrapperCSSClasses = function(fieldNames) {
65 var wrapperCssClasses = [];
67 for (var index = 0; index < fieldNames.length; ++index) {
68 var fieldWrapperClass = '.field--name-' + fieldNames[index].replace(/_/g, '-');
70 wrapperCssClasses.push(fieldWrapperClass);
73 return wrapperCssClasses;
76 NodeForm.prototype.displayPermissionsByCheckbox = function(tid, checked, permissions) {
77 if (checked === false) {
78 this.resetData('checkbox_tid_' + tid);
79 } else if (checked === true){
80 this.addSelectedTid(parseInt(tid), 'checkbox_tid_' + tid);
83 this.renderPermissionsInfo(permissions);
86 NodeForm.prototype.displayPermissionsBySelect = function(fieldWrapperCSSClasses, permissions) {
87 for (var index = 0; index < fieldWrapperCSSClasses.length; ++index) {
88 var inputTypes = ['select', 'input'];
90 var fieldWrapperCSSClass = fieldWrapperCSSClasses[index];
92 for (var inputTypesIndex = 0; inputTypesIndex <= inputTypes.length; inputTypesIndex++) {
93 var values = this.jQuery(fieldWrapperCSSClass + ' select').val();
95 if (values !== undefined && values !== null && values.constructor === Array) {
96 if (values[0] === '_none') {
97 this.resetData(fieldWrapperCSSClass);
100 for (var i = 0; i < values.length; ++i) {
101 if (isNaN(values[i]) === false) {
102 this.addSelectedTid(parseInt(values[i]), fieldWrapperCSSClass);
111 this.renderPermissionsInfo(permissions);
115 NodeForm.prototype.displayPermissionsByAutocomplete = function(fieldWrapperCSSClasses, permissions) {
116 for (var index = 0; index < fieldWrapperCSSClasses.length; ++index) {
117 var fieldWrapperCSSClass = fieldWrapperCSSClasses[index];
119 var values = this.jQuery(fieldWrapperCSSClass + ' input').val();
121 if (values !== undefined && values.indexOf('(') !== -1 && values.indexOf(')')) {
123 this.resetData(fieldWrapperCSSClass);
125 var tidsInBrackets = values.match(/\(\d+\)/g);
127 if (tidsInBrackets !== undefined && tidsInBrackets !== null && tidsInBrackets.constructor === Array) {
129 for (var i = 0; i < tidsInBrackets.length; ++i) {
130 var selectedTid = parseInt(tidsInBrackets[i].replace('(', '').replace(')', ''));
131 this.addSelectedTid(selectedTid, fieldWrapperCSSClass);
140 this.renderPermissionsInfo(permissions);
144 NodeForm.prototype.separateByComma = function(values) {
145 return values.join(', ');
148 NodeForm.prototype.renderPermissionsInfo = function(permissions) {
150 var permissionsToDisplay = this.getPermissionsByTids(this.getSelectedTids(), permissions);
152 var allowedUsersHtml = '<b>' + Drupal.t('Allowed users:') + '</b> ';
154 if (this.isAllowedUsersRestriction(permissionsToDisplay)) {
155 allowedUsersHtml += this.separateByComma(permissionsToDisplay['permittedUsers']);
157 allowedUsersHtml += '<i>' + Drupal.t('No user restrictions.') + '</i>';
160 var allowedRolesHtml = '<b>' + Drupal.t('Allowed roles:') + '</b> ';
162 if (this.isAllowedRolesRestriction(permissionsToDisplay)) {
163 allowedRolesHtml += this.separateByComma(permissionsToDisplay['permittedRoles']);
165 allowedRolesHtml += '<i>' + Drupal.t('No role restrictions.') + '</i>';;
168 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.");
170 this.jQuery('#edit-permissions-by-term-info .form-type-item').html(generalInfoText + '<br /><br />' + allowedUsersHtml + '<br />' + allowedRolesHtml);
173 NodeForm.prototype.isAllowedUsersRestriction = function(permissionsToDisplay) {
174 if (permissionsToDisplay['permittedUsers'].length > 0 && permissionsToDisplay['permittedUsers'] !== null) {
181 NodeForm.prototype.isAllowedRolesRestriction = function(permissionsToDisplay) {
182 if (permissionsToDisplay['permittedRoles'].length > 0 && permissionsToDisplay['permittedRoles'] !== null) {
189 NodeForm.prototype.pushUserDisplayNames = function(tids, permissionsToDisplay, permissions) {
190 for (var index = 0; index < tids.length; ++index) {
191 if (permissions['userDisplayNames'][tids[index]] !== undefined && permissions['userDisplayNames'][tids[index]] !== null &&
192 permissionsToDisplay['permittedUsers'].indexOf(permissions['userDisplayNames'][tids[index]]) === -1) {
194 var userDisplayNames = permissions['userDisplayNames'][tids[index]];
196 if (userDisplayNames.constructor === Array && userDisplayNames.length > 1) {
197 userDisplayNames.forEach(function(value){
198 if (permissionsToDisplay['permittedUsers'].indexOf(value) === -1) {
199 permissionsToDisplay['permittedUsers'].push(value);
203 if (permissionsToDisplay['permittedUsers'].indexOf(userDisplayNames) === -1) {
204 permissionsToDisplay['permittedUsers'].push(userDisplayNames);
210 return permissionsToDisplay;
213 NodeForm.prototype.pushRoles = function(tids, permissionsToDisplay, permissions) {
214 for (var index = 0; index < tids.length; ++index) {
216 if (permissions['roleLabels'] === undefined) {
217 return permissionsToDisplay;
220 if (permissions['roleLabels'][tids[index]] !== undefined && permissions['roleLabels'][tids[index]] !== null) {
221 permissions['roleLabels'][tids[index]].forEach(function(role){
222 if (permissionsToDisplay['permittedRoles'].indexOf(role) === -1) {
223 permissionsToDisplay['permittedRoles'].push(role);
229 return permissionsToDisplay;
232 NodeForm.prototype.getPermissionsByTids = function(tids, permissions) {
233 var permissionsToDisplay = {
238 permissionsToDisplay = this.pushRoles(tids, permissionsToDisplay, permissions);
239 permissionsToDisplay = this.pushUserDisplayNames(tids, permissionsToDisplay, permissions);
241 return permissionsToDisplay;