diff --git a/include/Webservices/EntityMeta.php b/include/Webservices/EntityMeta.php index 931b109f5bd7475b4c01d8a34a6f050c1acc9bf7..3a4e9e70211f31a69ebd3a46d68f3b2945152f5c 100644 --- a/include/Webservices/EntityMeta.php +++ b/include/Webservices/EntityMeta.php @@ -11,7 +11,7 @@ abstract class EntityMeta{ public static $RETRIEVE = "DetailView"; - public static $CREATE = "Save"; + public static $CREATE = "CreateView"; public static $UPDATE = "EditView"; public static $DELETE = "Delete"; diff --git a/layouts/v7/modules/Calendar/CalendarHeader.tpl b/layouts/v7/modules/Calendar/CalendarHeader.tpl index 0be4c487fe55a57ec8276393daabdf17df9b2cce..f5e3f08d757f88982f94364f23823a205c63f890 100644 --- a/layouts/v7/modules/Calendar/CalendarHeader.tpl +++ b/layouts/v7/modules/Calendar/CalendarHeader.tpl @@ -8,6 +8,7 @@ *************************************************************************************} {strip} + <input type="hidden" name="is_record_creation_allowed" id="is_record_creation_allowed" value="{$IS_CREATE_PERMITTED}"> <div class="col-sm-12 col-xs-12 module-action-bar clearfix"> <div class="module-action-content clearfix coloredBorderTop"> <div class="col-lg-5 col-md-5"> @@ -22,20 +23,22 @@ <div class="col-lg-7 col-md-7 pull-right"> <div id="appnav" class="navbar-right"> <ul class="nav navbar-nav"> - <li> - <button id="calendarview_basicaction_addevent" type="button" - class="btn addButton btn-default module-buttons cursorPointer" - onclick='Calendar_Calendar_Js.showCreateEventModal();'> - <div class="fa fa-plus" aria-hidden="true"></div> - {vtranslate('LBL_ADD_EVENT', $MODULE)} - </button> - <button id="calendarview_basicaction_addtask" type="button" - class="btn addButton btn-default module-buttons cursorPointer" - onclick='Calendar_Calendar_Js.showCreateTaskModal();'> - <div class="fa fa-plus" aria-hidden="true"></div> - {vtranslate('LBL_ADD_TASK', $MODULE)} - </button> - </li> + {if $IS_CREATE_PERMITTED} + <li> + <button id="calendarview_basicaction_addevent" type="button" + class="btn addButton btn-default module-buttons cursorPointer" + onclick='Calendar_Calendar_Js.showCreateEventModal();'> + <div class="fa fa-plus" aria-hidden="true"></div> + {vtranslate('LBL_ADD_EVENT', $MODULE)} + </button> + <button id="calendarview_basicaction_addtask" type="button" + class="btn addButton btn-default module-buttons cursorPointer" + onclick='Calendar_Calendar_Js.showCreateTaskModal();'> + <div class="fa fa-plus" aria-hidden="true"></div> + {vtranslate('LBL_ADD_TASK', $MODULE)} + </button> + </li> + {/if} {if $MODULE_SETTING_ACTIONS|@count gt 0} <li> <div class="settingsIcon"> diff --git a/layouts/v7/modules/Calendar/ListViewRecordActions.tpl b/layouts/v7/modules/Calendar/ListViewRecordActions.tpl index c50c9388efdf6f73e7e0443ed0cbd3071358f293..a70c546cd7f4794b7f7cdaed1df82965bcefa01d 100644 --- a/layouts/v7/modules/Calendar/ListViewRecordActions.tpl +++ b/layouts/v7/modules/Calendar/ListViewRecordActions.tpl @@ -27,7 +27,7 @@ {if $IS_MODULE_EDITABLE && $EDIT_VIEW_URL && $LISTVIEW_ENTRY->get('taskstatus') neq vtranslate('Held', $MODULE) && $LISTVIEW_ENTRY->get('taskstatus') neq vtranslate('Completed', $MODULE)} <span class="fa fa-check icon action" title="{vtranslate('LBL_MARK_AS_HELD', $MODULE)}" onclick="Calendar_Calendar_Js.markAsHeld('{$LISTVIEW_ENTRY->getId()}');"></span> {/if} - {if $IS_MODULE_EDITABLE && $EDIT_VIEW_URL && $LISTVIEW_ENTRY->get('taskstatus') eq vtranslate('Held', $MODULE)} + {if $IS_RECORD_CREATABLE && $EDIT_VIEW_URL && $LISTVIEW_ENTRY->get('taskstatus') eq vtranslate('Held', $MODULE)} <span class="fa fa-flag icon action" title="{vtranslate('LBL_HOLD_FOLLOWUP_ON', "Events")}" onclick="Calendar_Calendar_Js.holdFollowUp('{$LISTVIEW_ENTRY->getId()}');"></span> {/if} <span class="more dropdown action"> diff --git a/layouts/v7/modules/Calendar/TaskManagement.tpl b/layouts/v7/modules/Calendar/TaskManagement.tpl index 91c7b0caff1b9d43ab8f5cbb9272f28630142c5d..c80bf5d381fb9c6b3e65611a98d92286ecccf412 100644 --- a/layouts/v7/modules/Calendar/TaskManagement.tpl +++ b/layouts/v7/modules/Calendar/TaskManagement.tpl @@ -58,12 +58,14 @@ </div> <br> <div class="{strtolower($PRIORITY)}-content content" data-priority='{$PRIORITY}' style="border-bottom: 1px solid {$COLORS[$PRIORITY]};padding-bottom: 10px"> - <div class="input-group"> - <input type="text" class="form-control taskSubject {$PRIORITY}" placeholder="{vtranslate('LBL_ADD_TASK_AND_PRESS_ENTER', $MODULE)}" aria-describedby="basic-addon1" style="width: 99%"> - <span class="quickTask input-group-addon js-task-popover-container more cursorPointer" id="basic-addon1" style="border: 1px solid #ddd; padding: 0 13px;"> - <a href="#" id="taskPopover" priority='{$PRIORITY}'><i class="fa fa-plus icon"></i></a> - </span> - </div> + {if $USER_PRIVILEGES_MODEL->hasModuleActionPermission($MODULE_MODEL->getId(), 'CreateView')} + <div class="input-group"> + <input type="text" class="form-control taskSubject {$PRIORITY}" placeholder="{vtranslate('LBL_ADD_TASK_AND_PRESS_ENTER', $MODULE)}" aria-describedby="basic-addon1" style="width: 99%"> + <span class="quickTask input-group-addon js-task-popover-container more cursorPointer" id="basic-addon1" style="border: 1px solid #ddd; padding: 0 13px;"> + <a href="#" id="taskPopover" priority='{$PRIORITY}'><i class="fa fa-plus icon"></i></a> + </span> + </div> + {/if} <br> <div class='{strtolower($PRIORITY)}-entries container-fluid scrollable dataEntries padding20' style="height:400px;overflow:auto;width:400px;padding-left: 0px;padding-right: 0px;"> diff --git a/layouts/v7/modules/Calendar/resources/Calendar.js b/layouts/v7/modules/Calendar/resources/Calendar.js index 105a62c7e0169864ad001cc310e280b9049f1b8b..7e66fecf038355863c869b7a9f85b7c9193627b6 100644 --- a/layouts/v7/modules/Calendar/resources/Calendar.js +++ b/layouts/v7/modules/Calendar/resources/Calendar.js @@ -1070,26 +1070,29 @@ Vtiger.Class("Calendar_Calendar_Js", { startDateElement.trigger('change'); }, showCreateModal: function (moduleName, startDateTime) { - var thisInstance = this; - var quickCreateNode = jQuery('#quickCreateModules').find('[data-name="' + moduleName + '"]'); - if (quickCreateNode.length <= 0) { - app.helper.showAlertNotification({ - 'message': app.vtranslate('JS_NO_CREATE_OR_NOT_QUICK_CREATE_ENABLED') + var isAllowed = jQuery('#is_record_creation_allowed').val(); + if (isAllowed) { + var thisInstance = this; + var quickCreateNode = jQuery('#quickCreateModules').find('[data-name="' + moduleName + '"]'); + if (quickCreateNode.length <= 0) { + app.helper.showAlertNotification({ + 'message': app.vtranslate('JS_NO_CREATE_OR_NOT_QUICK_CREATE_ENABLED') + }); + } else { + quickCreateNode.trigger('click'); + } + + app.event.one('post.QuickCreateForm.show', function (e, form) { + thisInstance.performingDayClickOperation = false; + var modalContainer = form.closest('.modal'); + if (typeof startDateTime !== 'undefined' && startDateTime) { + thisInstance.setStartDateTime(modalContainer, startDateTime); + } + if (moduleName === 'Events') { + thisInstance.registerCreateEventModalEvents(form.closest('.modal')); + } }); - } else { - quickCreateNode.trigger('click'); } - - app.event.one('post.QuickCreateForm.show', function (e, form) { - thisInstance.performingDayClickOperation = false; - var modalContainer = form.closest('.modal'); - if (typeof startDateTime !== 'undefined' && startDateTime) { - thisInstance.setStartDateTime(modalContainer, startDateTime); - } - if (moduleName === 'Events') { - thisInstance.registerCreateEventModalEvents(form.closest('.modal')); - } - }); }, _updateAllOnCalendar: function (calendarModule) { var thisInstance = this; diff --git a/layouts/v7/modules/Documents/DocumentsRelatedList.tpl b/layouts/v7/modules/Documents/DocumentsRelatedList.tpl index 84e954b9b94b07ba5af1163599221401c716f652..830d094a601227549b53c5f79b43640dfde6215b 100644 --- a/layouts/v7/modules/Documents/DocumentsRelatedList.tpl +++ b/layouts/v7/modules/Documents/DocumentsRelatedList.tpl @@ -50,27 +50,29 @@ {/if} {if $RELATED_LINK->getLabel() eq 'Vtiger'} - <div class="col-sm-3"> - <div class="dropdown"> - <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"> - <span class="fa fa-plus" title="{vtranslate('LBL_NEW_DOCUMENT', $MODULE)}"></span> {vtranslate('LBL_NEW_DOCUMENT', $RELATED_MODULE_NAME)} <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - <li class="dropdown-header"><i class="fa fa-upload"></i> {vtranslate('LBL_FILE_UPLOAD', $RELATED_MODULE_NAME)}</li> - <li id="VtigerAction"> - <a href="javascript:Documents_Index_Js.uploadTo('Vtiger',{$PARENT_ID},'{$MODULE}')"> - <img style=" margin-top: -3px;margin-right: 4%;" title="Vtiger" alt="Vtiger" src="layouts/v7/skins//images/Vtiger.png"> - {vtranslate('LBL_TO_SERVICE', $RELATED_MODULE_NAME, {vtranslate('LBL_VTIGER', $RELATED_MODULE_NAME)})} - </a> - </li> - <li role="separator" class="divider"></li> - <li class="dropdown-header"><i class="fa fa-link"></i> {vtranslate('LBL_LINK_EXTERNAL_DOCUMENT', $RELATED_MODULE_NAME)}</li> - <li id="shareDocument"><a href="javascript:Documents_Index_Js.createDocument('E',{$PARENT_ID},'{$MODULE}')"> <i class="fa fa-external-link"></i> {vtranslate('LBL_FROM_SERVICE', $RELATED_MODULE_NAME, {vtranslate('LBL_FILE_URL', $RELATED_MODULE_NAME)})}</a></li> - <li role="separator" class="divider"></li> - <li id="createDocument"><a href="javascript:Documents_Index_Js.createDocument('W',{$PARENT_ID},'{$MODULE}')"><i class="fa fa-file-text"></i> {vtranslate('LBL_CREATE_NEW', $RELATED_MODULE_NAME, {vtranslate('SINGLE_Documents', $RELATED_MODULE_NAME)})}</a></li> - </ul> - </div> - </div> + {if $IS_CREATE_PERMITTED} + <div class="col-sm-3"> + <div class="dropdown"> + <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"> + <span class="fa fa-plus" title="{vtranslate('LBL_NEW_DOCUMENT', $MODULE)}"></span> {vtranslate('LBL_NEW_DOCUMENT', $RELATED_MODULE_NAME)} <span class="caret"></span> + </button> + <ul class="dropdown-menu"> + <li class="dropdown-header"><i class="fa fa-upload"></i> {vtranslate('LBL_FILE_UPLOAD', $RELATED_MODULE_NAME)}</li> + <li id="VtigerAction"> + <a href="javascript:Documents_Index_Js.uploadTo('Vtiger',{$PARENT_ID},'{$MODULE}')"> + <img style=" margin-top: -3px;margin-right: 4%;" title="Vtiger" alt="Vtiger" src="layouts/v7/skins//images/Vtiger.png"> + {vtranslate('LBL_TO_SERVICE', $RELATED_MODULE_NAME, {vtranslate('LBL_VTIGER', $RELATED_MODULE_NAME)})} + </a> + </li> + <li role="separator" class="divider"></li> + <li class="dropdown-header"><i class="fa fa-link"></i> {vtranslate('LBL_LINK_EXTERNAL_DOCUMENT', $RELATED_MODULE_NAME)}</li> + <li id="shareDocument"><a href="javascript:Documents_Index_Js.createDocument('E',{$PARENT_ID},'{$MODULE}')"> <i class="fa fa-external-link"></i> {vtranslate('LBL_FROM_SERVICE', $RELATED_MODULE_NAME, {vtranslate('LBL_FILE_URL', $RELATED_MODULE_NAME)})}</a></li> + <li role="separator" class="divider"></li> + <li id="createDocument"><a href="javascript:Documents_Index_Js.createDocument('W',{$PARENT_ID},'{$MODULE}')"><i class="fa fa-file-text"></i> {vtranslate('LBL_CREATE_NEW', $RELATED_MODULE_NAME, {vtranslate('SINGLE_Documents', $RELATED_MODULE_NAME)})}</a></li> + </ul> + </div> + </div> + {/if} {/if} {/foreach} diff --git a/layouts/v7/modules/Settings/Profiles/DeleteTransferForm.tpl b/layouts/v7/modules/Settings/Profiles/DeleteTransferForm.tpl index b031d16d0167957d1821dbdf0127b5aef2bc965b..373d9731e0fe734622f1de9101d5ec49fae374a2 100644 --- a/layouts/v7/modules/Settings/Profiles/DeleteTransferForm.tpl +++ b/layouts/v7/modules/Settings/Profiles/DeleteTransferForm.tpl @@ -9,38 +9,38 @@ {* modules/Settings/Profiles/views/DeleteAjax.php *} {strip} - <div class="modal-dialog modelContainer"'> - {assign var=HEADER_TITLE value={vtranslate('LBL_DELETE_PROFILE', $QUALIFIED_MODULE)}|cat:" - "|cat:{$RECORD_MODEL->getName()}} - {include file="ModalHeader.tpl"|vtemplate_path:$MODULE TITLE=$HEADER_TITLE} - <div class="modal-content"> - <form class="form-horizontal" id="DeleteModal" name="AddComment" method="post" action="index.php"> - <input type="hidden" name="module" value="{$MODULE}" /> - <input type="hidden" name="parent" value="Settings" /> - <input type="hidden" name="action" value="Delete" /> - <input type="hidden" name="record" id="record" value="{$RECORD_MODEL->getId()}" /> - <div name='massEditContent'> - <div class="modal-body"> - <div class="form-group"> - <label class="control-label fieldLabel col-sm-5">{vtranslate('LBL_TRANSFER_ROLES_TO_PROFILE',$QUALIFIED_MODULE)}</label> - <div class="controls fieldValue col-xs-6"> - <select id="transfer_record" name="transfer_record" class="select2 col-xs-9"> - <optgroup label="{vtranslate('LBL_PROFILES', $QUALIFIED_MODULE)}"> - {foreach from=$ALL_RECORDS item=PROFILE_MODEL} - {assign var=PROFILE_ID value=$PROFILE_MODEL->get('profileid')} - {if $PROFILE_ID neq $RECORD_MODEL->getId()} - <option value="{$PROFILE_ID}">{$PROFILE_MODEL->get('profilename')}</option> - {/if} - {/foreach} - </optgroup> - </select> - </div> - </div> - </div> - </div> - {include file='ModalFooter.tpl'|@vtemplate_path:$MODULE} - </form> - </div> - </div> + <div class="modal-dialog modelContainer"> + {assign var=HEADER_TITLE value={vtranslate('LBL_DELETE_PROFILE', $QUALIFIED_MODULE)}|cat:" - "|cat:{$RECORD_MODEL->getName()}} + {include file="ModalHeader.tpl"|vtemplate_path:$MODULE TITLE=$HEADER_TITLE} + <div class="modal-content"> + <form class="form-horizontal" id="DeleteModal" name="AddComment" method="post" action="index.php"> + <input type="hidden" name="module" value="{$MODULE}" /> + <input type="hidden" name="parent" value="Settings" /> + <input type="hidden" name="action" value="Delete" /> + <input type="hidden" name="record" id="record" value="{$RECORD_MODEL->getId()}" /> + <div name='massEditContent'> + <div class="modal-body"> + <div class="form-group"> + <label class="control-label fieldLabel col-sm-5">{vtranslate('LBL_TRANSFER_ROLES_TO_PROFILE',$QUALIFIED_MODULE)}</label> + <div class="controls fieldValue col-xs-6"> + <select id="transfer_record" name="transfer_record" class="select2 col-xs-9"> + <optgroup label="{vtranslate('LBL_PROFILES', $QUALIFIED_MODULE)}"> + {foreach from=$ALL_RECORDS item=PROFILE_MODEL} + {assign var=PROFILE_ID value=$PROFILE_MODEL->get('profileid')} + {if $PROFILE_ID neq $RECORD_MODEL->getId()} + <option value="{$PROFILE_ID}">{$PROFILE_MODEL->get('profilename')}</option> + {/if} + {/foreach} + </optgroup> + </select> + </div> + </div> + </div> + </div> + {include file='ModalFooter.tpl'|@vtemplate_path:$MODULE} + </form> + </div> + </div> {/strip} diff --git a/layouts/v7/modules/Settings/Profiles/DetailView.tpl b/layouts/v7/modules/Settings/Profiles/DetailView.tpl index 570c8750804b6da22359dd6fa71ac371d36b5324..552bee433865965947e96e052996ccfa67977792 100644 --- a/layouts/v7/modules/Settings/Profiles/DetailView.tpl +++ b/layouts/v7/modules/Settings/Profiles/DetailView.tpl @@ -10,213 +10,214 @@ {* START YOUR IMPLEMENTATION FROM BELOW. Use {debug} for information *} {strip} - <div class="detailViewContainer"> - <div class="col-lg-12 col-md-12 col-sm-12 col-sm-12 col-xs-12"> - <div class="detailViewTitle form-horizontal" id="profilePageHeader"> - <div class="clearfix row"> - <div class="col-sm-10 col-md-10 col-sm-10"> - <h4>{vtranslate('LBL_PROFILE_VIEW', $QUALIFIED_MODULE)}</h4> - </div> - <div class="col-sm-2"> - <div class="btn-group pull-right"> - <button class="btn btn-default " type="button" onclick='window.location.href = "{$RECORD_MODEL->getEditViewUrl()}"'>{vtranslate('LBL_EDIT',$QUALIFIED_MODULE)}</button> - </div> - </div> - </div> - <hr> - <br> - <div class="profileDetailView detailViewInfo"> - <div class="row form-group"> - <div class="col-lg-2 col-md-2 col-sm-2 control-label fieldLabel"> - <label>{vtranslate('LBL_PROFILE_NAME', $QUALIFIED_MODULE)}</label> - </div> - <div class="fieldValue col-lg-6 col-md-6 col-sm-12" name="profilename" id="profilename" value="{$RECORD_MODEL->getName()}"><strong>{$RECORD_MODEL->getName()}</strong></div> - </div> - <div class="row form-group"> - <div class="col-lg-2 col-md-2 col-sm-2 control-label fieldLabel"> - <label>{vtranslate('LBL_DESCRIPTION', $QUALIFIED_MODULE)}:</label> - </div> - <div class="fieldValue col-lg-6 col-md-6 col-sm-12" name="description" id="description"><strong>{$RECORD_MODEL->getDescription()}</strong></div> - </div> - <br> - {assign var="ENABLE_IMAGE_PATH" value="{vimage_path('Enable.png')}"} - {assign var="DISABLE_IMAGE_PATH" value="{vimage_path('Disable.png')}"} - {if $RECORD_MODEL->hasGlobalReadPermission()} - <div class="row"> - <div class="col-lg-offset-1 col-md-offset-1 col-sm-offset-1 col-lg-10 col-md-10 col-sm-10"> - <div> - <img class="alignMiddle" src="{if $RECORD_MODEL->hasGlobalReadPermission()}{$ENABLE_IMAGE_PATH}{else}{$DISABLE_IMAGE_PATH}{/if}" /> - {vtranslate('LBL_VIEW_ALL',$QUALIFIED_MODULE)} - <div class="input-info-addon"> - <i class="fa fa-info-circle"></i> - <span >{vtranslate('LBL_VIEW_ALL_DESC',$QUALIFIED_MODULE)}</span> - </div> - <div> - <img class="alignMiddle" src="{if $RECORD_MODEL->hasGlobalWritePermission()}{$ENABLE_IMAGE_PATH}{else}{$DISABLE_IMAGE_PATH}{/if}" /> - {vtranslate('LBL_EDIT_ALL',$QUALIFIED_MODULE)} - <div class="input-info-addon"> - <i class="fa fa-info-circle"></i> - <span>{vtranslate('LBL_EDIT_ALL_DESC',$QUALIFIED_MODULE)}</span> - </div> - </div> - </div> - </div> - </div> - {/if} - <br> - <div class="row"> - <div class="col-lg-offset-1 col-md-offset-1 col-sm-offset-1 col-lg-10 col-md-10 col-sm-10"> - <table class="table table-bordered"> - <thead> - <tr class='blockHeader'> - <th width="27%"> - {vtranslate('LBL_MODULES', $QUALIFIED_MODULE)} - </th> - <th width="11%"> - {'LBL_VIEW_PRVILIGE'|vtranslate:$QUALIFIED_MODULE} - </th> - <th width="12%"> - {'LBL_EDIT_PRVILIGE'|vtranslate:$QUALIFIED_MODULE} - </th> - <th width="11%"> - {'LBL_DELETE_PRVILIGE'|vtranslate:$QUALIFIED_MODULE} - </th> - <th width="39%" nowrap="nowrap"> - {'LBL_FIELD_AND_TOOL_PRIVILEGES'|vtranslate:$QUALIFIED_MODULE} - </th> - </tr> - </thead> - <tbody> - {foreach from=$RECORD_MODEL->getModulePermissions() key=TABID item=PROFILE_MODULE} - {assign var=IS_RESTRICTED_MODULE value=$RECORD_MODEL->isRestrictedModule($PROFILE_MODULE->getName())} - <tr> - <td> - <img src="{if $RECORD_MODEL->hasModulePermission($PROFILE_MODULE)}{$ENABLE_IMAGE_PATH}{else}{$DISABLE_IMAGE_PATH}{/if}"/> {$PROFILE_MODULE->get('label')|vtranslate:$PROFILE_MODULE->getName()} - </td> - {assign var="BASIC_ACTION_ORDER" value=array(2,0,1)} - {foreach from=$BASIC_ACTION_ORDER item=ACTION_ID} - <td> - {assign var="ACTION_MODEL" value=$ALL_BASIC_ACTIONS[$ACTION_ID]} - {if !$IS_RESTRICTED_MODULE && $ACTION_MODEL->isModuleEnabled($PROFILE_MODULE)} - <img style="margin-left: 40" src="{if $RECORD_MODEL->hasModuleActionPermission($PROFILE_MODULE, $ACTION_MODEL)}{$ENABLE_IMAGE_PATH}{else}{$DISABLE_IMAGE_PATH}{/if}" /> - {/if} - </td> - {/foreach} - <td> - {if ($PROFILE_MODULE->getFields() && $PROFILE_MODULE->isEntityModule()) || $PROFILE_MODULE->isUtilityActionEnabled()} - <div class="row"> - <span class="col-sm-4"> </span> - <span class="col-sm-4"> - <button type="button" data-handlerfor="fields" data-togglehandler="{$TABID}-fields" class="btn btn-sm btn-default" style="padding-right: 20px; padding-left: 20px;"> - <i class="fa fa-chevron-down"></i> - </button> - </span> - </div> - {/if} - </td> - </tr> - <tr class="hide"> - <td colspan="6" class="row" style="padding-left: 5%;padding-right: 5%"> - <div class="row" data-togglecontent="{$TABID}-fields" style="display: none"> - {if $PROFILE_MODULE->getFields() && $PROFILE_MODULE->isEntityModule()} - <div class="col-sm-12"> - <label class="pull-left"><strong>{vtranslate('LBL_FIELDS',$QUALIFIED_MODULE)}{if $MODULE_NAME eq 'Calendar'} {vtranslate('LBL_OF', $MODULE_NAME)} {vtranslate('LBL_TASKS', $MODULE_NAME)}{/if}</strong></label> - <div class="pull-right"> - <span class="mini-slider-control ui-slider" data-value="0"> - <a style="margin-top: 3px" class="ui-slider-handle"></a> - </span> - <span style="margin: 0 20px;">{vtranslate('LBL_INIVISIBLE',$QUALIFIED_MODULE)}</span> - <span class="mini-slider-control ui-slider" data-value="1"> - <a style="margin-top: 3px" class="ui-slider-handle"></a> - </span> - <span style="margin: 0 20px;">{vtranslate('LBL_READ_ONLY',$QUALIFIED_MODULE)}</span> - <span class="mini-slider-control ui-slider" data-value="2"> - <a style="margin-top: 3px" class="ui-slider-handle"></a> - </span> - <span style="margin: 0 14px;">{vtranslate('LBL_WRITE',$QUALIFIED_MODULE)}</span> - </div> - <div class="clearfix"></div> - </div> - <table class="table table-bordered"> - {assign var=COUNTER value=0} - {foreach from=$PROFILE_MODULE->getFields() key=FIELD_NAME item=FIELD_MODEL name="fields"} - {if $FIELD_MODEL->isActiveField() && $FIELD_MODEL->get('displaytype') neq '6'} - {assign var="FIELD_ID" value=$FIELD_MODEL->getId()} - {if $COUNTER % 3 == 0} - <tr> - {/if} - <td class="col-sm-4"> - {assign var="DATA_VALUE" value=$RECORD_MODEL->getModuleFieldPermissionValue($PROFILE_MODULE, $FIELD_MODEL)} - {if $DATA_VALUE eq 0} - <span class="mini-slider-control ui-slider col-sm-1" data-value="0" style="width: 0px;"> - <a style="margin-top: 4px;margin-left: -13px;" class="ui-slider-handle"></a> - </span> - {elseif $DATA_VALUE eq 1} - <span class="mini-slider-control ui-slider col-sm-1" data-value="1" style="width: 0px;"> - <a style="margin-top: 4px;margin-left: -13px;" class="ui-slider-handle"></a> - </span> - {else} - <span class="mini-slider-control ui-slider col-sm-1" data-value="2" style="width: 0px;"> - <a style="margin-top: 4px;margin-left: -13px;" class="ui-slider-handle"></a> - </span> - {/if} - <span class="col-sm-9" style="padding-right: 0px;"> - {vtranslate($FIELD_MODEL->get('label'), $PROFILE_MODULE->getName())} - {if $FIELD_MODEL->isMandatory()} - <span class="redColor">*</span> - {/if} - </span> - </td> - {if $smarty.foreach.fields.last OR ($COUNTER+1) % 3 == 0} - </tr> - {/if} - {assign var=COUNTER value=$COUNTER+1} - {/if} - {/foreach} - </table> - {/if} - </div> - </td> - </tr> - <tr class="hide"> - <td colspan="6" class="row" style="padding-left: 5%;padding-right: 5%"> - <div class="row" data-togglecontent="{$TABID}-fields" style="display: none"> - <div class="col-sm-12"> - <label class="themeTextColor font-x-large pull-left"><strong>{vtranslate('LBL_TOOLS',$QUALIFIED_MODULE)}</strong></label> - </div> - <table class="table table-bordered table-striped"> - {assign var=UTILITY_ACTION_COUNT value=0} - {assign var="ALL_UTILITY_ACTIONS_ARRAY" value=array()} - {foreach from=$ALL_UTILITY_ACTIONS item=ACTION_MODEL} - {if $ACTION_MODEL->isModuleEnabled($PROFILE_MODULE)} - {assign var="testArray" array_push($ALL_UTILITY_ACTIONS_ARRAY,$ACTION_MODEL)} - {/if} - {/foreach} - {foreach from=$ALL_UTILITY_ACTIONS_ARRAY item=ACTION_MODEL name="actions"} - {if $smarty.foreach.actions.index % 3 == 0} - <tr> - {/if} - {assign var=ACTION_ID value=$ACTION_MODEL->get('actionid')} - <td {if $smarty.foreach.actions.last && (($smarty.foreach.actions.index+1) % 3 neq 0)} - {assign var="index" value=($smarty.foreach.actions.index+1) % 3} - {assign var="colspan" value=4-$index} - colspan="{$colspan}" - {/if}><img class="alignMiddle" src="{if $RECORD_MODEL->hasModuleActionPermission($PROFILE_MODULE, $ACTION_ID)}{$ENABLE_IMAGE_PATH}{else}{$DISABLE_IMAGE_PATH}{/if}" /> {$ACTION_MODEL->getName()}</td> - {if $smarty.foreach.actions.last OR ($smarty.foreach.actions.index+1) % 3 == 0} - </div> - {/if} - {/foreach} - </table> - </div> - </td> - </tr> - {/foreach} - </tbody> - </table> - </div> - </div> - </div> - </div> - </div> - </div> - {/strip} \ No newline at end of file + <div class="detailViewContainer full-height"> + <div class="col-lg-12 col-md-12 col-sm-12 col-sm-12 col-xs-12 main-scroll"> + <div class="detailViewTitle form-horizontal" id="profilePageHeader"> + <div class="clearfix row"> + <div class="col-sm-10 col-md-10 col-sm-10"> + <h4>{vtranslate('LBL_PROFILE_VIEW', $QUALIFIED_MODULE)}</h4> + </div> + <div class="col-sm-2"> + <div class="btn-group pull-right"> + <button class="btn btn-default " type="button" onclick='window.location.href = "{$RECORD_MODEL->getEditViewUrl()}"'>{vtranslate('LBL_EDIT',$QUALIFIED_MODULE)}</button> + </div> + </div> + </div> + <hr> + <br> + <div class="profileDetailView detailViewInfo"> + <div class="row form-group"> + <div class="col-lg-2 col-md-2 col-sm-2 control-label fieldLabel"> + <label>{vtranslate('LBL_PROFILE_NAME', $QUALIFIED_MODULE)}</label> + </div> + <div class="fieldValue col-lg-6 col-md-6 col-sm-12" name="profilename" id="profilename" value="{$RECORD_MODEL->getName()}"><strong>{$RECORD_MODEL->getName()}</strong></div> + </div> + <div class="row form-group"> + <div class="col-lg-2 col-md-2 col-sm-2 control-label fieldLabel"> + <label>{vtranslate('LBL_DESCRIPTION', $QUALIFIED_MODULE)}:</label> + </div> + <div class="fieldValue col-lg-6 col-md-6 col-sm-12" name="description" id="description"><strong>{$RECORD_MODEL->getDescription()}</strong></div> + </div> + <br> + {assign var="ENABLE_IMAGE_PATH" value="{vimage_path('Enable.png')}"} + {assign var="DISABLE_IMAGE_PATH" value="{vimage_path('Disable.png')}"} + {if $RECORD_MODEL->hasGlobalReadPermission()} + <div class="row"> + <div class="col-lg-offset-1 col-md-offset-1 col-sm-offset-1 col-lg-10 col-md-10 col-sm-10"> + <div> + <img class="alignMiddle" src="{if $RECORD_MODEL->hasGlobalReadPermission()}{$ENABLE_IMAGE_PATH}{else}{$DISABLE_IMAGE_PATH}{/if}" /> + {vtranslate('LBL_VIEW_ALL',$QUALIFIED_MODULE)} + <div class="input-info-addon"> + <i class="fa fa-info-circle"></i> + <span >{vtranslate('LBL_VIEW_ALL_DESC',$QUALIFIED_MODULE)}</span> + </div> + <div> + <img class="alignMiddle" src="{if $RECORD_MODEL->hasGlobalWritePermission()}{$ENABLE_IMAGE_PATH}{else}{$DISABLE_IMAGE_PATH}{/if}" /> + {vtranslate('LBL_EDIT_ALL',$QUALIFIED_MODULE)} + <div class="input-info-addon"> + <i class="fa fa-info-circle"></i> + <span>{vtranslate('LBL_EDIT_ALL_DESC',$QUALIFIED_MODULE)}</span> + </div> + </div> + </div> + </div> + </div> + {/if} + <br> + <div class="row"> + <div class="col-lg-offset-1 col-md-offset-1 col-sm-offset-1 col-lg-10 col-md-10 col-sm-10"> + <table class="table table-bordered"> + <thead> + <tr class='blockHeader'> + <th width="27%" style="text-align: left !important"> + {vtranslate('LBL_MODULES', $QUALIFIED_MODULE)} + </th> + <th width="11%"> + {'LBL_VIEW_PRVILIGE'|vtranslate:$QUALIFIED_MODULE} + </th> + <th width="11%"> + {'LBL_CREATE'|vtranslate:$QUALIFIED_MODULE} + </th> + <th width="11%"> + {'LBL_EDIT'|vtranslate:$QUALIFIED_MODULE} + </th> + <th width="11%"> + {'LBL_DELETE_PRVILIGE'|vtranslate:$QUALIFIED_MODULE} + </th> + <th width="29%" nowrap="nowrap"> + {'LBL_FIELD_AND_TOOL_PRIVILEGES'|vtranslate:$QUALIFIED_MODULE} + </th> + </tr> + </thead> + <tbody> + {foreach from=$RECORD_MODEL->getModulePermissions() key=TABID item=PROFILE_MODULE} + {assign var=IS_RESTRICTED_MODULE value=$RECORD_MODEL->isRestrictedModule($PROFILE_MODULE->getName())} + <tr> + {assign var=MODULE_PERMISSION value=$RECORD_MODEL->hasModulePermission($PROFILE_MODULE)} + <td data-module-name='{$PROFILE_MODULE->getName()}' data-module-status='{$MODULE_PERMISSION}'> + <img src="{if $MODULE_PERMISSION}{$ENABLE_IMAGE_PATH}{else}{$DISABLE_IMAGE_PATH}{/if}"/> {$PROFILE_MODULE->get('label')|vtranslate:$PROFILE_MODULE->getName()} + </td> + {assign var="BASIC_ACTION_ORDER" value=array(2,3,0,1)} + {foreach from=$BASIC_ACTION_ORDER item=ACTION_ID} + {assign var="ACTION_MODEL" value=$ALL_BASIC_ACTIONS[$ACTION_ID]} + {assign var=MODULE_ACTION_PERMISSION value=$RECORD_MODEL->hasModuleActionPermission($PROFILE_MODULE, $ACTION_MODEL)} + <td data-action-state='{$ACTION_MODEL->getName()}' data-moduleaction-status='{$MODULE_ACTION_PERMISSION}' style="text-align: center;"> + {if !$IS_RESTRICTED_MODULE && $ACTION_MODEL->isModuleEnabled($PROFILE_MODULE)} + <img src="{if $MODULE_ACTION_PERMISSION}{$ENABLE_IMAGE_PATH}{else}{$DISABLE_IMAGE_PATH}{/if}" /> + {/if} + </td> + {/foreach} + <td class="textAlignCenter"> + {if ($PROFILE_MODULE->getFields() && $PROFILE_MODULE->isEntityModule()) || $PROFILE_MODULE->isUtilityActionEnabled()} + <button type="button" data-handlerfor="fields" data-togglehandler="{$TABID}-fields" class="btn btn-sm btn-default" style="padding-right: 20px; padding-left: 20px;"> + <i class="fa fa-chevron-down"></i> + </button> + {/if} + </td> + </tr> + <tr class="hide"> + <td colspan="6" class="row" style="padding-left: 5%;padding-right: 5%"> + <div class="row" data-togglecontent="{$TABID}-fields" style="display: none"> + {if $PROFILE_MODULE->getFields() && $PROFILE_MODULE->isEntityModule()} + <div class="col-sm-12"> + <label class="pull-left"><strong>{vtranslate('LBL_FIELDS',$QUALIFIED_MODULE)}{if $MODULE_NAME eq 'Calendar'} {vtranslate('LBL_OF', $MODULE_NAME)} {vtranslate('LBL_TASKS', $MODULE_NAME)}{/if}</strong></label> + <div class="pull-right"> + <span class="mini-slider-control ui-slider" data-value="0"> + <a style="margin-top: 3px" class="ui-slider-handle"></a> + </span> + <span style="margin: 0 20px;">{vtranslate('LBL_INIVISIBLE',$QUALIFIED_MODULE)}</span> + <span class="mini-slider-control ui-slider" data-value="1"> + <a style="margin-top: 3px" class="ui-slider-handle"></a> + </span> + <span style="margin: 0 20px;">{vtranslate('LBL_READ_ONLY',$QUALIFIED_MODULE)}</span> + <span class="mini-slider-control ui-slider" data-value="2"> + <a style="margin-top: 3px" class="ui-slider-handle"></a> + </span> + <span style="margin: 0 14px;">{vtranslate('LBL_WRITE',$QUALIFIED_MODULE)}</span> + </div> + <div class="clearfix"></div> + </div> + <table class="table table-bordered"> + {assign var=COUNTER value=0} + {foreach from=$PROFILE_MODULE->getFields() key=FIELD_NAME item=FIELD_MODEL name="fields"} + {if $FIELD_MODEL->isActiveField() && $FIELD_MODEL->get('displaytype') neq '6'} + {assign var="FIELD_ID" value=$FIELD_MODEL->getId()} + {if $COUNTER % 3 == 0} + <tr> + {/if} + <td class="col-sm-4"> + {assign var="DATA_VALUE" value=$RECORD_MODEL->getModuleFieldPermissionValue($PROFILE_MODULE, $FIELD_MODEL)} + {if $DATA_VALUE eq 0} + <span class="mini-slider-control ui-slider col-sm-1" data-value="0" data-range-input='{$FIELD_ID}' style="width: 0px;"> + <a style="margin-top: 4px;margin-left: -13px;" class="ui-slider-handle"></a> + </span> + {elseif $DATA_VALUE eq 1} + <span class="mini-slider-control ui-slider col-sm-1" data-value="1" data-range-input='{$FIELD_ID}' style="width: 0px;"> + <a style="margin-top: 4px;margin-left: -13px;" class="ui-slider-handle"></a> + </span> + {else} + <span class="mini-slider-control ui-slider col-sm-1" data-value="2" data-range-input='{$FIELD_ID}' style="width: 0px;"> + <a style="margin-top: 4px;margin-left: -13px;" class="ui-slider-handle"></a> + </span> + {/if} + <span class="col-sm-9" style="padding-right: 0px;"> + {vtranslate($FIELD_MODEL->get('label'), $PROFILE_MODULE->getName())} + {if $FIELD_MODEL->isMandatory()} + <span class="redColor">*</span> + {/if} + </span> + </td> + {if $smarty.foreach.fields.last OR ($COUNTER+1) % 3 == 0} + </tr> + {/if} + {assign var=COUNTER value=$COUNTER+1} + {/if} + {/foreach} + </table> + {/if} + </div> + </td> + </tr> + <tr class="hide"> + <td colspan="6" class="row" style="padding-left: 5%;padding-right: 5%"> + <div class="row" data-togglecontent="{$TABID}-fields" style="display: none"> + <div class="col-sm-12"> + <label class="themeTextColor font-x-large pull-left"><strong>{vtranslate('LBL_TOOLS',$QUALIFIED_MODULE)}</strong></label> + </div> + <table class="table table-bordered table-striped"> + {assign var=UTILITY_ACTION_COUNT value=0} + {assign var="ALL_UTILITY_ACTIONS_ARRAY" value=array()} + {foreach from=$ALL_UTILITY_ACTIONS item=ACTION_MODEL} + {if $ACTION_MODEL->isModuleEnabled($PROFILE_MODULE)} + {assign var="testArray" array_push($ALL_UTILITY_ACTIONS_ARRAY,$ACTION_MODEL)} + {/if} + {/foreach} + {foreach from=$ALL_UTILITY_ACTIONS_ARRAY item=ACTION_MODEL name="actions"} + {if $smarty.foreach.actions.index % 3 == 0} + <tr> + {/if} + {assign var=ACTION_ID value=$ACTION_MODEL->get('actionid')} + {assign var=ACTIONNAME_STATUS value=$RECORD_MODEL->hasModuleActionPermission($PROFILE_MODULE, $ACTION_ID)} + <td {if $smarty.foreach.actions.last && (($smarty.foreach.actions.index+1) % 3 neq 0)} + {assign var="index" value=($smarty.foreach.actions.index+1) % 3} + {assign var="colspan" value=4-$index} + colspan="{$colspan}" + {/if} data-action-name='{$ACTION_MODEL->getName()}' data-actionname-status='{$ACTIONNAME_STATUS}'><img class="alignMiddle" src="{if $ACTIONNAME_STATUS}{$ENABLE_IMAGE_PATH}{else}{$DISABLE_IMAGE_PATH}{/if}" /> {$ACTION_MODEL->getName()}</td> + {if $smarty.foreach.actions.last OR ($smarty.foreach.actions.index+1) % 3 == 0} + </div> + {/if} + {/foreach} + </table> + </div> + </td> + </tr> + {/foreach} + </tbody> + </table> + </div> + </div> + </div> + </div> + </div> + </div> +{/strip} \ No newline at end of file diff --git a/layouts/v7/modules/Settings/Profiles/EditView.tpl b/layouts/v7/modules/Settings/Profiles/EditView.tpl index b03cc8ce306a8914a9ab4c8de18880a69c15372c..ea09b3861b0e1afe0624b6c0fb4caaaad8187f56 100644 --- a/layouts/v7/modules/Settings/Profiles/EditView.tpl +++ b/layouts/v7/modules/Settings/Profiles/EditView.tpl @@ -10,65 +10,63 @@ {* START YOUR IMPLEMENTATION FROM BELOW. Use {debug} for information *} <div class="editViewPageDiv"> - <div class="col-sm-12 col-xs-12"> - <form class="form-horizontal" id="EditView" name="EditProfile" method="post" action="index.php" enctype="multipart/form-data"> - <div class="editViewHeader"> - {if $RECORD_MODEL->getId()} - <h4> - {vtranslate('LBL_EDIT_PROFILE', $QUALIFIED_MODULE)} - </h4> - {else} - <h4> - {vtranslate('LBL_CREATE_PROFILE', $QUALIFIED_MODULE)} - </h4> - {/if} - </div> - <hr> - <div class="editViewBody"> - <div class="editViewContents"> - <div id="submitParams"> - <input type="hidden" name="module" value="Profiles" /> - <input type="hidden" name="action" value="Save" /> - <input type="hidden" name="parent" value="Settings" /> - {assign var=RECORD_ID value=$RECORD_MODEL->getId()} - <input type="hidden" name="record" value="{$RECORD_ID}" /> - <input type="hidden" name="mode" value="{$MODE}" /> - <input type="hidden" name="viewall" value="0" /> - <input type="hidden" name="editall" value="0" /> - </div> + <div class="col-sm-12 col-xs-12 main-scroll"> + <form class="form-horizontal" id="EditView" name="EditProfile" method="post" action="index.php" enctype="multipart/form-data"> + <div class="editViewHeader"> + {if $RECORD_MODEL->getId()} + <h4> + {vtranslate('LBL_EDIT_PROFILE', $QUALIFIED_MODULE)} + </h4> + {else} + <h4> + {vtranslate('LBL_CREATE_PROFILE', $QUALIFIED_MODULE)} + </h4> + {/if} + </div> + <hr> + <div class="editViewBody"> + <div class="editViewContents"> + <div id="submitParams"> + <input type="hidden" name="module" value="Profiles" /> + <input type="hidden" name="action" value="Save" /> + <input type="hidden" name="parent" value="Settings" /> + {assign var=RECORD_ID value=$RECORD_MODEL->getId()} + <input type="hidden" name="record" value="{$RECORD_ID}" /> + <input type="hidden" name="mode" value="{$MODE}" /> + <input type="hidden" name="viewall" value="0" /> + <input type="hidden" name="editall" value="0" /> + </div> - <div name='editContent'> - <div class="row form-group"><div class="col-lg-3 col-md-3 col-sm-3 control-label fieldLabel"> - <label> - <strong>{vtranslate('LBL_PROFILE_NAME', $QUALIFIED_MODULE)}</strong> <span class="redColor">*</span>: - </label></div> - <div class="fieldValue col-lg-6 col-md-6 col-sm-6" > - <input type="text" class="inputElement" name="profilename" id="profilename" value="{$RECORD_MODEL->getName()}" data-rule-required="true" /> - </div> - </div> - <br> - <div class="row form-group"><div class="col-lg-3 col-md-3 col-sm-3 control-label fieldLabel"> - <label> - <strong>{vtranslate('LBL_DESCRIPTION', $QUALIFIED_MODULE)} : </strong> - </label></div> - <div class="fieldValue col-lg-6 col-md-6 col-sm-6"> - <textarea name="description" class="inputElement" id="description" style="resize: vertical;">{$RECORD_MODEL->getDescription()}</textarea> - </div> - </div> - <br> - - {include file='EditViewContents.tpl'|vtemplate_path:$QUALIFIED_MODULE} - </div> - </div> - </div> - <div class='modal-overlay-footer clearfix'> - <div class="row clearfix"> - <div class=' textAlignCenter col-lg-12 col-md-12 col-sm-12 '> - <button type='submit' class='btn btn-success saveButton' >{vtranslate('LBL_SAVE', $MODULE)}</button> - <a class='cancelLink' data-dismiss="modal" href="javascript:history.back()" type="reset">{vtranslate('LBL_CANCEL', $MODULE)}</a> - </div> - </div> - </div> - </form> - </div> + <div name='editContent'> + <div class="row form-group"><div class="col-lg-3 col-md-3 col-sm-3 control-label fieldLabel"> + <label> + <strong>{vtranslate('LBL_PROFILE_NAME', $QUALIFIED_MODULE)}</strong> <span class="redColor">*</span>: + </label></div> + <div class="fieldValue col-lg-6 col-md-6 col-sm-6" > + <input type="text" class="inputElement" name="profilename" id="profilename" value="{$RECORD_MODEL->getName()}" data-rule-required="true" /> + </div> + </div> + + <div class="row"><div class="col-lg-3 col-md-3 col-sm-3 control-label fieldLabel"> + <label> + <strong>{vtranslate('LBL_DESCRIPTION', $QUALIFIED_MODULE)} : </strong> + </label></div> + <div class="fieldValue col-lg-6 col-md-6 col-sm-6"> + <textarea name="description" class="inputElement" id="description" style="height:50px; resize: vertical;padding:5px 8px;">{$RECORD_MODEL->getDescription()}</textarea> + </div> + </div> + {include file='EditViewContents.tpl'|vtemplate_path:$QUALIFIED_MODULE} + </div> + </div> + </div> + <div class='modal-overlay-footer clearfix'> + <div class="row clearfix"> + <div class=' textAlignCenter col-lg-12 col-md-12 col-sm-12 '> + <button type='submit' class='btn btn-success saveButton' >{vtranslate('LBL_SAVE', $MODULE)}</button> + <a class='cancelLink' data-dismiss="modal" href="javascript:history.back()" type="reset">{vtranslate('LBL_CANCEL', $MODULE)}</a> + </div> + </div> + </div> + </form> + </div> </div> diff --git a/layouts/v7/modules/Settings/Profiles/EditViewContents.tpl b/layouts/v7/modules/Settings/Profiles/EditViewContents.tpl index 3ecf2e6c7a15f68e6fae8b4fddd4066fab3ef51c..7f9eafb6121803b6ba7890d7f8dabeb90f592ad2 100644 --- a/layouts/v7/modules/Settings/Profiles/EditViewContents.tpl +++ b/layouts/v7/modules/Settings/Profiles/EditViewContents.tpl @@ -9,253 +9,260 @@ {* modules/Settings/Profiles/views/EditAjax.php *} {if $SHOW_EXISTING_PROFILES} - {foreach key=index item=jsModel from=$SCRIPTS} - <script type="{$jsModel->getType()}" src="{$jsModel->getSrc()}"></script> - {/foreach} - <div class="row"> - <div class="col-lg-3 col-md-3 col-sm-3 control-label "> - <label class="fieldLabel"> - {vtranslate('LBL_COPY_PRIVILEGES_FROM',"Settings:Roles")} + {foreach key=index item=jsModel from=$SCRIPTS} + <script type="{$jsModel->getType()}" src="{$jsModel->getSrc()}"></script> + {/foreach} + <div class="row"> + <div class="col-lg-3 col-md-3 col-sm-3 control-label "> + <label class="fieldLabel"> + {vtranslate('LBL_COPY_PRIVILEGES_FROM',"Settings:Roles")} </label> - </div> - <div class="col-lg-6 col-md-6 col-sm-6"> - <select class="select2" id="directProfilePriviligesSelect" placeholder="{vtranslate('LBL_CHOOSE_PROFILES',$QUALIFIED_MODULE)}"> - <option></option> - {foreach from=$ALL_PROFILES item=PROFILE} - {if $PROFILE->isDirectlyRelated() eq false} - <option value="{$PROFILE->getId()}" {if $RECORD_ID eq $PROFILE->getId()} selected="" {/if} >{$PROFILE->getName()}</option> - {/if} - {/foreach} - </select> - </div> - </div> + </div> + <div class="col-lg-6 col-md-6 col-sm-6"> + <select class="select2" id="directProfilePriviligesSelect" placeholder="{vtranslate('LBL_CHOOSE_PROFILES',$QUALIFIED_MODULE)}"> + <option></option> + {foreach from=$ALL_PROFILES item=PROFILE} + {if $PROFILE->isDirectlyRelated() eq false} + <option value="{$PROFILE->getId()}" {if $RECORD_ID eq $PROFILE->getId()} selected="" {/if} >{$PROFILE->getName()}</option> + {/if} + {/foreach} + </select> + </div> + </div> {/if} <input type="hidden" name="viewall" value="0" /> <input type="hidden" name="editall" value="0" /> {if $RECORD_MODEL && $RECORD_MODEL->getId() && empty($IS_DUPLICATE_RECORD)} - {if $RECORD_MODEL->hasGlobalReadPermission() || $RECORD_MODEL->hasGlobalWritePermission()} - <div class="row"> - <div class="col-lg-3 col-md-3 col-sm-3"></div> - <div class="col-lg-7 col-md-7 col-sm-7"> - <label class="control-label"> - <input type="hidden" name="viewall" value="0" /> - <label class="control-label"> - <input class="listViewEntriesCheckBox" type="checkbox" name="viewall" {if $RECORD_MODEL->hasGlobalReadPermission()}checked="true"{/if} /> - {vtranslate('LBL_VIEW_ALL',$QUALIFIED_MODULE)} - </label> - <span style="margin-left: 10px"> - <i class="fa fa-info-circle"></i> - <label class="control-label">{vtranslate('LBL_VIEW_ALL_DESC',$QUALIFIED_MODULE)}</label> - </span> - </label> - <br> - <label class="control-label"> - <input type="hidden" name="editall" value="0" /> - <label class="control-label"> - <input class="listViewEntriesCheckBox" type="checkbox" name="editall" {if $RECORD_MODEL->hasGlobalReadPermission()}checked="true"{/if} /> - {vtranslate('LBL_EDIT_ALL',$QUALIFIED_MODULE)} - </label> - <span style="margin-left: 15px"> - <i class="fa fa-info-circle"></i> - <label class="control-label">{vtranslate('LBL_EDIT_ALL_DESC',$QUALIFIED_MODULE)}</label> - </span> - </label> - <br><br> - <span id="globalPermissionWarning" class="redColor">{vtranslate('LBL_GLOBAL_PERMISSION_WARNING',$QUALIFIED_MODULE)}</span> - </div> - </div> - {/if} + {if $RECORD_MODEL->hasGlobalReadPermission() || $RECORD_MODEL->hasGlobalWritePermission()} + <div class="row"> + <div class="col-lg-3 col-md-3 col-sm-3 fieldLabel"></div> + <div class="col-lg-6 col-md-6 col-sm-6"> + <label class="control-label"> + <input type="hidden" name="viewall" value="0" /> + <label class="control-label"> + <input class="listViewEntriesCheckBox" type="checkbox" name="viewall" {if $RECORD_MODEL->hasGlobalReadPermission()}checked="true"{/if} style="top: -2px;" /> + {vtranslate('LBL_VIEW_ALL',$QUALIFIED_MODULE)} + </label> + <span style="margin-left: 10px"> + <i class="fa fa-info-circle" title="{vtranslate('LBL_VIEW_ALL_DESC',$QUALIFIED_MODULE)}"></i> + </span> + </label> + <br> + <label class="control-label"> + <input type="hidden" name="editall" value="0" /> + <label class="control-label"> + <input class="listViewEntriesCheckBox" type="checkbox" name="editall" {if $RECORD_MODEL->hasGlobalReadPermission()}checked="true"{/if} style="top: -2px;"/> + {vtranslate('LBL_EDIT_ALL',$QUALIFIED_MODULE)} + </label> + <span style="margin-left: 15px"> + <i class="fa fa-info-circle" title="{vtranslate('LBL_EDIT_ALL_DESC',$QUALIFIED_MODULE)}"></i> + </span> + </label> + <br><br> + </div> + </div> + <div class="row"> + <div class="col-lg-3 col-md-3 col-sm-3 fieldLabel"></div> + <div class="col-lg-7 col-md-7 col-sm-7"> + <div class="alert alert-warning" style="width:85%"> + {vtranslate('LBL_GLOBAL_PERMISSION_WARNING',$QUALIFIED_MODULE)} + </div> + </div> + {/if} {/if} -<br> -<div class="row"> - <div class="col-lg-1 col-md-1 col-sm-1"></div> - <div class=" col-lg-10 col-md-10 col-sm-10"> - <h5>{vtranslate('LBL_EDIT_PRIVILEGES_OF_THIS_PROFILE',$QUALIFIED_MODULE)}</h5><br> - </div> +<div class="row col-lg-12 col-md-12 col-sm-12"> + <div class=" col-lg-10 col-md-10 col-sm-10"> + <h5>{vtranslate('LBL_EDIT_PRIVILEGES_OF_THIS_PROFILE',$QUALIFIED_MODULE)}</h5><br> + </div> </div> <div class="row"> - <div class="col-lg-1 col-md-1 col-sm-1"></div> - <div class=" col-lg-10 col-md-10 col-sm-10"> - <table class="table table-bordered profilesEditView"> - <thead> - <tr class="blockHeader"> - <th width="30%"> - <input checked="true" type="checkbox" id="mainModulesCheckBox" /> - {vtranslate('LBL_MODULES', $QUALIFIED_MODULE)} - </th> - <th class='textAlignCenter' width="14%"> - <input type="checkbox" {if empty($RECORD_ID) && empty($IS_DUPLICATE_RECORD)} checked="true" {/if} id="mainAction4CheckBox" /> - {'LBL_VIEW_PRVILIGE'|vtranslate:$QUALIFIED_MODULE} - </th> - <th class='textAlignCenter' width="14%"> - <input {if empty($RECORD_ID) && empty($IS_DUPLICATE_RECORD)} checked="true" {/if} type="checkbox" id="mainAction1CheckBox" /> - {'LBL_EDIT_PRVILIGE'|vtranslate:$QUALIFIED_MODULE} - </th> - <th class='textAlignCenter' width="14%"> - <input checked="true" type="checkbox" id="mainAction2CheckBox" /> - {'LBL_DELETE_PRVILIGE'|vtranslate:$QUALIFIED_MODULE} - </th> - <th class='textAlignCenter' width="28%" nowrap="nowrap"> - {'LBL_FIELD_AND_TOOL_PRIVILEGES'|vtranslate:$QUALIFIED_MODULE} - </th> - </tr> - </thead> - <tbody> - {assign var=PROFILE_MODULES value=$RECORD_MODEL->getModulePermissions()} - {foreach from=$PROFILE_MODULES key=TABID item=PROFILE_MODULE} - {assign var=MODULE_NAME value=$PROFILE_MODULE->getName()} - {if $MODULE_NAME neq 'Events'} - {assign var=IS_RESTRICTED_MODULE value=$RECORD_MODEL->isRestrictedModule($PROFILE_MODULE->getName())} - <tr> - <td> - <input class="modulesCheckBox" type="checkbox" name="permissions[{$TABID}][is_permitted]" data-value="{$TABID}" data-module-state="" {if $RECORD_MODEL->hasModulePermission($PROFILE_MODULE)}checked="true"{else} data-module-unchecked="true" {/if}> {$PROFILE_MODULE->get('label')|vtranslate:$PROFILE_MODULE->getName()} - </td> - {assign var="BASIC_ACTION_ORDER" value=array(2,0,1)} - {foreach from=$BASIC_ACTION_ORDER item=ORDERID} - <td > - {assign var="ACTION_MODEL" value=$ALL_BASIC_ACTIONS[$ORDERID]} - {assign var=ACTION_ID value=$ACTION_MODEL->get('actionid')} - {if !$IS_RESTRICTED_MODULE && $ACTION_MODEL->isModuleEnabled($PROFILE_MODULE)} - <input style="margin-left: 45% !important" class="action{$ACTION_ID}CheckBox" type="checkbox" name="permissions[{$TABID}][actions][{$ACTION_ID}]" data-action-state="{$ACTION_MODEL->getName()}" {if $RECORD_MODEL->hasModuleActionPermission($PROFILE_MODULE, $ACTION_MODEL)}checked="true"{elseif empty($RECORD_ID) && empty($IS_DUPLICATE_RECORD)} checked="true" {else} data-action{$ACTION_ID}-unchecked="true"{/if}></td> - {/if} - </td> - {/foreach} - <td > - {if ($PROFILE_MODULE->getFields() && $PROFILE_MODULE->isEntityModule() && $PROFILE_MODULE->isProfileLevelUtilityAllowed()) || $PROFILE_MODULE->isUtilityActionEnabled()} - <div class="row"> - <span class="col-sm-4"> </span> - <span class="col-sm-4"> - <button type="button" data-handlerfor="fields" data-togglehandler="{$TABID}-fields" class="btn btn-default btn-sm" style="padding-right: 20px; padding-left: 20px;"> - <i class="fa fa-chevron-down"></i> - </button> - </span> - </div> - {/if} - </td> - </tr> - <tr class="hide"> - <td colspan="6" class="row" style="padding-left: 5%;padding-right: 5%"> - <div class="row" data-togglecontent="{$TABID}-fields" style="display: none"> - {if $PROFILE_MODULE->getFields() && $PROFILE_MODULE->isEntityModule() } - <div class="col-sm-12"> - <label class="pull-left"><strong>{vtranslate('LBL_FIELDS',$QUALIFIED_MODULE)}{if $MODULE_NAME eq 'Calendar'} {vtranslate('LBL_OF', $MODULE_NAME)} {vtranslate('LBL_TASKS', $MODULE_NAME)}{/if}</strong></label> - <div class="pull-right"> - <span class="mini-slider-control ui-slider" data-value="0"> - <a style="margin-top: 3px" class="ui-slider-handle"></a> - </span> - <span style="margin: 0 20px;">{vtranslate('LBL_INIVISIBLE',$QUALIFIED_MODULE)}</span> - <span class="mini-slider-control ui-slider" data-value="1"> - <a style="margin-top: 3px" class="ui-slider-handle"></a> - </span> - <span style="margin: 0 20px;">{vtranslate('LBL_READ_ONLY',$QUALIFIED_MODULE)}</span> - <span class="mini-slider-control ui-slider" data-value="2"> - <a style="margin-top: 3px" class="ui-slider-handle"></a> - </span> - <span style="margin: 0 20px;">{vtranslate('LBL_WRITE',$QUALIFIED_MODULE)}</span> - </div> - <div class="clearfix"></div> - </div> - <table class="table table-bordered no-border"> - {assign var=COUNTER value=0} - {foreach from=$PROFILE_MODULE->getFields() key=FIELD_NAME item=FIELD_MODEL name="fields"} - {assign var='FIELD_ID' value=$FIELD_MODEL->getId()} - {if $FIELD_MODEL->isActiveField() && $FIELD_MODEL->get('uitype') != '83' && $FIELD_MODEL->get('displaytype') neq '6'} - {if $COUNTER % 3 == 0} - <tr> - {/if} - <td > - <!-- Field will be locked iff that field is non editable or Mandatory or UIType 70. - But, we can't set emailoptout field to either Mandatory/non-editable/uitype70 - --> - {assign var="FIELD_LOCKED" value=true} - {if $FIELD_NAME neq 'emailoptout'} - {assign var="FIELD_LOCKED" value=$RECORD_MODEL->isModuleFieldLocked($PROFILE_MODULE, $FIELD_MODEL)} - {/if} - <input type="hidden" name="permissions[{$TABID}][fields][{$FIELD_ID}]" data-range-input="{$FIELD_ID}" value="{$RECORD_MODEL->getModuleFieldPermissionValue($PROFILE_MODULE, $FIELD_MODEL)}" readonly="true"> - <div class="mini-slider-control editViewMiniSlider pull-left" data-locked="{$FIELD_LOCKED}" data-range="{$FIELD_ID}" data-value="{$RECORD_MODEL->getModuleFieldPermissionValue($PROFILE_MODULE, $FIELD_MODEL)}"></div> - <div class="pull-left"> - {vtranslate($FIELD_MODEL->get('label'), $MODULE_NAME)} {if $FIELD_MODEL->isMandatory()}<span class="redColor">*</span>{/if} - </div> - </td> - {if $smarty.foreach.fields.last OR ($COUNTER+1) % 3 == 0} - </tr> - {/if} - {assign var=COUNTER value=$COUNTER+1} - {else if $FIELD_MODEL->get('displaytype') eq '6'} - <input type='hidden' name='permissions[{$TABID}][fields][{$FIELD_ID}]' value='{$RECORD_MODEL->getModuleFieldPermissionValue($PROFILE_MODULE, $FIELD_MODEL)}' /> - {/if} - {/foreach} - </table> - {if $MODULE_NAME eq 'Calendar'} - {assign var=EVENT_MODULE value=$PROFILE_MODULES[16]} - {assign var=COUNTER value=0} - <label class="pull-left"><strong>{vtranslate('LBL_FIELDS', $QUALIFIED_MODULE)} {vtranslate('LBL_OF', $EVENT_MODULE->getName())} {vtranslate('LBL_EVENTS', $EVENT_MODULE->getName())}</strong></label> - <table class="table table-bordered"> - {foreach from=$EVENT_MODULE->getFields() key=FIELD_NAME item=FIELD_MODEL name="fields"} - {if $FIELD_MODEL->isActiveField()} - {assign var="FIELD_ID" value=$FIELD_MODEL->getId()} - {if $COUNTER % 3 == 0} - <tr> - {/if} - <td> - {assign var="FIELD_LOCKED" value=$RECORD_MODEL->isModuleFieldLocked($EVENT_MODULE, $FIELD_MODEL)} - <input type="hidden" name="permissions[16][fields][{$FIELD_ID}]" data-range-input="{$FIELD_ID}" value="{$RECORD_MODEL->getModuleFieldPermissionValue($EVENT_MODULE, $FIELD_MODEL)}" readonly="true"> - <div class="mini-slider-control editViewMiniSlider pull-left" data-locked="{$FIELD_LOCKED}" data-range="{$FIELD_ID}" data-value="{$RECORD_MODEL->getModuleFieldPermissionValue($EVENT_MODULE, $FIELD_MODEL)}"></div> - <div class="pull-left"> - {vtranslate($FIELD_MODEL->get('label'), $MODULE_NAME)} {if $FIELD_MODEL->isMandatory()}<span class="redColor">*</span>{/if} - </div> - </td> - {if $smarty.foreach.fields.last OR ($COUNTER+1) % 3 == 0} - </tr> - {/if} - {assign var=COUNTER value=$COUNTER+1} - {/if} - {/foreach} - </table> - {/if} - {/if} - </div> - </td> - </tr> - <tr class="hide"> - <td colspan="6" class="row" style="padding-left: 5%;padding-right: 5%;"> - <div class="row" data-togglecontent="{$TABID}-fields" style="display: none"> - <div class="col-sm-12"> - <label class="pull-left"> - <strong>{vtranslate('LBL_TOOLS',$QUALIFIED_MODULE)}</strong> - </label> - </div> - <table class="table table-bordered"> - {assign var=UTILITY_ACTION_COUNT value=0} - {assign var="ALL_UTILITY_ACTIONS_ARRAY" value=array()} - {foreach from=$ALL_UTILITY_ACTIONS item=ACTION_MODEL} - {if $ACTION_MODEL->isModuleEnabled($PROFILE_MODULE)} - {assign var="testArray" array_push($ALL_UTILITY_ACTIONS_ARRAY,$ACTION_MODEL)} - {/if} - {/foreach} - {foreach from=$ALL_UTILITY_ACTIONS_ARRAY item=ACTION_MODEL name="actions"} - {if $smarty.foreach.actions.index % 3 == 0} - <tr> - {/if} - {assign var=ACTIONID value=$ACTION_MODEL->get('actionid')} - <td {if $smarty.foreach.actions.last && (($smarty.foreach.actions.index+1) % 3 neq 0)} - {assign var="index" value=($smarty.foreach.actions.index+1) % 3} - {assign var="colspan" value=4-$index} - colspan="{$colspan}" - {/if}> - <input type="checkbox" {if empty($RECORD_ID) && empty($IS_DUPLICATE_RECORD)} checked="true" {/if} name="permissions[{$TABID}][actions][{$ACTIONID}]" {if $RECORD_MODEL->hasModuleActionPermission($PROFILE_MODULE, $ACTIONID)}checked="true"{/if}> {$ACTION_MODEL->getName()} - </td> - {if $smarty.foreach.actions.last OR ($smarty.foreach.actions.index+1) % 3 == 0} - </div> - {/if} - {/foreach} - </table> - </div> - </td> - </tr> - {/if} - {/foreach} - </tbody> - </table> - </div> + <div class="col-lg-1 col-md-1 col-sm-1"></div> + <div class=" col-lg-10 col-md-10 col-sm-10"> + <table class="table table-bordered profilesEditView"> + <thead> + <tr class="blockHeader"> + <th width="25%" style="text-align: left !important"> + <label><input class="verticalAlignMiddle" checked="true" type="checkbox" id="mainModulesCheckBox" style="top: -2px;"/> + {vtranslate('LBL_MODULES', $QUALIFIED_MODULE)} + </label> + </th> + <th class='textAlignCenter' width="14%"> + <label><input class="verticalAlignMiddle" type="checkbox" {if empty($RECORD_ID) && empty($IS_DUPLICATE_RECORD)} checked="true" {/if} id="mainAction4CheckBox" style="top: -2px;" /> + {'LBL_VIEW_PRVILIGE'|vtranslate:$QUALIFIED_MODULE} + </label> + </th> + <th class='textAlignCenter' width="14%"> + <label><input class="verticalAlignMiddle" {if empty($RECORD_ID) && empty($IS_DUPLICATE_RECORD)} checked="true" {/if} type="checkbox" id="mainAction7CheckBox" style="top: -2px;"/> + {'LBL_CREATE'|vtranslate:$QUALIFIED_MODULE} + </label> + </th> + <th class='textAlignCenter' width="14%"> + <label><input class="verticalAlignMiddle" {if empty($RECORD_ID) && empty($IS_DUPLICATE_RECORD)} checked="true" {/if} type="checkbox" id="mainAction1CheckBox" style="top: -2px;" /> + {'LBL_EDIT'|vtranslate:$QUALIFIED_MODULE} + </label> + </th> + <th class='textAlignCenter' width="14%"> + <label><input class="verticalAlignMiddle" checked="true" type="checkbox" id="mainAction2CheckBox" style="top: -2px;" /> + {'LBL_DELETE_PRVILIGE'|vtranslate:$QUALIFIED_MODULE} + </label> + </th> + <th class='textAlignCenter verticalAlignMiddleImp' width="28%;" nowrap="nowrap"> + {'LBL_FIELD_AND_TOOL_PRIVILEGES'|vtranslate:$QUALIFIED_MODULE} + </th> + </tr> + </thead> + <tbody> + {assign var=PROFILE_MODULES value=$RECORD_MODEL->getModulePermissions()} + {foreach from=$PROFILE_MODULES key=TABID item=PROFILE_MODULE} + {assign var=MODULE_NAME value=$PROFILE_MODULE->getName()} + {if $MODULE_NAME neq 'Events'} + {assign var=IS_RESTRICTED_MODULE value=$RECORD_MODEL->isRestrictedModule($MODULE_NAME)} + <tr> + <td class="verticalAlignMiddleImp"> + <input class="modulesCheckBox" type="checkbox" name="permissions[{$TABID}][is_permitted]" data-value="{$TABID}" data-module-state="" {if $RECORD_MODEL->hasModulePermission($PROFILE_MODULE)}checked="true"{else} data-module-unchecked="true" {/if}> {$PROFILE_MODULE->get('label')|vtranslate:$PROFILE_MODULE->getName()} + </td> + {assign var="BASIC_ACTION_ORDER" value=array(2,3,0,1)} + {foreach from=$BASIC_ACTION_ORDER item=ORDERID} + <td class="textAlignCenter verticalAlignMiddleImp"> + {assign var="ACTION_MODEL" value=$ALL_BASIC_ACTIONS[$ORDERID]} + {assign var=ACTION_ID value=$ACTION_MODEL->get('actionid')} + {if !$IS_RESTRICTED_MODULE && $ACTION_MODEL->isModuleEnabled($PROFILE_MODULE)} + <input class="action{$ACTION_ID}CheckBox" type="checkbox" name="permissions[{$TABID}][actions][{$ACTION_ID}]" data-action-state="{$ACTION_MODEL->getName()}" {if $RECORD_MODEL->hasModuleActionPermission($PROFILE_MODULE, $ACTION_MODEL)}checked="true"{elseif empty($RECORD_ID) && empty($IS_DUPLICATE_RECORD)} checked="true" {else} data-action{$ACTION_ID}-unchecked="true"{/if}></td> + {/if} + </td> + {/foreach} + <td class="textAlignCenter"> + {if ($PROFILE_MODULE->getFields() && $PROFILE_MODULE->isEntityModule() && $PROFILE_MODULE->isProfileLevelUtilityAllowed()) || $PROFILE_MODULE->isUtilityActionEnabled()} + <button type="button" data-handlerfor="fields" data-togglehandler="{$TABID}-fields" class="btn btn-default btn-sm" style="padding-right: 20px; padding-left: 20px;"> + <i class="fa fa-chevron-down"></i> + </button> + {/if} + </td> + </tr> + <tr class="hide"> + <td colspan="6" class="row" style="padding-left: 5%;padding-right: 5%"> + <div class="row" data-togglecontent="{$TABID}-fields" style="display: none"> + {if $PROFILE_MODULE->getFields() && $PROFILE_MODULE->isEntityModule() } + <div class="col-sm-12"> + <label class="pull-left"><strong>{vtranslate('LBL_FIELDS',$QUALIFIED_MODULE)}{if $MODULE_NAME eq 'Calendar'} {vtranslate('LBL_OF', $MODULE_NAME)} {vtranslate('LBL_TASKS', $MODULE_NAME)}{/if}</strong></label> + <div class="pull-right"> + <span class="mini-slider-control ui-slider" data-value="0"> + <a style="margin-top: 3px" class="ui-slider-handle"></a> + </span> + <span style="margin: 0 20px;">{vtranslate('LBL_INIVISIBLE',$QUALIFIED_MODULE)}</span> + <span class="mini-slider-control ui-slider" data-value="1"> + <a style="margin-top: 3px" class="ui-slider-handle"></a> + </span> + <span style="margin: 0 20px;">{vtranslate('LBL_READ_ONLY',$QUALIFIED_MODULE)}</span> + <span class="mini-slider-control ui-slider" data-value="2"> + <a style="margin-top: 3px" class="ui-slider-handle"></a> + </span> + <span style="margin: 0 20px;">{vtranslate('LBL_WRITE',$QUALIFIED_MODULE)}</span> + </div> + <div class="clearfix"></div> + </div> + <table class="table table-bordered no-border"> + {assign var=COUNTER value=0} + {foreach from=$PROFILE_MODULE->getFields() key=FIELD_NAME item=FIELD_MODEL name="fields"} + {assign var='FIELD_ID' value=$FIELD_MODEL->getId()} + {if $FIELD_MODEL->isActiveField() && $FIELD_MODEL->get('uitype') != '83' && $FIELD_MODEL->get('displaytype') neq '6'} + {if $COUNTER % 3 == 0} + <tr> + {/if} + <td > + <!-- Field will be locked iff that field is non editable or Mandatory or UIType 70. + But, we can't set emailoptout field to either Mandatory/non-editable/uitype70 + --> + {assign var="FIELD_LOCKED" value=true} + {if $FIELD_NAME neq 'emailoptout'} + {assign var="FIELD_LOCKED" value=$RECORD_MODEL->isModuleFieldLocked($PROFILE_MODULE, $FIELD_MODEL)} + {/if} + <input type="hidden" name="permissions[{$TABID}][fields][{$FIELD_ID}]" data-range-input="{$FIELD_ID}" value="{$RECORD_MODEL->getModuleFieldPermissionValue($PROFILE_MODULE, $FIELD_MODEL)}" readonly="true"> + <div class="mini-slider-control editViewMiniSlider pull-left" data-locked="{$FIELD_LOCKED}" data-range="{$FIELD_ID}" data-value="{$RECORD_MODEL->getModuleFieldPermissionValue($PROFILE_MODULE, $FIELD_MODEL)}"></div> + <div class="pull-left"> + {vtranslate($FIELD_MODEL->get('label'), $MODULE_NAME)} {if $FIELD_MODEL->isMandatory()}<span class="redColor">*</span>{/if} + </div> + </td> + {if $smarty.foreach.fields.last OR ($COUNTER+1) % 3 == 0} + </tr> + {/if} + {assign var=COUNTER value=$COUNTER+1} + {else if $FIELD_MODEL->get('displaytype') eq '6' || $FIELD_MODEL->getName() eq 'adjusted_amount'} + <input type='hidden' name='permissions[{$TABID}][fields][{$FIELD_ID}]' value='2' /> + {/if} + {/foreach} + </table> + {if $MODULE_NAME eq 'Calendar'} + {assign var=EVENT_MODULE value=$PROFILE_MODULES[16]} + {assign var=COUNTER value=0} + <label class="pull-left"><strong>{vtranslate('LBL_FIELDS', $QUALIFIED_MODULE)} {vtranslate('LBL_OF', $EVENT_MODULE->getName())} {vtranslate('LBL_EVENTS', $EVENT_MODULE->getName())}</strong></label> + <table class="table table-bordered"> + {foreach from=$EVENT_MODULE->getFields() key=FIELD_NAME item=FIELD_MODEL name="fields"} + {if $FIELD_MODEL->isActiveField()} + {assign var="FIELD_ID" value=$FIELD_MODEL->getId()} + {if $COUNTER % 3 == 0} + <tr> + {/if} + <td> + {assign var="FIELD_LOCKED" value=$RECORD_MODEL->isModuleFieldLocked($EVENT_MODULE, $FIELD_MODEL)} + <input type="hidden" name="permissions[16][fields][{$FIELD_ID}]" data-range-input="{$FIELD_ID}" value="{$RECORD_MODEL->getModuleFieldPermissionValue($EVENT_MODULE, $FIELD_MODEL)}" readonly="true"> + <div class="mini-slider-control editViewMiniSlider pull-left" data-locked="{$FIELD_LOCKED}" data-range="{$FIELD_ID}" data-value="{$RECORD_MODEL->getModuleFieldPermissionValue($EVENT_MODULE, $FIELD_MODEL)}"></div> + <div class="pull-left"> + {vtranslate($FIELD_MODEL->get('label'), $MODULE_NAME)} {if $FIELD_MODEL->isMandatory()}<span class="redColor">*</span>{/if} + </div> + </td> + {if $smarty.foreach.fields.last OR ($COUNTER+1) % 3 == 0} + </tr> + {/if} + {assign var=COUNTER value=$COUNTER+1} + {/if} + {/foreach} + </table> + {/if} + {/if} + </div> + </td> + </tr> + <tr class="hide {$PROFILE_MODULE->getName()}_ACTIONS"> + {assign var=UTILITY_ACTION_COUNT value=0} + {assign var="ALL_UTILITY_ACTIONS_ARRAY" value=array()} + {foreach from=$ALL_UTILITY_ACTIONS item=ACTION_MODEL} + {if $ACTION_MODEL->isModuleEnabled($PROFILE_MODULE)} + {assign var="testArray" array_push($ALL_UTILITY_ACTIONS_ARRAY,$ACTION_MODEL)} + {/if} + {/foreach} + {if $ALL_UTILITY_ACTIONS_ARRAY} + <td colspan="6" class="row" style="padding-left: 5%;padding-right: 5%;"> + <div class="row" data-togglecontent="{$TABID}-fields" style="display: none"> + <div class="col-sm-12"> + <label class="pull-left"> + <strong>{vtranslate('LBL_TOOLS',$QUALIFIED_MODULE)}</strong> + </label> + </div> + <table class="table table-bordered"> + <tr> + {foreach from=$ALL_UTILITY_ACTIONS_ARRAY item=ACTION_MODEL name="actions"} + {assign var=ACTIONID value=$ACTION_MODEL->get('actionid')} + <td {if $smarty.foreach.actions.last && (($smarty.foreach.actions.index+1) % 3 neq 0)} + {assign var="index" value=($smarty.foreach.actions.index+1) % 3} + {assign var="colspan" value=4-$index} + colspan="{$colspan}" + {/if}> + <input type="checkbox" {if empty($RECORD_ID) && empty($IS_DUPLICATE_RECORD)} checked="true" {/if} name="permissions[{$TABID}][actions][{$ACTIONID}]" {if $RECORD_MODEL->hasModuleActionPermission($PROFILE_MODULE, $ACTIONID)}checked="true"{/if} data-action-name='{$ACTION_MODEL->getName()}' data-action-tool='{$TABID}'> {vtranslate($ACTION_MODEL->getName(), $QUALIFIED_MODULE)} + </td> + {if ($smarty.foreach.actions.index+1) % 3 == 0} + </tr><tr> + {/if} + {/foreach} + </tr> + </table> + </div> + </td> + {/if} + </tr> + {/if} + {/foreach} + </tbody> + </table> + </div> </div> diff --git a/layouts/v7/modules/Settings/Profiles/ListViewRecordActions.tpl b/layouts/v7/modules/Settings/Profiles/ListViewRecordActions.tpl index ee5c030817615479cf846310d3f9792558e7e656..7bc6ae6eb1ba85d0f673d1c1ca8359e5cf0a237f 100644 --- a/layouts/v7/modules/Settings/Profiles/ListViewRecordActions.tpl +++ b/layouts/v7/modules/Settings/Profiles/ListViewRecordActions.tpl @@ -10,22 +10,22 @@ <!--LIST VIEW RECORD ACTIONS--> <div class="table-actions"> - {assign var=RECORD_LINKS value=$LISTVIEW_ENTRY->getRecordLinks()} - {assign var=RECORD_LINK_URL value=[]} - {foreach item=RECORD_LINK key=key from=$LISTVIEW_ENTRY->getRecordLinks()} - {$RECORD_LINK_URL.$key = $RECORD_LINK->getUrl()} - {/foreach} - - <span> - <a href="{$RECORD_LINK_URL[1]}" title="{vtranslate('LBL_DUPLICATE', $MODULE)}"><i class="fa fa-copy"></i></a> - </span> - <span class="more dropdown action"> - <span href="javascript:;" class="dropdown-toggle" data-toggle="dropdown"> - <i class="fa fa-ellipsis-v icon"></i></span> - <ul class="dropdown-menu"> - <li><a data-id="{$LISTVIEW_ENTRY->getId()}" href="{$RECORD_LINK_URL[0]}" title="{vtranslate('LBL_EDIT', $MODULE)}">{vtranslate('LBL_EDIT', $MODULE)}</a></li> - <li> <a data-id="{$LISTVIEW_ENTRY->getId()}" href="javascript:void(0)" onclick="{$RECORD_LINK_URL[2]}" title="{vtranslate('LBL_DELETE', $MODULE)}">{vtranslate('LBL_DELETE', $MODULE)}</a></li> - </ul> - </span> + {assign var=RECORD_LINKS value=$LISTVIEW_ENTRY->getRecordLinks()} + {assign var=RECORD_LINK_URL value=[]} + {foreach item=RECORD_LINK key=key from=$LISTVIEW_ENTRY->getRecordLinks()} + {$RECORD_LINK_URL.$key = $RECORD_LINK->getUrl()} + {/foreach} + + <span> + <a href="{$RECORD_LINK_URL[1]}" title="{vtranslate('LBL_DUPLICATE', $MODULE)}"><i class="fa fa-copy"></i></a> + </span> + <span class="more dropdown action"> + <span href="javascript:;" class="dropdown-toggle" data-toggle="dropdown"> + <i class="fa fa-ellipsis-v icon"></i></span> + <ul class="dropdown-menu"> + <li><a data-id="{$LISTVIEW_ENTRY->getId()}" href="{$RECORD_LINK_URL[0]}" title="{vtranslate('LBL_EDIT', $MODULE)}">{vtranslate('LBL_EDIT', $MODULE)}</a></li> + <li> <a data-id="{$LISTVIEW_ENTRY->getId()}" href="javascript:void(0)" onclick="{$RECORD_LINK_URL[2]}" title="{vtranslate('LBL_DELETE', $MODULE)}">{vtranslate('LBL_DELETE', $MODULE)}</a></li> + </ul> + </span> </div> {/strip} \ No newline at end of file diff --git a/layouts/v7/modules/Settings/Profiles/resources/Profiles.js b/layouts/v7/modules/Settings/Profiles/resources/Profiles.js index 8be822ad7ca3aea06557a5059d7f2085216631d6..62f0c702134b7bfa6593e3d6d7535c2170c8caec 100644 --- a/layouts/v7/modules/Settings/Profiles/resources/Profiles.js +++ b/layouts/v7/modules/Settings/Profiles/resources/Profiles.js @@ -45,6 +45,7 @@ var Settings_Profiles_Js = { var parent = target.closest('tr'); if (target.is(':checked')) { jQuery('[data-action-state]', parent).prop('checked', true); + jQuery('[data-action-tool="'+tabid+'"]').prop('checked', true); jQuery('[data-handlerfor]', parent).removeAttr('disabled'); } else { jQuery('[data-action-state]', parent).prop('checked', false); @@ -63,7 +64,7 @@ var Settings_Profiles_Js = { var parent = target.closest('tr'); var checked = target.prop('checked')? true : false; - if (target.data('action-state') == 'EditView' || target.data('action-state') == 'Delete') { + if (jQuery.inArray(target.data('action-state'), ['CreateView', 'EditView', 'Delete']) != -1) { if (checked) { jQuery('[data-action-state="DetailView"]', parent).prop('checked', true); jQuery('[data-module-state]', parent).prop('checked', true); @@ -95,11 +96,14 @@ var Settings_Profiles_Js = { jQuery('[data-module-state]').change(handleModuleSelectionState); jQuery('[data-action-state]').change(handleActionSelectionState); - jQuery('#mainAction1CheckBox,#mainAction2CheckBox').change(selectAllModulesViewAndToolPriviliges); + jQuery('#mainAction1CheckBox,#mainAction7CheckBox,#mainAction2CheckBox').change(selectAllModulesViewAndToolPriviliges); jQuery('[data-togglehandler]').click(toggleEditViewTableRow); jQuery('[data-range]').each(function(index, item) { item = jQuery(item); + if(item.data('locked')){ + jQuery('.editViewMiniSlider').css('cursor','pointer'); + } var value = item.data('value'); item.slider({ min: 0, @@ -118,8 +122,9 @@ var Settings_Profiles_Js = { registerSelectAllModulesEvent : function() { var moduleCheckBoxes = jQuery('.modulesCheckBox'); var viewAction = jQuery('#mainAction4CheckBox'); - var createAction = jQuery('#mainAction1CheckBox'); - var deleteACtion = jQuery('#mainAction2CheckBox'); + var createAction = jQuery('#mainAction7CheckBox'); + var editAction = jQuery('#mainAction1CheckBox'); + var deleteAction = jQuery('#mainAction2CheckBox'); var mainModulesCheckBox = jQuery('#mainModulesCheckBox'); mainModulesCheckBox.on('change',function(e) { var mainCheckBox = jQuery(e.currentTarget); @@ -127,22 +132,26 @@ var Settings_Profiles_Js = { moduleCheckBoxes.prop('checked',true); viewAction.prop('checked',true); createAction.show().prop('checked',true); - deleteACtion.show().prop('checked',true); + editAction.show().prop('checked',true); + deleteAction.show().prop('checked',true); moduleCheckBoxes.trigger('change'); } else { - moduleCheckBoxes.prop('checked',false); + //Some modules like TextSearch, BusinessHours, SLA will not be shown in the UI. But they should be always enabled + moduleCheckBoxes.filter(':visible').not(':disabled').prop('checked',false); moduleCheckBoxes.trigger('change'); viewAction.prop('checked',false); createAction.prop('checked', false); - deleteACtion.prop('checked', false); + editAction.prop('checked', false); + deleteAction.prop('checked', false); } }); moduleCheckBoxes.on('change',function(){ Settings_Profiles_Js.checkSelectAll(moduleCheckBoxes,mainModulesCheckBox); Settings_Profiles_Js.checkSelectAll(jQuery('.action4CheckBox'),viewAction); - Settings_Profiles_Js.checkSelectAll(jQuery('.action1CheckBox'),createAction); - Settings_Profiles_Js.checkSelectAll(jQuery('.action2CheckBox'),deleteACtion); + Settings_Profiles_Js.checkSelectAll(jQuery('.action7CheckBox'),createAction); + Settings_Profiles_Js.checkSelectAll(jQuery('.action1CheckBox'),editAction); + Settings_Profiles_Js.checkSelectAll(jQuery('.action2CheckBox'),deleteAction); }); }, @@ -167,8 +176,25 @@ var Settings_Profiles_Js = { }); }, - + registerSelectAllCreateActionsEvent : function() { + var createActionCheckBoxes = jQuery('.action7CheckBox'); + var mainCreateActionCheckBox = jQuery('#mainAction7CheckBox'); + mainCreateActionCheckBox.on('change', function (e) { + var mainCheckBox = jQuery(e.currentTarget); + if (mainCheckBox.is(':checked')) { + createActionCheckBoxes.prop('checked', true); + } else { + createActionCheckBoxes.prop('checked', false); + } + }); + createActionCheckBoxes.on('change', function () { + Settings_Profiles_Js.checkSelectAll(createActionCheckBoxes, mainCreateActionCheckBox); + }); + + }, + + registerSelectAllEditActionsEvent : function() { var createActionCheckBoxes = jQuery('.action1CheckBox'); var mainCreateActionCheckBox = jQuery('#mainAction1CheckBox'); mainCreateActionCheckBox.on('change',function(e){ @@ -225,10 +251,13 @@ var Settings_Profiles_Js = { if(jQuery('[data-module-unchecked]').length > 0){ jQuery('#mainModulesCheckBox').prop('checked',false); } - + if(jQuery('[data-action4-unchecked]').length <= 0){ jQuery('#mainAction4CheckBox').prop('checked',true); } + if(jQuery('[data-action7-unchecked]').length <= 0) { + jQuery('#mainAction7CheckBox').prop('checked',true); + } if(jQuery('[data-action1-unchecked]').length <= 0) { jQuery('#mainAction1CheckBox').prop('checked',true); } @@ -254,6 +283,7 @@ var Settings_Profiles_Js = { var params = { submitHandler : function(form) { var form = jQuery(form); + jQuery('[name="EditProfile"]').find('.saveButton').attr('disabled',true); if(form.data('submit') === 'true' && form.data('performCheck') === 'true') { return true; } else { @@ -289,11 +319,13 @@ var Settings_Profiles_Js = { }); }, function(err){ + jQuery('[name="EditProfile"]').find('.saveButton').removeAttr('disabled'); app.helper.hideProgress(); app.helper.showErrorNotification({'message' : err.message}); }); } else { //If validation fails, form should submit again + jQuery('[name="EditProfile"]').find('.saveButton').removeAttr('disabled'); form.removeData('submit'); } } @@ -394,22 +426,23 @@ var Settings_Profiles_Js = { Settings_Profiles_Js.registerSelectAllModulesEvent(); Settings_Profiles_Js.registerSelectAllViewActionsEvent(); Settings_Profiles_Js.registerSelectAllCreateActionsEvent(); + Settings_Profiles_Js.registerSelectAllEditActionsEvent(); Settings_Profiles_Js.registerSelectAllDeleteActionsEvent(); Settings_Profiles_Js.performSelectAllActionsOnLoad(); Settings_Profiles_Js.registerGlobalPermissionActionsEvent(); - if(app.getModuleName() === 'Profiles' && app.view() === 'Edit') { - Settings_Profiles_Js.registerSubmitEvent(); - } + if(app.getModuleName() === 'Profiles' && app.view() === 'Edit') { + Settings_Profiles_Js.registerSubmitEvent(); + } } - + }; Vtiger.Class("Settings_Profiles_Detail_Js",{},{ init : function() { this.addComponents(); - Settings_Profiles_Js.registerEvents(); + Settings_Profiles_Js.registerEvents(); }, - + addComponents : function() { this.addModuleSpecificComponent('Index','Vtiger',app.getParentModuleName()); } @@ -418,7 +451,7 @@ Vtiger.Class("Settings_Profiles_Detail_Js",{},{ Vtiger.Class("Settings_Profiles_Edit_Js",{},{ init : function() { this.addComponents(); - Settings_Profiles_Js.registerEvents(); + Settings_Profiles_Js.registerEvents(); }, addComponents : function() { diff --git a/layouts/v7/modules/Vtiger/Comment.tpl b/layouts/v7/modules/Vtiger/Comment.tpl index fb6200b8d70acd5d4ab82c40c74dd00022d5ee52..7aaf40aee6a160375953f2bd54e8868d209eb856 100644 --- a/layouts/v7/modules/Vtiger/Comment.tpl +++ b/layouts/v7/modules/Vtiger/Comment.tpl @@ -7,141 +7,141 @@ * All Rights Reserved. ************************************************************************************} {strip} - <div class="commentDiv {if $COMMENT->get('is_private')}privateComment{/if}"> - <div class="singleComment"> - <input type="hidden" name="is_private" value="{$COMMENT->get('is_private')}"> - <div class="commentInfoHeader" data-commentid="{$COMMENT->getId()}" data-parentcommentid="{$COMMENT->get('parent_comments')}" data-relatedto = "{$COMMENT->get('related_to')}"> - - {assign var=PARENT_COMMENT_MODEL value=$COMMENT->getParentCommentModel()} - {assign var=CHILD_COMMENTS_MODEL value=$COMMENT->getChildComments()} - - <div class="row"> - <div class="col-lg-12"> - <div class="media"> - <div class="media-left title" id="{$COMMENT->getId()}"> - {assign var=CREATOR_NAME value=$COMMENT->getCommentedByName()} - <div class="col-lg-2 recordImage commentInfoHeader" style ="width:50px; height:50px;" data-commentid="{$COMMENT->getId()}" data-parentcommentid="{$COMMENT->get('parent_comments')}" data-relatedto = "{$COMMENT->get('related_to')}"> - {assign var=IMAGE_PATH value=$COMMENT->getImagePath()} - {if !empty($IMAGE_PATH)} - <img src="{$IMAGE_PATH}" width="100%" height="100%" align="left"> - {else} - <div class="name"><span><strong> {$CREATOR_NAME|substr:0:2} </strong></span></div> - {/if} - </div> - </div> - <div class="media-body"> - <div class="comment" style="line-height:1;"> - <span class="creatorName" style="color:blue"> - {$CREATOR_NAME} - </span> - {if $ROLLUP_STATUS and $COMMENT->get('module') ne $MODULE_NAME} - {assign var=SINGULR_MODULE value='SINGLE_'|cat:$COMMENT->get('module')} - {assign var=ENTITY_NAME value=getEntityName($COMMENT->get('module'), array($COMMENT->get('related_to')))} - <span class="text-muted"> - {vtranslate('LBL_ON','Vtiger')} - {vtranslate($SINGULR_MODULE)} - <a href="index.php?module={$COMMENT->get('module')}&view=Detail&record={$COMMENT->get('related_to')}"> - {$ENTITY_NAME[$COMMENT->get('related_to')]} - </a> - </span> - {/if} - <div class=""> - <span class="commentInfoContent"> - {nl2br($COMMENT->get('commentcontent'))} - </span> - </div> - <br> - <div class="commentActionsContainer"> - <span class="commentActions"> - {if $CHILDS_ROOT_PARENT_MODEL} - {assign var=CHILDS_ROOT_PARENT_ID value=$CHILDS_ROOT_PARENT_MODEL->getId()} - {/if} - - {if $COMMENTS_MODULE_MODEL->isPermitted('EditView')} - {if $CHILDS_ROOT_PARENT_MODEL} - {assign var=CHILDS_ROOT_PARENT_ID value=$CHILDS_ROOT_PARENT_MODEL->getId()} - {/if} - <a href="javascript:void(0);" class="cursorPointer replyComment feedback" style="color: blue;"> - {vtranslate('LBL_REPLY',$MODULE_NAME)} - </a> - {if $CURRENTUSER->getId() eq $COMMENT->get('userid')} - - <a href="javascript:void(0);" class="cursorPointer editComment feedback" style="color: blue;"> - {vtranslate('LBL_EDIT',$MODULE_NAME)} - </a> - {/if} - {/if} - - {assign var=CHILD_COMMENTS_COUNT value=$COMMENT->getChildCommentsCount()} - {if $CHILD_COMMENTS_MODEL neq null and ($CHILDS_ROOT_PARENT_ID neq $PARENT_COMMENT_ID)} - {if $COMMENTS_MODULE_MODEL->isPermitted('EditView')} {/if} - <span class="viewThreadBlock" data-child-comments-count="{$CHILD_COMMENTS_COUNT}"> - <a href="javascript:void(0)" class="cursorPointer viewThread"> - <span class="childCommentsCount">{$CHILD_COMMENTS_COUNT}</span> {if $CHILD_COMMENTS_COUNT eq 1}{vtranslate('LBL_REPLY',$MODULE_NAME)}{else}{vtranslate('LBL_REPLIES',$MODULE_NAME)}{/if} - </a> - </span> - <span class="hideThreadBlock" data-child-comments-count="{$CHILD_COMMENTS_COUNT}" style="display:none;"> - <a href="javascript:void(0)" class="cursorPointer hideThread"> - <span class="childCommentsCount">{$CHILD_COMMENTS_COUNT}</span> {if $CHILD_COMMENTS_COUNT eq 1}{vtranslate('LBL_REPLY',$MODULE_NAME)}{else}{vtranslate('LBL_REPLIES',$MODULE_NAME)}{/if} - </a> - </span> - {elseif $CHILD_COMMENTS_MODEL neq null and ($CHILDS_ROOT_PARENT_ID eq $PARENT_COMMENT_ID)} - {if $COMMENTS_MODULE_MODEL->isPermitted('EditView')} {/if} - <span class="viewThreadBlock" data-child-comments-count="{$CHILD_COMMENTS_COUNT}" style="display:none;"> - <a href="javascript:void(0)" class="cursorPointer viewThread"> - <span class="childCommentsCount">{$CHILD_COMMENTS_COUNT}</span> {if $CHILD_COMMENTS_COUNT eq 1}{vtranslate('LBL_REPLY',$MODULE_NAME)}{else}{vtranslate('LBL_REPLIES',$MODULE_NAME)}{/if} - </a> - </span> - <span class="hideThreadBlock" data-child-comments-count="{$CHILD_COMMENTS_COUNT}"> - <a href="javascript:void(0)" class="cursorPointer hideThread"> - <span class="childCommentsCount">{$CHILD_COMMENTS_COUNT}</span> {if $CHILD_COMMENTS_COUNT eq 1}{vtranslate('LBL_REPLY',$MODULE_NAME)}{else}{vtranslate('LBL_REPLIES',$MODULE_NAME)}{/if} - </a> - </span> - {/if} - </span> + <div class="commentDiv {if $COMMENT->get('is_private')}privateComment{/if}"> + <div class="singleComment"> + <input type="hidden" name="is_private" value="{$COMMENT->get('is_private')}"> + <div class="commentInfoHeader" data-commentid="{$COMMENT->getId()}" data-parentcommentid="{$COMMENT->get('parent_comments')}" data-relatedto = "{$COMMENT->get('related_to')}"> - <span class="commentTime text-muted cursorDefault" style="padding:20px;"> - <small title="{Vtiger_Util_Helper::formatDateTimeIntoDayString($COMMENT->getCommentedTime())}">{Vtiger_Util_Helper::formatDateDiffInStrings($COMMENT->getCommentedTime())}</small> - </span> - </div> - <br> - {assign var="REASON_TO_EDIT" value=$COMMENT->get('reasontoedit')} - <div class="editedStatus" name="editStatus"> - <div class="{if empty($REASON_TO_EDIT)}hide{/if} editReason"> - <p class="text-muted"><small>[ {vtranslate('LBL_EDIT_REASON',$MODULE_NAME)} ] : <span name="editReason" class="textOverflowEllipsis">{nl2br($REASON_TO_EDIT)}</span></small></p> - </div> - {if $COMMENT->getCommentedTime() neq $COMMENT->getModifiedTime()} - <p class="text-muted cursorDefault"><small><em>{vtranslate('LBL_MODIFIED',$MODULE_NAME)}</em></small> <small title="{Vtiger_Util_Helper::formatDateTimeIntoDayString($COMMENT->getModifiedTime())}" class="commentModifiedTime">{Vtiger_Util_Helper::formatDateDiffInStrings($COMMENT->getModifiedTime())}</small></p> - {/if} - </div> - <div style="margin-top:5px;"> - {assign var="FILE_DETAILS" value=$COMMENT->getFileNameAndDownloadURL()} - {foreach key=index item=FILE_DETAIL from=$FILE_DETAILS} - {assign var="FILE_NAME" value=$FILE_DETAIL['trimmedFileName']} - {if !empty($FILE_NAME)} - <div class="row-fluid"> - <div class="span11 commentAttachmentName"> - <span class="filePreview"> - <a onclick="Vtiger_Detail_Js.previewFile(event,{$COMMENT->get('id')},{$FILE_DETAIL['attachmentId']});" data-filename="{$FILE_NAME}" href="javascript:void(0)" name="viewfile"> - <span title="{$FILE_DETAIL['rawFileName']}" style="line-height:1.5em;">{$FILE_NAME}</span>  - </a> - <a name="downloadfile" href="{$FILE_DETAIL['url']}"> - <i title="{vtranslate('LBL_DOWNLOAD_FILE',$MODULE_NAME)}" class="pull-left hide fa fa-download alignMiddle"></i> - </a> - </span> - </div> - </div> - {/if} - {/foreach} - </div> - </div> - </div> - <hr> - </div> - </div> - </div> - - </div> - </div> - </div> + {assign var=PARENT_COMMENT_MODEL value=$COMMENT->getParentCommentModel()} + {assign var=CHILD_COMMENTS_MODEL value=$COMMENT->getChildComments()} + + <div class="row"> + <div class="col-lg-12"> + <div class="media"> + <div class="media-left title" id="{$COMMENT->getId()}"> + {assign var=CREATOR_NAME value=$COMMENT->getCommentedByName()} + <div class="col-lg-2 recordImage commentInfoHeader" style ="width:50px; height:50px; font-size: 30px;" data-commentid="{$COMMENT->getId()}" data-parentcommentid="{$COMMENT->get('parent_comments')}" data-relatedto = "{$COMMENT->get('related_to')}"> + {assign var=IMAGE_PATH value=$COMMENT->getImagePath()} + {if !empty($IMAGE_PATH)} + <img src="{$IMAGE_PATH}" width="100%" height="100%" align="left"> + {else} + <div class="name"><span><strong> {$CREATOR_NAME|substr:0:2} </strong></span></div> + {/if} + </div> + </div> + <div class="media-body"> + <div class="comment" style="line-height:1;"> + <span class="creatorName" style="color:blue"> + {$CREATOR_NAME} + </span> + {if $ROLLUP_STATUS and $COMMENT->get('module') ne $MODULE_NAME} + {assign var=SINGULR_MODULE value='SINGLE_'|cat:$COMMENT->get('module')} + {assign var=ENTITY_NAME value=getEntityName($COMMENT->get('module'), array($COMMENT->get('related_to')))} + <span class="text-muted"> + {vtranslate('LBL_ON','Vtiger')} + {vtranslate($SINGULR_MODULE)} + <a href="index.php?module={$COMMENT->get('module')}&view=Detail&record={$COMMENT->get('related_to')}"> + {$ENTITY_NAME[$COMMENT->get('related_to')]} + </a> + </span> + {/if} + <div class=""> + <span class="commentInfoContent"> + {nl2br($COMMENT->get('commentcontent'))} + </span> + </div> + <br> + <div class="commentActionsContainer"> + <span class="commentActions"> + {if $CHILDS_ROOT_PARENT_MODEL} + {assign var=CHILDS_ROOT_PARENT_ID value=$CHILDS_ROOT_PARENT_MODEL->getId()} + {/if} + + {if $COMMENTS_MODULE_MODEL->isPermitted('EditView')} + {if $CHILDS_ROOT_PARENT_MODEL} + {assign var=CHILDS_ROOT_PARENT_ID value=$CHILDS_ROOT_PARENT_MODEL->getId()} + {/if} + <a href="javascript:void(0);" class="cursorPointer replyComment feedback" style="color: blue;"> + {vtranslate('LBL_REPLY',$MODULE_NAME)} + </a> + {if $CURRENTUSER->getId() eq $COMMENT->get('userid')} + + <a href="javascript:void(0);" class="cursorPointer editComment feedback" style="color: blue;"> + {vtranslate('LBL_EDIT',$MODULE_NAME)} + </a> + {/if} + {/if} + + {assign var=CHILD_COMMENTS_COUNT value=$COMMENT->getChildCommentsCount()} + {if $CHILD_COMMENTS_MODEL neq null and ($CHILDS_ROOT_PARENT_ID neq $PARENT_COMMENT_ID)} + {if $COMMENTS_MODULE_MODEL->isPermitted('EditView')} {/if} + <span class="viewThreadBlock" data-child-comments-count="{$CHILD_COMMENTS_COUNT}"> + <a href="javascript:void(0)" class="cursorPointer viewThread"> + <span class="childCommentsCount">{$CHILD_COMMENTS_COUNT}</span> {if $CHILD_COMMENTS_COUNT eq 1}{vtranslate('LBL_REPLY',$MODULE_NAME)}{else}{vtranslate('LBL_REPLIES',$MODULE_NAME)}{/if} + </a> + </span> + <span class="hideThreadBlock" data-child-comments-count="{$CHILD_COMMENTS_COUNT}" style="display:none;"> + <a href="javascript:void(0)" class="cursorPointer hideThread"> + <span class="childCommentsCount">{$CHILD_COMMENTS_COUNT}</span> {if $CHILD_COMMENTS_COUNT eq 1}{vtranslate('LBL_REPLY',$MODULE_NAME)}{else}{vtranslate('LBL_REPLIES',$MODULE_NAME)}{/if} + </a> + </span> + {elseif $CHILD_COMMENTS_MODEL neq null and ($CHILDS_ROOT_PARENT_ID eq $PARENT_COMMENT_ID)} + {if $COMMENTS_MODULE_MODEL->isPermitted('EditView')} {/if} + <span class="viewThreadBlock" data-child-comments-count="{$CHILD_COMMENTS_COUNT}" style="display:none;"> + <a href="javascript:void(0)" class="cursorPointer viewThread"> + <span class="childCommentsCount">{$CHILD_COMMENTS_COUNT}</span> {if $CHILD_COMMENTS_COUNT eq 1}{vtranslate('LBL_REPLY',$MODULE_NAME)}{else}{vtranslate('LBL_REPLIES',$MODULE_NAME)}{/if} + </a> + </span> + <span class="hideThreadBlock" data-child-comments-count="{$CHILD_COMMENTS_COUNT}"> + <a href="javascript:void(0)" class="cursorPointer hideThread"> + <span class="childCommentsCount">{$CHILD_COMMENTS_COUNT}</span> {if $CHILD_COMMENTS_COUNT eq 1}{vtranslate('LBL_REPLY',$MODULE_NAME)}{else}{vtranslate('LBL_REPLIES',$MODULE_NAME)}{/if} + </a> + </span> + {/if} + </span> + + <span class="commentTime text-muted cursorDefault" style="padding:20px;"> + <small title="{Vtiger_Util_Helper::formatDateTimeIntoDayString($COMMENT->getCommentedTime())}">{Vtiger_Util_Helper::formatDateDiffInStrings($COMMENT->getCommentedTime())}</small> + </span> + </div> + <br> + {assign var="REASON_TO_EDIT" value=$COMMENT->get('reasontoedit')} + <div class="editedStatus" name="editStatus"> + <div class="{if empty($REASON_TO_EDIT)}hide{/if} editReason"> + <p class="text-muted"><small>[ {vtranslate('LBL_EDIT_REASON',$MODULE_NAME)} ] : <span name="editReason" class="textOverflowEllipsis">{nl2br($REASON_TO_EDIT)}</span></small></p> + </div> + {if $COMMENT->getCommentedTime() neq $COMMENT->getModifiedTime()} + <p class="text-muted cursorDefault"><small><em>{vtranslate('LBL_MODIFIED',$MODULE_NAME)}</em></small> <small title="{Vtiger_Util_Helper::formatDateTimeIntoDayString($COMMENT->getModifiedTime())}" class="commentModifiedTime">{Vtiger_Util_Helper::formatDateDiffInStrings($COMMENT->getModifiedTime())}</small></p> + {/if} + </div> + <div style="margin-top:5px;"> + {assign var="FILE_DETAILS" value=$COMMENT->getFileNameAndDownloadURL()} + {foreach key=index item=FILE_DETAIL from=$FILE_DETAILS} + {assign var="FILE_NAME" value=$FILE_DETAIL['trimmedFileName']} + {if !empty($FILE_NAME)} + <div class="row-fluid"> + <div class="span11 commentAttachmentName"> + <span class="filePreview"> + <a onclick="Vtiger_Detail_Js.previewFile(event,{$COMMENT->get('id')},{$FILE_DETAIL['attachmentId']});" data-filename="{$FILE_NAME}" href="javascript:void(0)" name="viewfile"> + <span title="{$FILE_DETAIL['rawFileName']}" style="line-height:1.5em;">{$FILE_NAME}</span>  + </a> + <a name="downloadfile" href="{$FILE_DETAIL['url']}"> + <i title="{vtranslate('LBL_DOWNLOAD_FILE',$MODULE_NAME)}" class="pull-left hide fa fa-download alignMiddle"></i> + </a> + </span> + </div> + </div> + {/if} + {/foreach} + </div> + </div> + </div> + <hr> + </div> + </div> + </div> + + </div> + </div> + </div> {/strip} \ No newline at end of file diff --git a/layouts/v7/modules/Vtiger/CommentThreadList.tpl b/layouts/v7/modules/Vtiger/CommentThreadList.tpl index 9db9ad5c1f6c3c72aa237f52d0b90c6af03558c0..df9ef5db7c2723ee802e08557d49703b72e4058d 100644 --- a/layouts/v7/modules/Vtiger/CommentThreadList.tpl +++ b/layouts/v7/modules/Vtiger/CommentThreadList.tpl @@ -9,93 +9,97 @@ * ********************************************************************************/ -->*} + +{assign var=IS_CREATABLE value=$COMMENTS_MODULE_MODEL->isPermitted('CreateView')} +{assign var=IS_EDITABLE value=$COMMENTS_MODULE_MODEL->isPermitted('EditView')} + <div class="commentDiv cursorPointer"> - <div class="singleComment"> - <input type="hidden" name="is_private" value="{$COMMENT->get('is_private')}"> - <div class="commentInfoHeader" data-commentid="{$COMMENT->getId()}" data-parentcommentid="{$COMMENT->get('parent_comments')}"> - {assign var=PARENT_COMMENT_MODEL value=$COMMENT->getParentCommentModel()} - {assign var=CHILD_COMMENTS_MODEL value=$COMMENT->getChildComments()} - <div class="col-lg-12"> - <div class="media"> - <div class="media-left title" id="{$COMMENT->getId()}"> - {assign var=CREATOR_NAME value=$COMMENT->getCommentedByName()} - <div class="col-lg-1 recordImage commentInfoHeader" style="width:50px;height:50px;" data-commentid="{$COMMENT->getId()}" data-parentcommentid="{$COMMENT->get('parent_comments')}"> - <div class="name"> - <span style="font-size:30px"> - <strong> {$CREATOR_NAME|substr:0:2} </strong> - </span> - </div> - </div> - </div> - <div class="media-body"> - <div class="comment" style="line-height:1;"> - <span class="creatorName" style="color:blue"> - {$CREATOR_NAME} - </span> - <div class=""> - <span class="commentInfoContent"> - {nl2br($COMMENT->get('commentcontent'))} - </span> - </div> - <br> - <div class="commentActionsContainer"> - <span class="commentActions"> - {if $CHILDS_ROOT_PARENT_MODEL} - {assign var=CHILDS_ROOT_PARENT_ID value=$CHILDS_ROOT_PARENT_MODEL->getId()} - {/if} - - {if $COMMENTS_MODULE_MODEL->isPermitted('EditView')} - {if $CHILDS_ROOT_PARENT_MODEL} - {assign var=CHILDS_ROOT_PARENT_ID value=$CHILDS_ROOT_PARENT_MODEL->getId()} - {/if} - <a href="javascript:void(0);" class="cursorPointer replyComment feedback"> - {vtranslate('LBL_REPLY',$MODULE_NAME)} - </a> - {if $CURRENTUSER->getId() eq $COMMENT->get('userid')} - <span>|</span> - <a href="javascript:void(0);" class="cursorPointer editComment feedback"> - {vtranslate('LBL_EDIT',$MODULE_NAME)} - </a> - {/if} - {/if} - - {assign var=CHILD_COMMENTS_COUNT value=$COMMENT->getChildCommentsCount()} - {if $CHILD_COMMENTS_MODEL neq null and ($CHILDS_ROOT_PARENT_ID neq $PARENT_COMMENT_ID)} - {if $COMMENTS_MODULE_MODEL->isPermitted('EditView')} <span style="color:black">|</span> {/if} - <span class="viewThreadBlock" data-child-comments-count="{$CHILD_COMMENTS_COUNT}"> - <a href="javascript:void(0)" class="cursorPointer viewThread"> - <span class="childCommentsCount">{$CHILD_COMMENTS_COUNT}</span> {if $CHILD_COMMENTS_COUNT eq 1}{vtranslate('LBL_REPLY',$MODULE_NAME)}{else}{vtranslate('LBL_REPLIES',$MODULE_NAME)}{/if} - </a> - </span> - <span class="hideThreadBlock" data-child-comments-count="{$CHILD_COMMENTS_COUNT}" style="display:none;"> - <a href="javascript:void(0)" class="cursorPointer hideThread"> - <span class="childCommentsCount">{$CHILD_COMMENTS_COUNT}</span> {if $CHILD_COMMENTS_COUNT eq 1}{vtranslate('LBL_REPLY',$MODULE_NAME)}{else}{vtranslate('LBL_REPLIES',$MODULE_NAME)}{/if} - </a> - </span> - {elseif $CHILD_COMMENTS_MODEL neq null and ($CHILDS_ROOT_PARENT_ID eq $PARENT_COMMENT_ID)} - {if $COMMENTS_MODULE_MODEL->isPermitted('EditView')} <span style="color:black">|</span> {/if} - <span class="viewThreadBlock" data-child-comments-count="{$CHILD_COMMENTS_COUNT}" style="display:none;"> - <a href="javascript:void(0)" class="cursorPointer viewThread"> - <span class="childCommentsCount">{$CHILD_COMMENTS_COUNT}</span> {if $CHILD_COMMENTS_COUNT eq 1}{vtranslate('LBL_REPLY',$MODULE_NAME)}{else}{vtranslate('LBL_REPLIES',$MODULE_NAME)}{/if} - </a> - </span> - <span class="hideThreadBlock" data-child-comments-count="{$CHILD_COMMENTS_COUNT}"> - <a href="javascript:void(0)" class="cursorPointer hideThread"> - <span class="childCommentsCount">{$CHILD_COMMENTS_COUNT}</span> {if $CHILD_COMMENTS_COUNT eq 1}{vtranslate('LBL_REPLY',$MODULE_NAME)}{else}{vtranslate('LBL_REPLIES',$MODULE_NAME)}{/if} - </a> - </span> - {/if} - </span> - - <span class="commentTime" style="padding:20px;"> - <small title="{Vtiger_Util_Helper::formatDateTimeIntoDayString($COMMENT->getCommentedTime())}">{Vtiger_Util_Helper::formatDateAndDateDiffInString($COMMENT->getCommentedTime())}</small> - </span> - </div> - </div> - </div> - <hr> - </div> - </div> - </div> - </div> + <div class="singleComment"> + <input type="hidden" name="is_private" value="{$COMMENT->get('is_private')}"> + <div class="commentInfoHeader" data-commentid="{$COMMENT->getId()}" data-parentcommentid="{$COMMENT->get('parent_comments')}"> + {assign var=PARENT_COMMENT_MODEL value=$COMMENT->getParentCommentModel()} + {assign var=CHILD_COMMENTS_MODEL value=$COMMENT->getChildComments()} + <div class="col-lg-12"> + <div class="media" {if $COMMENT->get('is_private')}style="background: #fff9ea;"{/if}> + <div class="media-left title" id="{$COMMENT->getId()}"> + {assign var=CREATOR_NAME value=$COMMENT->getCommentedByName()} + <div class="col-lg-2 recordImage commentInfoHeader" style ="width:50px; height:50px; font-size: 30px;" data-commentid="{$COMMENT->getId()}" data-parentcommentid="{$COMMENT->get('parent_comments')}" data-relatedto = "{$COMMENT->get('related_to')}"> + {assign var=IMAGE_PATH value=$COMMENT->getImagePath()} + {if !empty($IMAGE_PATH)} + <img src="{$IMAGE_PATH}" width="100%" height="100%" align="left"> + {else} + <div class="name" style="font-size: 30px;"><span><strong> {$CREATOR_NAME|mb_substr:0:2|escape:"html"} </strong></span></div> + {/if} + </div> + </div> + <div class="media-body"> + <div class="comment" style="line-height:1;"> + <span class="creatorName" > + {$CREATOR_NAME} + </span> + <span class="commentTime text-muted cursorDefault"> + <small title="{Vtiger_Util_Helper::formatDateTimeIntoDayString($COMMENT->getCommentedTime())}">{Vtiger_Util_Helper::formatDateDiffInStrings($COMMENT->getCommentedTime())}</small> + </span> + <div class=""> + <span class="commentInfoContent"> + {nl2br($COMMENT->get('commentcontent'))} + </span> + </div> + <br> + <div class="commentActionsContainer"> + <span class="commentActions"> + {if $CHILDS_ROOT_PARENT_MODEL} + {assign var=CHILDS_ROOT_PARENT_ID value=$CHILDS_ROOT_PARENT_MODEL->getId()} + {/if} + {assign var=CHILD_COMMENTS_COUNT value=$COMMENT->getChildCommentsCount()} + {if $CHILD_COMMENTS_MODEL neq null and ($CHILDS_ROOT_PARENT_ID neq $PARENT_COMMENT_ID)} + <span class="viewThreadBlock" data-child-comments-count="{$CHILD_COMMENTS_COUNT}"> + <a href="javascript:void(0)" class="cursorPointer viewThread"> + <span class="childCommentsCount">{$CHILD_COMMENTS_COUNT}</span> {if $CHILD_COMMENTS_COUNT eq 1}{vtranslate('LBL_REPLY',$MODULE_NAME)}{else}{vtranslate('LBL_REPLIES',$MODULE_NAME)}{/if} + </a> + </span> + <span class="hideThreadBlock" data-child-comments-count="{$CHILD_COMMENTS_COUNT}" style="display:none;"> + <a href="javascript:void(0)" class="cursorPointer hideThread"> + <span class="childCommentsCount">{$CHILD_COMMENTS_COUNT}</span> {if $CHILD_COMMENTS_COUNT eq 1}{vtranslate('LBL_REPLY',$MODULE_NAME)}{else}{vtranslate('LBL_REPLIES',$MODULE_NAME)}{/if} + </a> + </span> + {elseif $CHILD_COMMENTS_MODEL neq null and ($CHILDS_ROOT_PARENT_ID eq $PARENT_COMMENT_ID)} + <span class="viewThreadBlock" data-child-comments-count="{$CHILD_COMMENTS_COUNT}" style="display:none;"> + <a href="javascript:void(0)" class="cursorPointer viewThread"> + <span class="childCommentsCount">{$CHILD_COMMENTS_COUNT}</span> {if $CHILD_COMMENTS_COUNT eq 1}{vtranslate('LBL_REPLY',$MODULE_NAME)}{else}{vtranslate('LBL_REPLIES',$MODULE_NAME)}{/if} + </a> + </span> + <span class="hideThreadBlock" data-child-comments-count="{$CHILD_COMMENTS_COUNT}"> + <a href="javascript:void(0)" class="cursorPointer hideThread"> + <span class="childCommentsCount">{$CHILD_COMMENTS_COUNT}</span> {if $CHILD_COMMENTS_COUNT eq 1}{vtranslate('LBL_REPLY',$MODULE_NAME)}{else}{vtranslate('LBL_REPLIES',$MODULE_NAME)}{/if} + <img class="alignMiddle" src="{vimage_path('arrowdown.png')}" /> + </a> + </span> + {/if} + <span class="commemntActionsubblock" > + {if $CHILDS_ROOT_PARENT_MODEL} + {assign var=CHILDS_ROOT_PARENT_ID value=$CHILDS_ROOT_PARENT_MODEL->getId()} + {/if} + {if $IS_CREATABLE} + {if $CHILD_COMMENTS_COUNT}<span> | </span>{/if} + <a href="javascript:void(0);" class="cursorPointer replyComment feedback" style="color: blue;"> + {vtranslate('LBL_REPLY',$MODULE_NAME)} + </a> + {/if} + {if $CURRENTUSER->getId() eq $COMMENT->get('userid') && $IS_EDITABLE} + {if $IS_CREATABLE} {/if} + <a href="javascript:void(0);" class="cursorPointer editComment feedback" style="color: blue;"> + {vtranslate('LBL_EDIT',$MODULE_NAME)} + </a> + {/if} + </span> + </span> + </div> + </div> + </div> + <hr> + </div> + </div> + </div> + </div> </div> diff --git a/layouts/v7/modules/Vtiger/CommentsList.tpl b/layouts/v7/modules/Vtiger/CommentsList.tpl index 9fa58cd87972960c83d8fa096199a9aff6b5fb00..2d7764f9d2c10ef0cd010f86c5feca7fd8aa86b7 100644 --- a/layouts/v7/modules/Vtiger/CommentsList.tpl +++ b/layouts/v7/modules/Vtiger/CommentsList.tpl @@ -7,40 +7,44 @@ * All Rights Reserved. ************************************************************************************} {strip} + +{assign var=IS_CREATABLE value=$COMMENTS_MODULE_MODEL->isPermitted('CreateView')} +{assign var=IS_EDITABLE value=$COMMENTS_MODULE_MODEL->isPermitted('EditView')} + {if !empty($PARENT_COMMENTS)} - <ul class="unstyled"> - {if $CURRENT_COMMENT} - {assign var=CHILDS_ROOT_PARENT_MODEL value=$CURRENT_COMMENT} - {assign var=CURRENT_COMMENT_PARENT_MODEL value=$CURRENT_COMMENT->getParentCommentModel()} - {while $CURRENT_COMMENT_PARENT_MODEL neq false} - {assign var=TEMP_COMMENT value=$CURRENT_COMMENT_PARENT_MODEL} - {assign var=CURRENT_COMMENT_PARENT_MODEL value=$CURRENT_COMMENT_PARENT_MODEL->getParentCommentModel()} - {if $CURRENT_COMMENT_PARENT_MODEL eq false} - {assign var=CHILDS_ROOT_PARENT_MODEL value=$TEMP_COMMENT} - {/if} - {/while} - {/if} - {if is_array($PARENT_COMMENTS)} - {foreach key=Index item=COMMENT from=$PARENT_COMMENTS} + <ul class="unstyled"> + {if $CURRENT_COMMENT} + {assign var=CHILDS_ROOT_PARENT_MODEL value=$CURRENT_COMMENT} + {assign var=CURRENT_COMMENT_PARENT_MODEL value=$CURRENT_COMMENT->getParentCommentModel()} + {while $CURRENT_COMMENT_PARENT_MODEL neq false} + {assign var=TEMP_COMMENT value=$CURRENT_COMMENT_PARENT_MODEL} + {assign var=CURRENT_COMMENT_PARENT_MODEL value=$CURRENT_COMMENT_PARENT_MODEL->getParentCommentModel()} + {if $CURRENT_COMMENT_PARENT_MODEL eq false} + {assign var=CHILDS_ROOT_PARENT_MODEL value=$TEMP_COMMENT} + {/if} + {/while} + {/if} + {if is_array($PARENT_COMMENTS)} + {foreach key=Index item=COMMENT from=$PARENT_COMMENTS} {assign var=PARENT_COMMENT_ID value=$COMMENT->getId()} - <li class="commentDetails" {if $COMMENT->get('is_private')}style="background: #fff9ea;"{/if}> - {include file='Comment.tpl'|@vtemplate_path COMMENT=$COMMENT COMMENT_MODULE_MODEL=$COMMENTS_MODULE_MODEL} + <li class="commentDetails"> + {include file='Comment.tpl'|@vtemplate_path COMMENT=$COMMENT COMMENT_MODULE_MODEL=$COMMENTS_MODULE_MODEL} - {if $CHILDS_ROOT_PARENT_MODEL} - {if $CHILDS_ROOT_PARENT_MODEL->getId() eq $PARENT_COMMENT_ID} - {assign var=CHILD_COMMENTS_MODEL value=$CHILDS_ROOT_PARENT_MODEL->getChildComments()} - {include file='CommentsListIteration.tpl'|@vtemplate_path CHILD_COMMENTS_MODEL=$CHILD_COMMENTS_MODEL} - {/if} - {/if} + {if $CHILDS_ROOT_PARENT_MODEL} + {if $CHILDS_ROOT_PARENT_MODEL->getId() eq $PARENT_COMMENT_ID} + {assign var=CHILD_COMMENTS_MODEL value=$CHILDS_ROOT_PARENT_MODEL->getChildComments()} + {include file='CommentsListIteration.tpl'|@vtemplate_path CHILD_COMMENTS_MODEL=$CHILD_COMMENTS_MODEL} + {/if} + {/if} </li> {/foreach} - {else} - {include file='Comment.tpl'|@vtemplate_path COMMENT=$PARENT_COMMENTS} - {/if} - </ul> + {else} + {include file='Comment.tpl'|@vtemplate_path COMMENT=$PARENT_COMMENTS} + {/if} + </ul> {else} - <div class="noCommentsMsgContainer" style='padding:20px;'> - <p class="textAlignCenter">{vtranslate('LBL_NO_COMMENTS',$MODULE_NAME)}</p> - </div> + <div class="noCommentsMsgContainer" style='padding:20px;'> + <p class="textAlignCenter">{vtranslate('LBL_NO_COMMENTS',$MODULE_NAME)}</p> + </div> {/if} {/strip} \ No newline at end of file diff --git a/layouts/v7/modules/Vtiger/ListViewContents.tpl b/layouts/v7/modules/Vtiger/ListViewContents.tpl index d101bb2c648ab933e8acc305fea0657b694136a5..8041394383cf76081a8faa0a7734728ab09316f5 100644 --- a/layouts/v7/modules/Vtiger/ListViewContents.tpl +++ b/layouts/v7/modules/Vtiger/ListViewContents.tpl @@ -212,7 +212,7 @@ <div class="emptyRecordsContent"> {assign var=SINGLE_MODULE value="SINGLE_$MODULE"} {vtranslate('LBL_NO')} {vtranslate($MODULE, $MODULE)} {vtranslate('LBL_FOUND')}. - {if $IS_MODULE_EDITABLE} + {if $IS_RECORD_CREATABLE} <a style="color:blue" href="{$MODULE_MODEL->getCreateRecordUrl()}"> {vtranslate('LBL_CREATE')}</a> {if Users_Privileges_Model::isPermitted($MODULE, 'Import') && $LIST_VIEW_MODEL->isImportEnabled()} {vtranslate('LBL_OR', $MODULE)} diff --git a/layouts/v7/modules/Vtiger/RecentComments.tpl b/layouts/v7/modules/Vtiger/RecentComments.tpl index 3f5b3fcbef214016cd685dafacf6dad5eb3e9922..c0f80373c4eb0330f2cea89085a3c48629fb2858 100644 --- a/layouts/v7/modules/Vtiger/RecentComments.tpl +++ b/layouts/v7/modules/Vtiger/RecentComments.tpl @@ -9,202 +9,240 @@ {strip} {* Change to this also refer: AddCommentForm.tpl *} {assign var="COMMENT_TEXTAREA_DEFAULT_ROWS" value="2"} +{assign var="PRIVATE_COMMENT_MODULES" value=Vtiger_Functions::getPrivateCommentModules()} +{assign var=IS_CREATABLE value=$COMMENTS_MODULE_MODEL->isPermitted('CreateView')} +{assign var=IS_EDITABLE value=$COMMENTS_MODULE_MODEL->isPermitted('EditView')} <div class="commentContainer recentComments"> - <div class="commentTitle"> - {if $COMMENTS_MODULE_MODEL->isPermitted('EditView')} - <div class="addCommentBlock"> - <div class="row"> - <div class=" col-lg-12"> - <div class="commentTextArea "> - <textarea name="commentcontent" class="commentcontent form-control mention_listener" placeholder="{vtranslate('LBL_POST_YOUR_COMMENT_HERE', $MODULE_NAME)}" rows="{$COMMENT_TEXTAREA_DEFAULT_ROWS}"></textarea> - </div> - </div> - </div> - <div class='row'> - <div class="col-xs-6"> - {include file=vtemplate_path($FIELD_MODEL->getUITypeModel()->getTemplateName(),$MODULE_NAME) MODULE="ModComments"} - </div> - <div class='col-xs-6'> - <div class="pull-right"> - <button class="btn btn-success btn-sm detailViewSaveComment" type="button" data-mode="add">{vtranslate('LBL_POST', $MODULE_NAME)}</button> - </div> - </div> - </div> - </div> + <div class="commentTitle"> + {if $IS_CREATABLE} + <div class="addCommentBlock"> + <div class="row"> + <div class=" col-lg-12"> + <div class="commentTextArea "> + <textarea name="commentcontent" class="commentcontent form-control mention_listener" placeholder="{vtranslate('LBL_POST_YOUR_COMMENT_HERE', $MODULE_NAME)}" rows="{$COMMENT_TEXTAREA_DEFAULT_ROWS}"></textarea> + </div> + </div> + </div> + <div class='row'> + <div class="col-xs-6 pull-right paddingTop5 paddingLeft0"> + <div style="text-align: right;"> + {if in_array($MODULE_NAME, $PRIVATE_COMMENT_MODULES)} + <div class="" style="margin: 7px 0;"> + <label> + <input type="checkbox" id="is_private" style="margin:2px 0px -2px 0px"> {vtranslate('LBL_INTERNAL_COMMENT')} + </label> + <i class="fa fa-question-circle cursorPointer" data-toggle="tooltip" data-placement="top" data-original-title="{vtranslate('LBL_INTERNAL_COMMENT_INFO')}"></i> + </div> + {/if} + <button class="btn btn-success btn-sm detailViewSaveComment" type="button" data-mode="add">{vtranslate('LBL_POST', $MODULE_NAME)}</button> + </div> + </div> + <div class="col-xs-6 pull-left"> + {include file=vtemplate_path($FIELD_MODEL->getUITypeModel()->getTemplateName(),$MODULE_NAME) MODULE="ModComments"} + </div> + </div> + </div> {/if} </div> <hr> - <div class="recentCommentsHeader row"> - <h4 class="display-inline-block col-lg-7"> - {"Recent Comments"} - </h4> - {if $MODULE_NAME ne 'Leads'} - <div class="col-lg-5 pull-right" style="margin-top:5px;text-align:right;padding-right:20px;"> - <div class="display-inline-block"> - <span class="">{vtranslate('LBL_ROLL_UP',$QUALIFIED_MODULE)} </span> - <span class="fa fa-question-circle" data-toggle="tooltip" data-placement="top" title="{vtranslate('LBL_ROLLUP_COMMENTS_INFO',$QUALIFIED_MODULE)}"></span> - </div> - <input type="checkbox" class="bootstrap-switch pull-right" id="rollupcomments" hascomments="1" startindex="{$STARTINDEX}" data-view="summary" rollupid="{$ROLLUPID}" - rollup-status="{$ROLLUP_STATUS}" module="{$MODULE_NAME}" record="{$PARENT_RECORD}" checked data-on-color="success"/> - </div> - {/if} - </div> - <div class="commentsBody container-fluid"> + <div class="recentCommentsHeader row"> + <h4 class="display-inline-block col-lg-7 textOverflowEllipsis" title="{vtranslate('LBL_RECENT_COMMENTS', $MODULE_NAME)}"> + {vtranslate('LBL_RECENT_COMMENTS', $MODULE_NAME)} + </h4> + {if $MODULE_NAME ne 'Leads'} + <div class="col-lg-5 commentHeader pull-right" style="margin-top:5px;text-align:right;padding-right:20px;"> + <div class="display-inline-block"> + <span class="">{vtranslate('LBL_ROLL_UP',$QUALIFIED_MODULE)} </span> + <span class="fa fa-question-circle" data-toggle="tooltip" data-placement="top" title="{vtranslate('LBL_ROLLUP_COMMENTS_INFO',$QUALIFIED_MODULE)}"></span> + </div> + <input type="checkbox" class="bootstrap-switch pull-right" id="rollupcomments" hascomments="1" startindex="{$STARTINDEX}" data-view="summary" rollupid="{$ROLLUPID}" + rollup-status="{$ROLLUP_STATUS}" module="{$MODULE_NAME}" record="{$PARENT_RECORD}" checked data-on-color="success"/> + </div> + {/if} + </div> + <div class="commentsBody"> {if !empty($COMMENTS)} - <div class="recentCommentsBody"> - {assign var=COMMENTS_COUNT value=count($COMMENTS)} - {foreach key=index item=COMMENT from=$COMMENTS} - {assign var=CREATOR_NAME value=$COMMENT->getCommentedByName()} - <div class="commentDetails"> - <div class="singleComment"> - {assign var=PARENT_COMMENT_MODEL value=$COMMENT->getParentCommentModel()} - {assign var=CHILD_COMMENTS_MODEL value=$COMMENT->getChildComments()} - <div class="row"> - <div class="col-lg-12"> - <div class="col-lg-2 recordImage commentInfoHeader" data-commentid="{$COMMENT->getId()}" data-parentcommentid="{$COMMENT->get('parent_comments')}" data-relatedto = "{$COMMENT->get('related_to')}"> - {assign var=IMAGE_PATH value=$COMMENT->getImagePath()} - {if !empty($IMAGE_PATH)} - <img src="{$IMAGE_PATH}" width="100%" height="100%" align="left"> - {else} - <div class="name"><span><strong> {$CREATOR_NAME|substr:0:2} </strong></span></div> - {/if} - </div> - <div class="comment col-lg-10" style="line-height:1;"> - <span class="creatorName"> - {$CREATOR_NAME} - </span> - {if $ROLLUP_STATUS and $COMMENT->get('module') ne $MODULE_NAME} - {assign var=SINGULR_MODULE value='SINGLE_'|cat:$COMMENT->get('module')} - {assign var=ENTITY_NAME value=getEntityName($COMMENT->get('module'), array($COMMENT->get('related_to')))} - <span class="text-muted textOverflowEllipsis"> - {vtranslate('LBL_ON','Vtiger')} - {vtranslate($SINGULR_MODULE)} - <a href="index.php?module={$COMMENT->get('module')}&view=Detail&record={$COMMENT->get('related_to')}"> - {$ENTITY_NAME[$COMMENT->get('related_to')]} - </a> - </span> - {/if} - <div class=""> - <span class="commentInfoContent"> - {nl2br($COMMENT->get('commentcontent'))} - </span> - </div> - <br> - <div class="commentActionsContainer"> - {if $COMMENTS_MODULE_MODEL->isPermitted('EditView')} - <span> - <a href="javascript:void(0);" class="cursorPointer replyComment feedback" style="color: blue;"> - {vtranslate('LBL_REPLY',$MODULE_NAME)} - </a> - {if $CURRENTUSER->getId() eq $COMMENT->get('userid')} - - <a href="javascript:void(0);" class="cursorPointer editComment feedback" style="color: blue;"> - {vtranslate('LBL_EDIT',$MODULE_NAME)} - </a> - {/if} - </span> - {/if} - <span> - {if $PARENT_COMMENT_MODEL neq false or $CHILD_COMMENTS_MODEL neq null} - - <a href="javascript:void(0);" class="cursorPointer detailViewThread">{vtranslate('LBL_VIEW_THREAD',$MODULE_NAME)}</a> - {/if} - </span> + <div class="recentCommentsBody container-fluid"> + {assign var=COMMENTS_COUNT value=count($COMMENTS)} + {foreach key=index item=COMMENT from=$COMMENTS} + {assign var=CREATOR_NAME value={decode_html($COMMENT->getCommentedByName())}} + <div class="commentDetails"> + <div class="singleComment" {if $COMMENT->get('is_private')}style="background: #fff9ea;"{/if}> + <input type="hidden" name='is_private' value="{$COMMENT->get('is_private')}"> + {assign var=PARENT_COMMENT_MODEL value=$COMMENT->getParentCommentModel()} + {assign var=CHILD_COMMENTS_MODEL value=$COMMENT->getChildComments()} + <div class="row"> + <div class="col-lg-12"> + <div class="media"> + <div class="media-left title"> + <div class="col-lg-2 recordImage commentInfoHeader" data-commentid="{$COMMENT->getId()}" data-parentcommentid="{$COMMENT->get('parent_comments')}" data-relatedto = "{$COMMENT->get('related_to')}"> + {assign var=IMAGE_PATH value=$COMMENT->getImagePath()} + {if !empty($IMAGE_PATH)} + <img src="{$IMAGE_PATH}" width="40px" height="40px" align="left"> + {else} + <div class="name"><span><strong> {$CREATOR_NAME|mb_substr:0:2|escape:"html"} </strong></span></div> + {/if} + </div> + </div> + <div class="media-body" style="width:100%"> + <div class="comment" style="line-height:1;"> + <span class="creatorName"> + {$CREATOR_NAME} + </span> + + {if $ROLLUP_STATUS and ($COMMENT->get('module') ne $MODULE_NAME or $COMMENT->get('related_to') ne $PARENT_RECORD)} + {assign var=SINGULR_MODULE value='SINGLE_'|cat:$COMMENT->get('module')} + {assign var=ENTITY_NAME value=getEntityName($COMMENT->get('module'), array($COMMENT->get('related_to')))} + <span class="text-muted wordbreak display-inline-block"> + {vtranslate('LBL_ON','Vtiger')} + {vtranslate($SINGULR_MODULE,$COMMENT->get('module'))} + <a href="index.php?module={$COMMENT->get('module')}&view=Detail&record={$COMMENT->get('related_to')}"> + {$ENTITY_NAME[$COMMENT->get('related_to')]} + </a> + </span> + {/if} + <span class="commentTime text-muted cursorDefault"> + <small title="{Vtiger_Util_Helper::formatDateTimeIntoDayString($COMMENT->getCommentedTime())}">{Vtiger_Util_Helper::formatDateDiffInStrings($COMMENT->getCommentedTime())}</small> + </span> - <span class="commentTime pull-right"> - <p class="text-muted"><small title="{Vtiger_Util_Helper::formatDateTimeIntoDayString($COMMENT->getCommentedTime())}">{Vtiger_Util_Helper::formatDateDiffInStrings($COMMENT->getCommentedTime())}</small></p> - </span> - </div> - <br> - <div class="row commentEditStatus" name="editStatus"> - {assign var="REASON_TO_EDIT" value=$COMMENT->get('reasontoedit')} - <span class="col-lg-5{if empty($REASON_TO_EDIT)} hide{/if}"> - <p class="text-muted"> - <small> - [ {vtranslate('LBL_EDIT_REASON',$MODULE_NAME)} ] : - <span name="editReason" class="textOverflowEllipsis">{nl2br($REASON_TO_EDIT)}</span> - </small> - </p> - </span> - {if $COMMENT->getCommentedTime() neq $COMMENT->getModifiedTime()} - <span class="{if empty($REASON_TO_EDIT)}row{else} col-lg-7{/if}"> - <p class="text-muted pull-right"> - <small><em>{vtranslate('LBL_MODIFIED',$MODULE_NAME)}</em></small> - <small title="{Vtiger_Util_Helper::formatDateTimeIntoDayString($COMMENT->getModifiedTime())}" class="commentModifiedTime">{Vtiger_Util_Helper::formatDateDiffInStrings($COMMENT->getModifiedTime())}</small> - </p> - </span> - {/if} - </div> - <div style="margin-top:5px;"> - {assign var="FILE_DETAILS" value=$COMMENT->getFileNameAndDownloadURL()} - {foreach key=index item=FILE_DETAIL from=$FILE_DETAILS} - {assign var="FILE_NAME" value=$FILE_DETAIL['trimmedFileName']} - {if !empty($FILE_NAME)} - <div class="row-fluid"> + <div class=""> + {if $COMMENT->get('module') eq 'Cases' and !$COMMENT->get('is_private')} + {assign var=COMMENT_CONTENT value={decode_html($COMMENT->get('commentcontent'))}} + {else} + {assign var=COMMENT_CONTENT value={nl2br($COMMENT->get('commentcontent'))}} + {/if} + {if $COMMENT_CONTENT} + {assign var=DISPLAYNAME value={decode_html($COMMENT_CONTENT)}} + <span class="commentInfoContent" style="display: block" data-fullComment="{$COMMENT_CONTENT|escape:"html"}" data-shortComment="{$DISPLAYNAME|mb_substr:0:200|escape:"html"}..." data-more='{vtranslate('LBL_SHOW_MORE',$MODULE)}' data-less='{vtranslate('LBL_SHOW',$MODULE)} {vtranslate('LBL_LESS',$MODULE)}'> + {if $DISPLAYNAME|count_characters:true gt 200} + {mb_substr(trim($DISPLAYNAME),0,200)}... + <br><a class="pull-right toggleComment showMore"><small>{vtranslate('LBL_SHOW_MORE',$MODULE)}</small></a> + {else} + {$COMMENT_CONTENT} + {/if} + </span> + {/if} + </div> + {assign var="FILE_DETAILS" value=$COMMENT->getFileNameAndDownloadURL()} + {foreach key=index item=FILE_DETAIL from=$FILE_DETAILS} + {assign var="FILE_NAME" value=$FILE_DETAIL['trimmedFileName']} + {if !empty($FILE_NAME)} <div class="commentAttachmentName"> - <div class="filePreview"> - <a onclick="Vtiger_Detail_Js.previewFile(event,{$COMMENT->get('id')},{$FILE_DETAIL['attachmentId']});" data-filename="{$FILE_NAME}" href="javascript:void(0)" name="viewfile"> + <div class="filePreview clearfix"> + <span class="fa fa-paperclip cursorPointer" ></span> + <a class="previewfile" onclick="Vtiger_Detail_Js.previewFile(event,{$COMMENT->get('id')},{$FILE_DETAIL['attachmentId']});" data-filename="{$FILE_NAME}" href="javascript:void(0)" name="viewfile"> <span title="{$FILE_DETAIL['rawFileName']}" style="line-height:1.5em;">{$FILE_NAME}</span>  </a> <a name="downloadfile" href="{$FILE_DETAIL['url']}"> - <i title="{vtranslate('LBL_DOWNLOAD_FILE',$MODULE_NAME)}" class="pull-left hide fa fa-download alignMiddle"></i> + <i title="{vtranslate('LBL_DOWNLOAD_FILE',$MODULE_NAME)}" class="hide fa fa-download alignMiddle" ></i> </a> </div> </div> + {/if} + {/foreach} + + <div class="commentActionsContainer" style="margin-top: 2px;"> + <span> + {if $PARENT_COMMENT_MODEL neq false or $CHILD_COMMENTS_MODEL neq null} + <a href="javascript:void(0);" class="cursorPointer detailViewThread">{vtranslate('LBL_VIEW_THREAD',$MODULE_NAME)}</a> + {/if} + </span> + <span class="summarycommemntActionblock" > + {if $IS_CREATABLE} + {if $PARENT_COMMENT_MODEL neq false or $CHILD_COMMENTS_MODEL neq null}<span> | </span>{/if} + <a href="javascript:void(0);" class="cursorPointer replyComment feedback" style="color: blue;"> + {vtranslate('LBL_REPLY',$MODULE_NAME)} + </a> + {/if} + {if $CURRENTUSER->getId() eq $COMMENT->get('userid') && $IS_EDITABLE} + {if $IS_CREATABLE} {/if} + <a href="javascript:void(0);" class="cursorPointer editComment feedback" style="color: blue;"> + {vtranslate('LBL_EDIT',$MODULE_NAME)} + </a> + {/if} + </span> + </div> + <br> + <div class="row commentEditStatus marginBottom10px" name="editStatus"> + {assign var="REASON_TO_EDIT" value=$COMMENT->get('reasontoedit')} + <span class="col-lg-5 col-md-5 col-sm-5{if empty($REASON_TO_EDIT)} hide{/if}"> + <small> [{vtranslate('LBL_EDIT_REASON',$MODULE_NAME)}]</small> + </span> + {if $COMMENT->getCommentedTime() neq $COMMENT->getModifiedTime()} + <span class="{if empty($REASON_TO_EDIT)}row{else} col-lg-7 col-md-7 col-sm-7{/if}"> + <p class="text-muted pull-right"> + <small><em>{vtranslate('LBL_MODIFIED',$MODULE_NAME)}</em></small> + <small title="{Vtiger_Util_Helper::formatDateTimeIntoDayString($COMMENT->getModifiedTime())}" class="commentModifiedTime">{Vtiger_Util_Helper::formatDateDiffInStrings($COMMENT->getModifiedTime())}</small> + </p> + </span> + {/if} + </div> + <div class="row marginBottom10px"> + <div class="col-lg-12 col-md-12 col-sm-12"> + <p class="text-muted"> + <small> + <span name="editReason" class="wordbreak">{nl2br($REASON_TO_EDIT)}</span> + </small> + </p> </div> - {/if} - {/foreach} - + </div> </div> - - </div> - </div> - </div> - </div> - </div> - {if $index+1 neq $COMMENTS_COUNT} - <hr> - {/if} - {/foreach} - </div> + </div> + </div> + </div> + </div> + </div> + </div> + {if $index+1 neq $COMMENTS_COUNT} + <hr style="margin-top:0; margin-bottom: 10px;"> + {/if} + {/foreach} + </div> {else} {include file="NoComments.tpl"|@vtemplate_path} {/if} - {if $PAGING_MODEL->isNextPageExists()} - <div class="row"> - <div class="pull-right"> - <a href="javascript:void(0)" class="moreRecentComments">{vtranslate('LBL_MORE',$MODULE_NAME)}..</a> - </div> - </div> - {/if} + {if $PAGING_MODEL->isNextPageExists()} + <div class="row"> + <div class="pull-right"> + <a href="javascript:void(0)" class="moreRecentComments">{vtranslate('LBL_MORE',$MODULE_NAME)}..</a> + </div> + </div> + {/if} </div> <div class="hide basicAddCommentBlock container-fluid"> - <div class="commentTextArea row" style="padding-top: 10px;padding-bottom: 10px;"> - <textarea name="commentcontent" class="commentcontent" placeholder="{vtranslate('LBL_ADD_YOUR_COMMENT_HERE', $MODULE_NAME)}" rows="{$COMMENT_TEXTAREA_DEFAULT_ROWS}"></textarea> - </div> - <div class="pull-right row"> - <button class="btn btn-success btn-sm detailViewSaveComment" type="button" data-mode="add">{vtranslate('LBL_POST', $MODULE_NAME)}</button> - <a href="javascript:void(0);" class="cursorPointer closeCommentBlock cancelLink" type="reset">{vtranslate('LBL_CANCEL', $MODULE_NAME)}</a> - </div> + <div class="commentTextArea row"> + <textarea name="commentcontent" class="commentcontent" placeholder="{vtranslate('LBL_ADD_YOUR_COMMENT_HERE', $MODULE_NAME)}" rows="{$COMMENT_TEXTAREA_DEFAULT_ROWS}"></textarea> + </div> + <div class="pull-right row"> + {if in_array($MODULE_NAME, $PRIVATE_COMMENT_MODULES)} + <div class="checkbox"> + <label> + <input type="checkbox" id="is_private"> {vtranslate('LBL_INTERNAL_COMMENT')} + </label> + </div> + {/if} + <button class="btn btn-success btn-sm detailViewSaveComment" type="button" data-mode="add">{vtranslate('LBL_POST', $MODULE_NAME)}</button> + <a href="javascript:void(0);" class="cursorPointer closeCommentBlock cancelLink" type="reset">{vtranslate('LBL_CANCEL', $MODULE_NAME)}</a> + </div> </div> <div class="hide basicEditCommentBlock container-fluid" style="min-height: 150px;"> - <div class="row" style="padding-top: 10px;padding-bottom: 10px;"> - <input style="width:100%;height:30px;" type="text" name="reasonToEdit" placeholder="{vtranslate('LBL_REASON_FOR_CHANGING_COMMENT', $MODULE_NAME)}" class="input-block-level"/> + <div class="row commentArea" > + <input style="width:100%;height:30px;" type="text" name="reasonToEdit" placeholder="{vtranslate('LBL_REASON_FOR_CHANGING_COMMENT', $MODULE_NAME)}" class="input-block-level"/> </div> <div class="row" style="padding-bottom: 10px;"> <div class="commentTextArea"> - <textarea name="commentcontent" class="commentcontenthidden" placeholder="{vtranslate('LBL_ADD_YOUR_COMMENT_HERE', $MODULE_NAME)}" rows="{$COMMENT_TEXTAREA_DEFAULT_ROWS}"></textarea> - </div> - </div> - <input type="hidden" name="is_private"> - <div class="pull-right row"> - <button class="btn btn-success btn-sm detailViewSaveComment" type="button" data-mode="edit">{vtranslate('LBL_POST', $MODULE_NAME)}</button> - <a href="javascript:void(0);" class="cursorPointer closeCommentBlock cancelLink" type="reset">{vtranslate('LBL_CANCEL', $MODULE_NAME)}</a> - </div> + <textarea name="commentcontent" class="commentcontenthidden" placeholder="{vtranslate('LBL_ADD_YOUR_COMMENT_HERE', $MODULE_NAME)}" rows="{$COMMENT_TEXTAREA_DEFAULT_ROWS}"></textarea> + </div> + </div> + <input type="hidden" name="is_private"> + <div class="pull-right row"> + <button class="btn btn-success btn-sm detailViewSaveComment" type="button" data-mode="edit">{vtranslate('LBL_POST', $MODULE_NAME)}</button> + <a href="javascript:void(0);" class="cursorPointer closeCommentBlock cancelLink" type="reset">{vtranslate('LBL_CANCEL', $MODULE_NAME)}</a> + </div> </div> </div> {/strip} diff --git a/layouts/v7/modules/Vtiger/RelatedActivities.tpl b/layouts/v7/modules/Vtiger/RelatedActivities.tpl index b645073b0732f8faa87cf68fcf275abc85b6aff6..6923b3371f6644fea5c9684b53ade753ef232c2e 100644 --- a/layouts/v7/modules/Vtiger/RelatedActivities.tpl +++ b/layouts/v7/modules/Vtiger/RelatedActivities.tpl @@ -10,129 +10,131 @@ ********************************************************************************/ -->*} {strip} - {assign var=MODULE_NAME value="Calendar"} - <div class="summaryWidgetContainer"> - <div class="widget_header clearfix"> - <h4 class="display-inline-block pull-left">{vtranslate('LBL_ACTIVITIES',$MODULE_NAME)}</h4> - {*<div class=""> - <button class="btn addButton createActivity" type="button" data-url="sourceModule={$RECORD->getModuleName()}&sourceRecord={$RECORD->getId()}&relationOperation=true"> - <strong>{vtranslate('LBL_ADD',$MODULE_NAME)}</strong> - </button> - </div>*} - - <div class="pull-right"> - <button class="btn addButton btn-sm btn-default createActivity toDotask" type="button" href="javascript:void(0)" data-url="sourceModule={$RECORD->getModuleName()}&sourceRecord={$RECORD->getId()}&relationOperation=true" > - <i class="fa fa-plus"></i> {vtranslate('LBL_ADD_TASK',$MODULE_NAME)} - </button> - <button class="btn addButton btn-sm btn-default createActivity" data-name="Events" - data-url="index.php?module=Events&view=QuickCreateAjax" href="javascript:void(0)" type="button"> - <i class="fa fa-plus"></i> {vtranslate('LBL_ADD_EVENT',$MODULE_NAME)} - </button> - - </div> - {assign var=SOURCE_MODEL value=$RECORD} - </div> - <div class="widget_contents"> - {if count($ACTIVITIES) neq '0'} - {foreach item=RECORD key=KEY from=$ACTIVITIES} - {assign var=START_DATE value=$RECORD->get('date_start')} - {assign var=START_TIME value=$RECORD->get('time_start')} - {assign var=EDITVIEW_PERMITTED value=isPermitted('Calendar', 'EditView', $RECORD->get('crmid'))} - {assign var=DETAILVIEW_PERMITTED value=isPermitted('Calendar', 'DetailView', $RECORD->get('crmid'))} - {assign var=DELETE_PERMITTED value=isPermitted('Calendar', 'Delete', $RECORD->get('crmid'))} - <div class="activityEntries"> - <input type="hidden" class="activityId" value="{$RECORD->get('activityid')}"/> - <div class='media'> - <div class='row'> - <div class='media-left module-icon col-lg-1 col-md-1 col-sm-1'> - <span class='vicon-{strtolower($RECORD->get('activitytype'))}'></span> - </div> - <div class='media-body col-lg-7'> - <div class="summaryViewEntries"> - {if $DETAILVIEW_PERMITTED == 'yes'}<a href="{$RECORD->getDetailViewUrl()}" >{$RECORD->get('subject')}</a>{else}{$RECORD->get('subject')}{/if} - {if $EDITVIEW_PERMITTED == 'yes'}<a href="{$RECORD->getEditViewUrl()}&sourceModule={$SOURCE_MODEL->getModuleName()}&sourceRecord={$SOURCE_MODEL->getId()}&relationOperation=true" class="fieldValue"><i class="summaryViewEdit fa fa-pencil" title="{vtranslate('LBL_EDIT',$MODULE_NAME)}"></i></a>{/if} - {if $DELETE_PERMITTED == 'yes'}<a onclick="Vtiger_Detail_Js.deleteRelatedActivity(event);" data-id="{$RECORD->getId()}" data-recurring-enabled="{$RECORD->isRecurringEnabled()}" class="fieldValue"><i class="summaryViewEdit fa fa-trash " title="{vtranslate('LBL_DELETE',$MODULE_NAME)}"></i></a>{/if} - </div> - <span><strong title="{Vtiger_Util_Helper::formatDateTimeIntoDayString("$START_DATE $START_TIME")}">{Vtiger_Util_Helper::formatDateIntoStrings($START_DATE, $START_TIME)}</strong></span> - </div> + {assign var=MODULE_NAME value="Calendar"} + <div class="summaryWidgetContainer"> + <div class="widget_header clearfix"> + <h4 class="display-inline-block pull-left">{vtranslate('LBL_ACTIVITIES',$MODULE_NAME)}</h4> + {*<div class=""> + <button class="btn addButton createActivity" type="button" data-url="sourceModule={$RECORD->getModuleName()}&sourceRecord={$RECORD->getId()}&relationOperation=true"> + <strong>{vtranslate('LBL_ADD',$MODULE_NAME)}</strong> + </button> + </div>*} + {assign var=CALENDAR_MODEL value = Vtiger_Module_Model::getInstance('Calendar')} + <div class="pull-right" style="margin-top: -5px;"> + {if $CALENDAR_MODEL->isPermitted('CreateView')} + <button class="btn addButton btn-sm btn-default createActivity toDotask textOverflowEllipsis max-width-100" title="{vtranslate('LBL_ADD_TASK',$MODULE_NAME)}" type="button" href="javascript:void(0)" data-url="sourceModule={$RECORD->getModuleName()}&sourceRecord={$RECORD->getId()}&relationOperation=true" > + <i class="fa fa-plus"></i> {vtranslate('LBL_ADD_TASK',$MODULE_NAME)} + </button> + <button class="btn addButton btn-sm btn-default createActivity textOverflowEllipsis max-width-100" title="{vtranslate('LBL_ADD_EVENT',$MODULE_NAME)}" data-name="Events" + data-url="index.php?module=Events&view=QuickCreateAjax" href="javascript:void(0)" type="button"> + <i class="fa fa-plus"></i> {vtranslate('LBL_ADD_EVENT',$MODULE_NAME)} + </button> + {/if} + </div> + {assign var=SOURCE_MODEL value=$RECORD} + </div> + <div class="widget_contents"> + {if count($ACTIVITIES) neq '0'} + {foreach item=RECORD key=KEY from=$ACTIVITIES} + {assign var=START_DATE value=$RECORD->get('date_start')} + {assign var=START_TIME value=$RECORD->get('time_start')} + {assign var=EDITVIEW_PERMITTED value=isPermitted('Calendar', 'EditView', $RECORD->get('crmid'))} + {assign var=DETAILVIEW_PERMITTED value=isPermitted('Calendar', 'DetailView', $RECORD->get('crmid'))} + {assign var=DELETE_PERMITTED value=isPermitted('Calendar', 'Delete', $RECORD->get('crmid'))} + <div class="activityEntries"> + <input type="hidden" class="activityId" value="{$RECORD->get('activityid')}"/> + <div class='media'> + <div class='row'> + <div class='media-left module-icon col-lg-1 col-md-1 col-sm-1 textAlignCenter'> + <span class='vicon-{strtolower($RECORD->get('activitytype'))}'></span> + </div> + <div class='media-body col-lg-7 col-md-7 col-sm-7'> + <div class="summaryViewEntries"> + {if $DETAILVIEW_PERMITTED == 'yes'}<a href="{$RECORD->getDetailViewUrl()}" title="{$RECORD->get('subject')}">{$RECORD->get('subject')}</a>{else}{$RECORD->get('subject')}{/if} + {if $EDITVIEW_PERMITTED == 'yes'}<a href="{$RECORD->getEditViewUrl()}&sourceModule={$SOURCE_MODEL->getModuleName()}&sourceRecord={$SOURCE_MODEL->getId()}&relationOperation=true" class="fieldValue"><i class="summaryViewEdit fa fa-pencil" title="{vtranslate('LBL_EDIT',$MODULE_NAME)}"></i></a>{/if} + {if $DELETE_PERMITTED == 'yes'}<a onclick="Vtiger_Detail_Js.deleteRelatedActivity(event);" data-id="{$RECORD->getId()}" data-recurring-enabled="{$RECORD->isRecurringEnabled()}" class="fieldValue"><i class="summaryViewEdit fa fa-trash " title="{vtranslate('LBL_DELETE',$MODULE_NAME)}"></i></a>{/if} + </div> + <span><strong title="{Vtiger_Util_Helper::formatDateTimeIntoDayString("$START_DATE $START_TIME")}">{Vtiger_Util_Helper::formatDateIntoStrings($START_DATE, $START_TIME)}</strong></span> + </div> - <div class='col-lg-4 col-md-4 col-sm-4 activityStatus' style='line-height: 0px;padding-right:30px;'> - <div class="row"> - {if $RECORD->get('activitytype') eq 'Task'} - {assign var=MODULE_NAME value=$RECORD->getModuleName()} - <input type="hidden" class="activityModule" value="{$RECORD->getModuleName()}"/> - <input type="hidden" class="activityType" value="{$RECORD->get('activitytype')}"/> - <div class="pull-right"> - {assign var=FIELD_MODEL value=$RECORD->getModule()->getField('taskstatus')} - <style> - {assign var=PICKLIST_COLOR_MAP value=Settings_Picklist_Module_Model::getPicklistColorMap('taskstatus', true)} - {foreach item=PICKLIST_COLOR key=PICKLIST_VALUE from=$PICKLIST_COLOR_MAP} - {assign var=PICKLIST_TEXT_COLOR value=Settings_Picklist_Module_Model::getTextColor($PICKLIST_COLOR)} - {assign var=CONVERTED_PICKLIST_VALUE value=Vtiger_Util_Helper::convertSpaceToHyphen($PICKLIST_VALUE)} - .picklist-{$FIELD_MODEL->getId()}-{Vtiger_Util_Helper::escapeCssSpecialCharacters($CONVERTED_PICKLIST_VALUE)} { - background-color: {$PICKLIST_COLOR};color: {$PICKLIST_TEXT_COLOR}; - } - {/foreach} - </style> - <strong><span class="value picklist-color picklist-{$FIELD_MODEL->getId()}-{Vtiger_Util_Helper::convertSpaceToHyphen($RECORD->get('status'))}">{vtranslate($RECORD->get('status'),$MODULE_NAME)}</span></strong>  - <span class="editStatus cursorPointer"><i class="fa fa-pencil" title="{vtranslate('LBL_EDIT',$MODULE_NAME)}"></i></span> - <span class="edit hide"> - {assign var=FIELD_VALUE value=$FIELD_MODEL->set('fieldvalue', $RECORD->get('status'))} - {include file=vtemplate_path($FIELD_MODEL->getUITypeModel()->getTemplateName(),$MODULE_NAME) FIELD_MODEL=$FIELD_MODEL USER_MODEL=$USER_MODEL MODULE=$MODULE_NAME OCCUPY_COMPLETE_WIDTH='true'} - <input type="hidden" class="fieldname" value='{$FIELD_MODEL->get('name')}' data-prev-value='{$FIELD_MODEL->get('fieldvalue')}' /> - </span> - </div> - {else} - {assign var=MODULE_NAME value="Events"} - <input type="hidden" class="activityModule" value="Events"/> - <input type="hidden" class="activityType" value="{$RECORD->get('activitytype')}"/> - {if $EDITVIEW_PERMITTED == 'yes'} - <div class="pull-right"> - {assign var=FIELD_MODEL value=$RECORD->getModule()->getField('eventstatus')} - <style> - {assign var=PICKLIST_COLOR_MAP value=Settings_Picklist_Module_Model::getPicklistColorMap('eventstatus', true)} - {foreach item=PICKLIST_COLOR key=PICKLIST_VALUE from=$PICKLIST_COLOR_MAP} - {assign var=PICKLIST_TEXT_COLOR value=Settings_Picklist_Module_Model::getTextColor($PICKLIST_COLOR)} - {assign var=CONVERTED_PICKLIST_VALUE value=Vtiger_Util_Helper::convertSpaceToHyphen($PICKLIST_VALUE)} - .picklist-{$FIELD_MODEL->getId()}-{Vtiger_Util_Helper::escapeCssSpecialCharacters($CONVERTED_PICKLIST_VALUE)} { - background-color: {$PICKLIST_COLOR};color: {$PICKLIST_TEXT_COLOR}; - } - {/foreach} - </style> - <strong><span class="value picklist-color picklist-{$FIELD_MODEL->getId()}-{Vtiger_Util_Helper::convertSpaceToHyphen($RECORD->get('eventstatus'))}">{vtranslate($RECORD->get('eventstatus'),$MODULE_NAME)}</span></strong>  - <span class="editStatus cursorPointer"><i class="fa fa-pencil" title="{vtranslate('LBL_EDIT',$MODULE_NAME)}"></i></span> - <span class="edit hide"> - - {assign var=FIELD_VALUE value=$FIELD_MODEL->set('fieldvalue', $RECORD->get('eventstatus'))} - {include file=vtemplate_path($FIELD_MODEL->getUITypeModel()->getTemplateName(),$MODULE_NAME) FIELD_MODEL=$FIELD_MODEL USER_MODEL=$USER_MODEL MODULE=$MODULE_NAME OCCUPY_COMPLETE_WIDTH='true'} - {if $FIELD_MODEL->getFieldDataType() eq 'multipicklist'} - <input type="hidden" class="fieldname" value='{$FIELD_MODEL->get('name')}[]' data-prev-value='{$FIELD_MODEL->getDisplayValue($FIELD_MODEL->get('fieldvalue'))}' /> - {else} - <input type="hidden" class="fieldname" value='{$FIELD_MODEL->get('name')}' data-prev-value='{$FIELD_MODEL->getDisplayValue($FIELD_MODEL->get('fieldvalue'))}' /> - {/if} - </span> - </div> - {/if} - {/if} - </div> - </div> - </div> - </div> - <hr> - </div> - {/foreach} - {else} - <div class="summaryWidgetContainer noContent"> - <p class="textAlignCenter">{vtranslate('LBL_NO_PENDING_ACTIVITIES',$MODULE_NAME)}</p> - </div> - {/if} - {if $PAGING_MODEL->isNextPageExists()} - <div class="row"> - <div class="pull-right"> - <a href="javascript:void(0)" class="moreRecentActivities" style="line-height: 0px;padding-right:30px;">{vtranslate('LBL_SHOW_MORE',$MODULE_NAME)}</a> - </div> - </div> - {/if} - </div> + <div class='col-lg-4 col-md-4 col-sm-4 activityStatus' style='line-height: 0px;padding-right:30px;'> + <div class="row"> + {if $RECORD->get('activitytype') eq 'Task'} + {assign var=MODULE_NAME value=$RECORD->getModuleName()} + <input type="hidden" class="activityModule" value="{$RECORD->getModuleName()}"/> + <input type="hidden" class="activityType" value="{$RECORD->get('activitytype')}"/> + <div class="pull-right"> + {assign var=FIELD_MODEL value=$RECORD->getModule()->getField('taskstatus')} + <style> + {assign var=PICKLIST_COLOR_MAP value=Settings_Picklist_Module_Model::getPicklistColorMap('taskstatus', true)} + {foreach item=PICKLIST_COLOR key=PICKLIST_VALUE from=$PICKLIST_COLOR_MAP} + {assign var=PICKLIST_TEXT_COLOR value=Settings_Picklist_Module_Model::getTextColor($PICKLIST_COLOR)} + {assign var=CONVERTED_PICKLIST_VALUE value=Vtiger_Util_Helper::convertSpaceToHyphen($PICKLIST_VALUE)} + .picklist-{$FIELD_MODEL->getId()}-{Vtiger_Util_Helper::escapeCssSpecialCharacters($CONVERTED_PICKLIST_VALUE)} { + background-color: {$PICKLIST_COLOR};color: {$PICKLIST_TEXT_COLOR}; + } + {/foreach} + </style> + <strong><span class="value picklist-color picklist-{$FIELD_MODEL->getId()}-{Vtiger_Util_Helper::convertSpaceToHyphen($RECORD->get('status'))}">{vtranslate($RECORD->get('status'),$MODULE_NAME)}</span></strong>  + {if $EDITVIEW_PERMITTED == 'yes'} + <span class="editStatus cursorPointer"><i class="fa fa-pencil" title="{vtranslate('LBL_EDIT',$MODULE_NAME)}"></i></span> + <span class="edit hide"> + {assign var=FIELD_VALUE value=$FIELD_MODEL->set('fieldvalue', $RECORD->get('status'))} + {include file=vtemplate_path($FIELD_MODEL->getUITypeModel()->getTemplateName(),$MODULE_NAME) FIELD_MODEL=$FIELD_MODEL USER_MODEL=$USER_MODEL MODULE=$MODULE_NAME OCCUPY_COMPLETE_WIDTH='true'} + <input type="hidden" class="fieldname" value='{$FIELD_MODEL->get('name')}' data-prev-value='{$FIELD_MODEL->get('fieldvalue')}' /> + </span> + {/if} + </div> + {else} + {assign var=MODULE_NAME value="Events"} + <input type="hidden" class="activityModule" value="Events"/> + <input type="hidden" class="activityType" value="{$RECORD->get('activitytype')}"/> + <div class="pull-right"> + {assign var=FIELD_MODEL value=$RECORD->getModule()->getField('eventstatus')} + <style> + {assign var=PICKLIST_COLOR_MAP value=Settings_Picklist_Module_Model::getPicklistColorMap('eventstatus', true)} + {foreach item=PICKLIST_COLOR key=PICKLIST_VALUE from=$PICKLIST_COLOR_MAP} + {assign var=PICKLIST_TEXT_COLOR value=Settings_Picklist_Module_Model::getTextColor($PICKLIST_COLOR)} + {assign var=CONVERTED_PICKLIST_VALUE value=Vtiger_Util_Helper::convertSpaceToHyphen($PICKLIST_VALUE)} + .picklist-{$FIELD_MODEL->getId()}-{Vtiger_Util_Helper::escapeCssSpecialCharacters($CONVERTED_PICKLIST_VALUE)} { + background-color: {$PICKLIST_COLOR};color: {$PICKLIST_TEXT_COLOR}; + } + {/foreach} + </style> + <strong><span class="value picklist-color picklist-{$FIELD_MODEL->getId()}-{Vtiger_Util_Helper::convertSpaceToHyphen($RECORD->get('eventstatus'))}">{vtranslate($RECORD->get('eventstatus'),$MODULE_NAME)}</span></strong>  + {if $EDITVIEW_PERMITTED == 'yes'} + <span class="editStatus cursorPointer"><i class="fa fa-pencil" title="{vtranslate('LBL_EDIT',$MODULE_NAME)}"></i></span> + <span class="edit hide"> + {assign var=FIELD_VALUE value=$FIELD_MODEL->set('fieldvalue', $RECORD->get('eventstatus'))} + {include file=vtemplate_path($FIELD_MODEL->getUITypeModel()->getTemplateName(),$MODULE_NAME) FIELD_MODEL=$FIELD_MODEL USER_MODEL=$USER_MODEL MODULE=$MODULE_NAME OCCUPY_COMPLETE_WIDTH='true'} + {if $FIELD_MODEL->getFieldDataType() eq 'multipicklist'} + <input type="hidden" class="fieldname" value='{$FIELD_MODEL->get('name')}[]' data-prev-value='{$FIELD_MODEL->getDisplayValue($FIELD_MODEL->get('fieldvalue'))}' /> + {else} + <input type="hidden" class="fieldname" value='{$FIELD_MODEL->get('name')}' data-prev-value='{$FIELD_MODEL->getDisplayValue($FIELD_MODEL->get('fieldvalue'))}' /> + {/if} + </span> + </div> + {/if} + {/if} + </div> + </div> + </div> + </div> + <hr> + </div> + {/foreach} + {else} + <div class="summaryWidgetContainer noContent"> + <p class="textAlignCenter">{vtranslate('LBL_NO_PENDING_ACTIVITIES',$MODULE_NAME)}</p> + </div> + {/if} + {if $PAGING_MODEL->isNextPageExists()} + <div class="row"> + <div class="pull-right"> + <a href="javascript:void(0)" class="moreRecentActivities" style="line-height: 0px;padding-right:30px;">{vtranslate('LBL_SHOW_MORE',$MODULE_NAME)}</a> + </div> + </div> + {/if} + </div> </div> -{/strip} +{/strip} \ No newline at end of file diff --git a/layouts/v7/modules/Vtiger/ShowAllComments.tpl b/layouts/v7/modules/Vtiger/ShowAllComments.tpl index b9e2c0493cb85cb48d5564ac5205a90fd4c8c6c6..48e85cf0b03b9fa58e041577d4d87cf86a06a4da 100644 --- a/layouts/v7/modules/Vtiger/ShowAllComments.tpl +++ b/layouts/v7/modules/Vtiger/ShowAllComments.tpl @@ -1,77 +1,92 @@ {*+********************************************************************************** - * The contents of this file are subject to the vtiger CRM Public License Version 1.1 - * ("License"); You may not use this file except in compliance with the License - * The Original Code is: vtiger CRM Open Source - * The Initial Developer of the Original Code is vtiger. - * Portions created by vtiger are Copyright (C) vtiger. - * All Rights Reserved. - ************************************************************************************} +* The contents of this file are subject to the vtiger CRM Public License Version 1.1 +* ("License"); You may not use this file except in compliance with the License +* The Original Code is: vtiger CRM Open Source +* The Initial Developer of the Original Code is vtiger. +* Portions created by vtiger are Copyright (C) vtiger. +* All Rights Reserved. +************************************************************************************} {strip} -<form id="detailView" method="POST"> -{assign var="COMMENT_TEXTAREA_DEFAULT_ROWS" value="2"} -<div class="commentContainer commentsRelatedContainer container-fluid"> - <div class="commentTitle row"> - {if $COMMENTS_MODULE_MODEL->isPermitted('EditView')} - <div class="addCommentBlock"> - <div class="commentTextArea"> - <textarea name="commentcontent" class="commentcontent mention_listener" placeholder="{vtranslate('LBL_POST_YOUR_COMMENT_HERE', $MODULE_NAME)}" rows="{$COMMENT_TEXTAREA_DEFAULT_ROWS}"></textarea> - </div> - <div class="row"> - <div class="col-xs-8"> - {include file=vtemplate_path($FIELD_MODEL->getUITypeModel()->getTemplateName(),$MODULE_NAME) MODULE="ModComments"} +<form id="detailView" method="POST"> + {assign var="COMMENT_TEXTAREA_DEFAULT_ROWS" value="2"} + {assign var="PRIVATE_COMMENT_MODULES" value=Vtiger_Functions::getPrivateCommentModules()} + {assign var=IS_CREATABLE value=$COMMENTS_MODULE_MODEL->isPermitted('CreateView')} + {assign var=IS_EDITABLE value=$COMMENTS_MODULE_MODEL->isPermitted('EditView')} + + <div class="commentContainer commentsRelatedContainer container-fluid"> + {if $IS_CREATABLE} + <div class="commentTitle row"> + <div class="addCommentBlock"> + <div class="commentTextArea"> + <textarea name="commentcontent" class="commentcontent form-control mention_listener" placeholder="{vtranslate('LBL_POST_YOUR_COMMENT_HERE', $MODULE_NAME)}" rows="{$COMMENT_TEXTAREA_DEFAULT_ROWS}"></textarea> </div> - <div class="col-xs-4"> - <div class="pull-right"> - <button class="btn btn-success saveComment" type="button" data-mode="add"><strong>{vtranslate('LBL_POST', $MODULE_NAME)}</strong></button> + <div class="row"> + <div class="col-xs-4 pull-right"> + <div class="pull-right"> + {if in_array($MODULE_NAME, $PRIVATE_COMMENT_MODULES)} + <input type="checkbox" id="is_private"> {vtranslate('LBL_INTERNAL_COMMENT')} + <i class="fa fa-question-circle cursorPointer" data-toggle="tooltip" data-placement="top" data-original-title="{vtranslate('LBL_INTERNAL_COMMENT_INFO')}"></i> + {/if} + <button class="btn btn-success btn-sm saveComment" type="button" data-mode="add"><strong>{vtranslate('LBL_POST', $MODULE_NAME)}</strong></button> + </div> + </div> + <div class="col-xs-8 pull-left"> + {include file=vtemplate_path($FIELD_MODEL->getUITypeModel()->getTemplateName(),$MODULE_NAME) MODULE="ModComments"} </div> </div> </div> </div> - {/if} - </div> - <div class="showcomments container-fluid row" style="margin-top:10px;"> - <h3> - {vtranslate('LBL_COMMENTS',$MODULE)} - {if $MODULE_NAME ne 'Leads'} - <div class="pull-right fontSize10pt"> - <div class="input-info-addon"> - <a class="fa fa-question-circle" data-toggle="tooltip" data-placement="top" title="{vtranslate('LBL_ROLLUP_COMMENTS_INFO',$QUALIFIED_MODULE)}"></a></div> - <input type="checkbox" class="bootstrap-switch" id="rollupcomments" hascomments="1" startindex="{$STARTINDEX}" data-view="relatedlist" rollupid="{$ROLLUPID}" - rollup-status="{$ROLLUP_STATUS}" module="{$MODULE_NAME}" record="{$MODULE_RECORD}" checked data-on-color="success"/> - </div> - {/if} - </h3> - <br> - <div class="commentsList commentsBody"> - {include file='CommentsList.tpl'|@vtemplate_path COMMENT_MODULE_MODEL=$COMMENTS_MODULE_MODEL} - </div> - - <div class="hide basicAddCommentBlock container-fluid"> - <div class="commentTextArea row"> - <textarea name="commentcontent" class="commentcontent" placeholder="{vtranslate('LBL_POST_YOUR_COMMENT_HERE', $MODULE_NAME)}" rows="{$COMMENT_TEXTAREA_DEFAULT_ROWS}"></textarea> - </div> - <div class="pull-right row"> - <button class="btn btn-success saveComment" type="button" data-mode="add"><strong>{vtranslate('LBL_POST', $MODULE_NAME)}</strong></button> - <a href="javascript:void(0);" class="cursorPointer closeCommentBlock cancelLink" type="reset">{vtranslate('LBL_CANCEL', $MODULE_NAME)}</a> - </div> - </div> - - <div class="hide basicEditCommentBlock container-fluid"> - <div class="row" style="padding-bottom: 10px;"> - <input style="width:100%;height:30px;" type="text" name="reasonToEdit" placeholder="{vtranslate('LBL_REASON_FOR_CHANGING_COMMENT', $MODULE_NAME)}" class="input-block-level"/> + {/if} + <div class="showcomments container-fluid row" style="margin-top:10px;"> + <div class="recentCommentsHeader row"> + <h4 class="display-inline-block col-lg-7 textOverflowEllipsis" title="{vtranslate('LBL_RECENT_COMMENTS', $MODULE_NAME)}"> + {vtranslate('LBL_COMMENTS',$MODULE)} + </h4> + {if $MODULE_NAME ne 'Leads'} + <div class="col-lg-5 commentHeader pull-right" style="margin-top:5px;text-align:right;padding-right:20px;"> + <div class="display-inline-block"> + <span class="">{vtranslate('LBL_ROLL_UP',$QUALIFIED_MODULE)} </span> + <span class="fa fa-question-circle" data-toggle="tooltip" data-placement="top" title="{vtranslate('LBL_ROLLUP_COMMENTS_INFO',$QUALIFIED_MODULE)}"></span> + </div> + <input type="checkbox" class="bootstrap-switch" id="rollupcomments" hascomments="1" startindex="{$STARTINDEX}" data-view="relatedlist" rollupid="{$ROLLUPID}" + rollup-status="{$ROLLUP_STATUS}" module="{$MODULE_NAME}" record="{$MODULE_RECORD}" checked data-on-color="success"/> + </div> + {/if} + </div> + <hr> + <div class="commentsList commentsBody marginBottom15"> + {include file='CommentsList.tpl'|@vtemplate_path COMMENT_MODULE_MODEL=$COMMENTS_MODULE_MODEL IS_CREATABLE=$IS_CREATABLE IS_EDITABLE=$IS_EDITABLE} + </div> + + <div class="hide basicAddCommentBlock container-fluid"> + <div class="commentTextArea row"> + <textarea name="commentcontent" class="commentcontent" placeholder="{vtranslate('LBL_POST_YOUR_COMMENT_HERE', $MODULE_NAME)}" rows="{$COMMENT_TEXTAREA_DEFAULT_ROWS}"></textarea> + </div> + <div class="pull-right row"> + {if in_array($MODULE_NAME, $PRIVATE_COMMENT_MODULES)} + <input type="checkbox" id="is_private"> {vtranslate('LBL_INTERNAL_COMMENT')} + {/if} + <button class="btn btn-success btn-sm saveComment" type="button" data-mode="add"><strong>{vtranslate('LBL_POST', $MODULE_NAME)}</strong></button> + <a href="javascript:void(0);" class="cursorPointer closeCommentBlock cancelLink" type="reset">{vtranslate('LBL_CANCEL', $MODULE_NAME)}</a> + </div> + </div> + + <div class="hide basicEditCommentBlock container-fluid"> + <div class="row" style="padding-bottom: 10px;"> + <input style="width:100%;height:30px;" type="text" name="reasonToEdit" placeholder="{vtranslate('LBL_REASON_FOR_CHANGING_COMMENT', $MODULE_NAME)}" class="input-block-level"/> + </div> + <div class="row"> + <div class="commentTextArea"> + <textarea name="commentcontent" class="commentcontenthidden" placeholder="{vtranslate('LBL_ADD_YOUR_COMMENT_HERE', $MODULE_NAME)}" rows="{$COMMENT_TEXTAREA_DEFAULT_ROWS}"></textarea> + </div> + </div> + <input type="hidden" name="is_private"> + <div class="pull-right row"> + <button class="btn btn-success btn-sm saveComment" type="button" data-mode="edit"><strong>{vtranslate('LBL_POST', $MODULE_NAME)}</strong></button> + <a href="javascript:void(0);" class="cursorPointer closeCommentBlock cancelLink" type="reset">{vtranslate('LBL_CANCEL', $MODULE_NAME)}</a> + </div> + </div> </div> - <div class="row"> - <div class="commentTextArea"> - <textarea name="commentcontent" class="commentcontenthidden" placeholder="{vtranslate('LBL_ADD_YOUR_COMMENT_HERE', $MODULE_NAME)}" rows="{$COMMENT_TEXTAREA_DEFAULT_ROWS}"></textarea> - </div> - </div> - <input type="hidden" name="is_private"> - <div class="pull-right row"> - <button class="btn btn-success saveComment" type="button" data-mode="edit"><strong>{vtranslate('LBL_POST', $MODULE_NAME)}</strong></button> - <a href="javascript:void(0);" class="cursorPointer closeCommentBlock cancelLink" type="reset">{vtranslate('LBL_CANCEL', $MODULE_NAME)}</a> - </div> </div> -</div> -</div> - </form> +</form> {/strip} \ No newline at end of file diff --git a/layouts/v7/modules/Vtiger/partials/RelatedListHeader.tpl b/layouts/v7/modules/Vtiger/partials/RelatedListHeader.tpl index f5a074075f2100216da66254d872369093b227c0..601b670aa0436261582d6e07a1f09377536e2fb5 100644 --- a/layouts/v7/modules/Vtiger/partials/RelatedListHeader.tpl +++ b/layouts/v7/modules/Vtiger/partials/RelatedListHeader.tpl @@ -25,14 +25,16 @@ {elseif $RELATED_LINK->get('_linklabel') === '_add_task'} {assign var=RELATED_MODULE_NAME value='Calendar'} {/if} - <button type="button" module="{$RELATED_MODULE_NAME}" class="btn addButton btn-default - {if $IS_SELECT_BUTTON eq true} selectRelation {/if} " - {if $IS_SELECT_BUTTON eq true} data-moduleName={$RELATED_LINK->get('_module')->get('name')} {/if} - {if ($RELATED_LINK->isPageLoadLink())} - {if $RELATION_FIELD} data-name="{$RELATION_FIELD->getName()}" {/if} - data-url="{$RELATED_LINK->getUrl()}{if $SELECTED_MENU_CATEGORY}&app={$SELECTED_MENU_CATEGORY}{/if}" - {/if} - {if $IS_SELECT_BUTTON neq true}name="addButton"{/if}>{if $IS_SELECT_BUTTON eq false}<i class="fa fa-plus"></i> {/if} {$RELATED_LINK->getLabel()}</button> + {if $IS_SELECT_BUTTON || $IS_CREATE_PERMITTED} + <button type="button" module="{$RELATED_MODULE_NAME}" class="btn addButton btn-default + {if $IS_SELECT_BUTTON eq true} selectRelation {/if} " + {if $IS_SELECT_BUTTON eq true} data-moduleName={$RELATED_LINK->get('_module')->get('name')} {/if} + {if ($RELATED_LINK->isPageLoadLink())} + {if $RELATION_FIELD} data-name="{$RELATION_FIELD->getName()}" {/if} + data-url="{$RELATED_LINK->getUrl()}{if $SELECTED_MENU_CATEGORY}&app={$SELECTED_MENU_CATEGORY}{/if}" + {/if} + {if $IS_SELECT_BUTTON neq true}name="addButton"{/if}>{if $IS_SELECT_BUTTON eq false}<i class="fa fa-plus"></i> {/if} {$RELATED_LINK->getLabel()}</button> + {/if} {/if} </div> {/foreach} diff --git a/layouts/v7/modules/Vtiger/partials/Topbar.tpl b/layouts/v7/modules/Vtiger/partials/Topbar.tpl index ccec74eb8c835c506d298caed4f06711ba0e26a5..62c1a8086d675270a8a3af1682aeb2bdfb4e9e2d 100644 --- a/layouts/v7/modules/Vtiger/partials/Topbar.tpl +++ b/layouts/v7/modules/Vtiger/partials/Topbar.tpl @@ -57,9 +57,10 @@ <li id="quickCreateModules" style="padding: 0 5px;"> <div class="col-lg-12" style="padding-bottom:15px;"> {foreach key=moduleName item=moduleModel from=$QUICK_CREATE_MODULES} - {if $moduleModel->isPermitted('EditView')} + {if $moduleModel->isPermitted('CreateView') || $moduleModel->isPermitted('EditView')} {assign var='quickCreateModule' value=$moduleModel->isQuickCreateSupported()} {assign var='singularLabel' value=$moduleModel->getSingularLabelKey()} + {assign var=hideDiv value={!$moduleModel->isPermitted('CreateView') && $moduleModel->isPermitted('EditView')}} {if $quickCreateModule == '1'} {if $count % 3 == 0} <div class="row"> @@ -67,7 +68,7 @@ {* Adding two links,Event and Task if module is Calendar *} {if $singularLabel == 'SINGLE_Calendar'} {assign var='singularLabel' value='LBL_TASK'} - <div class="col-lg-4"> + <div class="{if $hideDiv}create_restricted_{$moduleModel->getName()} hide{else}col-lg-4{/if}"> <a id="menubar_quickCreate_Events" class="quickCreateModule" data-name="Events" data-url="index.php?module=Events&view=QuickCreateAjax" href="javascript:void(0)"><i class="vicon-calendar pull-left"></i><span class="quick-create-module">{vtranslate('LBL_EVENT',$moduleName)}</span></a> </div> @@ -76,13 +77,15 @@ <br> <div class="row"> {/if} - <div class="col-lg-4"> + <div class="{if $hideDiv}create_restricted_{$moduleModel->getName()} hide{else}col-lg-4{/if}"> <a id="menubar_quickCreate_{$moduleModel->getName()}" class="quickCreateModule" data-name="{$moduleModel->getName()}" data-url="{$moduleModel->getQuickCreateUrl()}" href="javascript:void(0)"><i class="vicon-task pull-left"></i><span class="quick-create-module">{vtranslate($singularLabel,$moduleName)}</span></a> </div> - {assign var='count' value=$count+1} + {if !$hideDiv} + {assign var='count' value=$count+1} + {/if} {else if $singularLabel == 'SINGLE_Documents'} - <div class="col-lg-4 dropdown"> + <div class="{if $hideDiv}create_restricted_{$moduleModel->getName()} hide{else}col-lg-4{/if} dropdown"> <a id="menubar_quickCreate_{$moduleModel->getName()}" class="quickCreateModuleSubmenu dropdown-toggle" data-name="{$moduleModel->getName()}" data-toggle="dropdown" data-url="{$moduleModel->getQuickCreateUrl()}" href="javascript:void(0)"> <i class="vicon-{strtolower($moduleName)} pull-left"></i> @@ -106,7 +109,7 @@ </ul> </div> {else} - <div class="col-lg-4"> + <div class="{if $hideDiv}create_restricted_{$moduleModel->getName()} hide{else}col-lg-4{/if}"> <a id="menubar_quickCreate_{$moduleModel->getName()}" class="quickCreateModule" data-name="{$moduleModel->getName()}" data-url="{$moduleModel->getQuickCreateUrl()}" href="javascript:void(0)"> <i class="vicon-{strtolower($moduleName)} pull-left"></i> @@ -118,7 +121,9 @@ </div> <br> {/if} - {assign var='count' value=$count+1} + {if !$hideDiv} + {assign var='count' value=$count+1} + {/if} {/if} {/if} {/foreach} diff --git a/layouts/v7/modules/Vtiger/resources/Detail.js b/layouts/v7/modules/Vtiger/resources/Detail.js index 66be15a02ce3f28fd99cbcc6c97d5f0bca76ad00..34c4f5fb5c30ebfbef71582ee43b1f64b4268ab6 100644 --- a/layouts/v7/modules/Vtiger/resources/Detail.js +++ b/layouts/v7/modules/Vtiger/resources/Detail.js @@ -2159,9 +2159,10 @@ Vtiger.Class("Vtiger_Detail_Js",{ 'url' : url }; app.request.get(params).then(function(err, data){ - currentTarget.attr('rollup-status', 0); - jQuery('div.related-tabs li[data-label-key="ModComments"]').trigger('click'); - }); + currentTarget.attr('rollup-status', 0); +// Vtiger_Index_Js.getInstance().registerMentionListener(jQuery('.widgetContainer_comments').find('.mention_listener')); + jQuery('div.related-tabs li[data-label-key="ModComments"]').trigger('click'); + }); }else { url = 'index.php?module='+moduleName+'&relatedModule=ModComments&view=Detail&record='+ recordId+'&mode=showRecentComments'+'&rollupid='+rollupId diff --git a/modules/Accounts/models/DetailView.php b/modules/Accounts/models/DetailView.php index 98c53cff34340491b476e4b3a6a338bd1e26d44d..82a07504888e0f0f51cd64feb9499ef4181553e5 100644 --- a/modules/Accounts/models/DetailView.php +++ b/modules/Accounts/models/DetailView.php @@ -50,7 +50,7 @@ class Accounts_DetailView_Model extends Vtiger_DetailView_Model { $CalendarActionLinks = array(); $CalendarModuleModel = Vtiger_Module_Model::getInstance('Calendar'); - if($currentUserModel->hasModuleActionPermission($CalendarModuleModel->getId(), 'EditView')) { + if($currentUserModel->hasModuleActionPermission($CalendarModuleModel->getId(), 'CreateView')) { $CalendarActionLinks[] = array( 'linktype' => 'DETAILVIEW', 'linklabel' => 'LBL_ADD_EVENT', diff --git a/modules/Calendar/actions/Save.php b/modules/Calendar/actions/Save.php index cc7f3e76bde799014498538f09746f204c2492a5..e1c4a2eed30d2af4bd92da766e44aee78a96f6ce 100644 --- a/modules/Calendar/actions/Save.php +++ b/modules/Calendar/actions/Save.php @@ -14,6 +14,11 @@ class Calendar_Save_Action extends Vtiger_Save_Action { $moduleName = $request->getModule(); $record = $request->get('record'); + $actionName = ($record) ? 'EditView' : 'CreateView'; + if(!Users_Privileges_Model::isPermitted($moduleName, $actionName, $record)) { + throw new AppException(vtranslate('LBL_PERMISSION_DENIED')); + } + if(!Users_Privileges_Model::isPermitted($moduleName, 'Save', $record)) { throw new AppException(vtranslate('LBL_PERMISSION_DENIED')); } diff --git a/modules/Calendar/actions/SaveAjax.php b/modules/Calendar/actions/SaveAjax.php index a5d9fdc7f05fe8bc4642352e18fdc2d7d7465cc9..5f28f72a64e4c2ecde547edce5a9ad0dacefde9a 100644 --- a/modules/Calendar/actions/SaveAjax.php +++ b/modules/Calendar/actions/SaveAjax.php @@ -14,6 +14,11 @@ class Calendar_SaveAjax_Action extends Vtiger_SaveAjax_Action { $moduleName = $request->getModule(); $record = $request->get('record'); + $actionName = ($record) ? 'EditView' : 'CreateView'; + if(!Users_Privileges_Model::isPermitted($moduleName, $actionName, $record)) { + throw new AppException(vtranslate('LBL_PERMISSION_DENIED')); + } + if(!Users_Privileges_Model::isPermitted($moduleName, 'Save', $record)) { throw new AppException(vtranslate('LBL_PERMISSION_DENIED')); } diff --git a/modules/Calendar/actions/SaveFollowupAjax.php b/modules/Calendar/actions/SaveFollowupAjax.php index d15bc56360a5f3ffc8f43653d70ff3ea847f8dd1..382c4c5c53fad85f2668bcb79cb84ada3d07268c 100755 --- a/modules/Calendar/actions/SaveFollowupAjax.php +++ b/modules/Calendar/actions/SaveFollowupAjax.php @@ -9,7 +9,29 @@ *************************************************************************************/ class Calendar_SaveFollowupAjax_Action extends Calendar_SaveAjax_Action { - + + public function checkPermission(Vtiger_Request $request) { + $moduleName = $request->getModule(); + $record = $request->get('record'); + + $actionName = ($record && $request->getMode() != 'createFollowupEvent') ? 'EditView' : 'CreateView'; + if(!Users_Privileges_Model::isPermitted($moduleName, $actionName, $record)) { + throw new AppException(vtranslate('LBL_PERMISSION_DENIED')); + } + + if(!Users_Privileges_Model::isPermitted($moduleName, 'Save', $record)) { + throw new AppException(vtranslate('LBL_PERMISSION_DENIED')); + } + + if ($record) { + $activityModulesList = array('Calendar', 'Events'); + $recordEntityName = getSalesEntityType($record); + if (!in_array($recordEntityName, $activityModulesList) || !in_array($moduleName, $activityModulesList)) { + throw new AppException(vtranslate('LBL_PERMISSION_DENIED')); + } + } + } + function __construct() { $this->exposeMethod('createFollowupEvent'); $this->exposeMethod('markAsHeldCompleted'); diff --git a/modules/Calendar/views/Calendar.php b/modules/Calendar/views/Calendar.php index 0ed8626a756ba269077be5a948be4ec9b52d7fc3..32e1d8604cb4476af3d3704141c1b48b1beb9542 100644 --- a/modules/Calendar/views/Calendar.php +++ b/modules/Calendar/views/Calendar.php @@ -70,6 +70,7 @@ class Calendar_Calendar_View extends Vtiger_Index_View { return $this->getCalendarSettings($request); } $viewer->assign('CURRENT_USER', $currentUserModel); + $viewer->assign('IS_CREATE_PERMITTED', isPermitted('Calendar', 'CreateView')); $viewer->view('CalendarView.tpl', $request->getModule()); } diff --git a/modules/Calendar/views/Edit.php b/modules/Calendar/views/Edit.php index 0bd6146912e35582b12783ce19203923db450cc7..0b9c3c369f0fb5da48f46676e32f26d0d3c03b62 100644 --- a/modules/Calendar/views/Edit.php +++ b/modules/Calendar/views/Edit.php @@ -20,7 +20,12 @@ Class Calendar_Edit_View extends Vtiger_Edit_View { $moduleName = $request->getModule(); $record = $request->get('record'); - if (!Users_Privileges_Model::isPermitted($moduleName, 'EditView', $record)) { + $actionName = 'CreateView'; + if ($record && !$request->get('isDuplicate')) { + $actionName = 'EditView'; + } + + if(!Users_Privileges_Model::isPermitted($moduleName, $actionName, $record)) { throw new AppException(vtranslate('LBL_PERMISSION_DENIED')); } diff --git a/modules/Calendar/views/QuickCreateAjax.php b/modules/Calendar/views/QuickCreateAjax.php index d447c3941ba8f8f3c47a8b2a2bc52459ffe5e739..ac00e7e86d4caddddd8922e04864faa6a237474b 100644 --- a/modules/Calendar/views/QuickCreateAjax.php +++ b/modules/Calendar/views/QuickCreateAjax.php @@ -10,6 +10,17 @@ class Calendar_QuickCreateAjax_View extends Vtiger_QuickCreateAjax_View { + public function checkPermission(Vtiger_Request $request) { + $moduleName = $request->getModule(); + //Need to check record permission as Calendar view is using QuickCreateAjax to show edit form + $record = $request->get('record'); + + $actionName = ($record) ? 'EditView' : 'CreateView'; + if(!Users_Privileges_Model::isPermitted($moduleName, $actionName, $record)) { + throw new AppException(vtranslate('LBL_PERMISSION_DENIED')); + } + } + public function process(Vtiger_Request $request) { $moduleName = $request->getModule(); diff --git a/modules/Calendar/views/QuickCreateFollowupAjax.php b/modules/Calendar/views/QuickCreateFollowupAjax.php index 17bb0a30bb86ae5cc8cdb6e69d865d376fae0a84..0f0eced152e1918c6e1ebf96565f0e2fec3b7530 100755 --- a/modules/Calendar/views/QuickCreateFollowupAjax.php +++ b/modules/Calendar/views/QuickCreateFollowupAjax.php @@ -16,9 +16,8 @@ class Calendar_QuickCreateFollowupAjax_View extends Vtiger_QuickCreateAjax_View $recordModel = Vtiger_Record_Model::getInstanceById($recordId); $moduleModel = $recordModel->getModule(); - $actionname = "EditView"; - - if(isPermitted($moduleName, $actionname, $recordId) === 'yes'){ + + if(isPermitted($moduleName, 'CreateView', $recordId) === 'yes'){ //Start date Field required for validation $startDateFieldModel = $moduleModel->getField("date_start"); $startDateTime = $recordModel->getDisplayValue('date_start'); diff --git a/modules/Calendar/views/SharedCalendar.php b/modules/Calendar/views/SharedCalendar.php index 275ec4d2b8589b6f3d73d02ba8918334172a3d22..ee4e6015f867bf1c3a320034fbc35d7a65e87b9f 100644 --- a/modules/Calendar/views/SharedCalendar.php +++ b/modules/Calendar/views/SharedCalendar.php @@ -15,6 +15,7 @@ class Calendar_SharedCalendar_View extends Calendar_Calendar_View { $currentUserModel = Users_Record_Model::getCurrentUserModel(); $viewer->assign('CURRENT_USER', $currentUserModel); + $viewer->assign('IS_CREATE_PERMITTED', isPermitted('Calendar', 'CreateView')); $viewer->view('SharedCalendarView.tpl', $request->getModule()); } diff --git a/modules/Documents/models/Module.php b/modules/Documents/models/Module.php index 89a8a3d535a6084cdb08b2b893b6b190f352be78..2207cbf947a35539a9225a19e97426cf0c443524 100644 --- a/modules/Documents/models/Module.php +++ b/modules/Documents/models/Module.php @@ -128,7 +128,7 @@ class Documents_Module_Model extends Vtiger_Module_Model { if($this->isEntityModule()) { $moduleName = $this->getName(); - $createPermission = Users_Privileges_Model::isPermitted($moduleName, 'EditView'); + $createPermission = Users_Privileges_Model::isPermitted($moduleName, 'CreateView'); if($createPermission) { $basicListViewLinks[] = array( 'linktype' => 'LISTVIEW', diff --git a/modules/Documents/views/EditAjax.php b/modules/Documents/views/EditAjax.php index d2a40f7cfc36e10fbf5dafeb6eac0e0611734a62..a9f35baa208cd0406231000c9125f6043ecbd6ac 100644 --- a/modules/Documents/views/EditAjax.php +++ b/modules/Documents/views/EditAjax.php @@ -13,7 +13,7 @@ class Documents_EditAjax_View extends Vtiger_QuickCreateAjax_View { public function checkPermission(Vtiger_Request $request) { $moduleName = $request->getModule(); - if (!(Users_Privileges_Model::isPermitted($moduleName, 'EditView'))) { + if (!(Users_Privileges_Model::isPermitted($moduleName, 'CreateView'))) { throw new AppException(vtranslate('LBL_PERMISSION_DENIED', $moduleName)); } } diff --git a/modules/Documents/views/List.php b/modules/Documents/views/List.php index bb5320a8a469cc15361c1cd1f19e8cf2c1319fa3..5cdfffdbdd99398c2f13adc02863d490eb84fef3 100644 --- a/modules/Documents/views/List.php +++ b/modules/Documents/views/List.php @@ -265,6 +265,7 @@ class Documents_List_View extends Vtiger_List_View { $viewer->assign('LISTVIEW_COUNT', $totalCount); } + $viewer->assign('IS_RECORD_CREATABLE', $listViewModel->getModule()->isPermitted('CreateView')); $viewer->assign('IS_MODULE_EDITABLE', $listViewModel->getModule()->isPermitted('EditView')); $viewer->assign('IS_MODULE_DELETABLE', $listViewModel->getModule()->isPermitted('Delete')); $viewer->assign('SEARCH_DETAILS', $searchParams); diff --git a/modules/Documents/views/QuickCreateAjax.php b/modules/Documents/views/QuickCreateAjax.php index 97a66313f3969fd72e08be2c18292ac8be701d19..fd434226eee9d48d50c98bc5175ec39e0734983a 100644 --- a/modules/Documents/views/QuickCreateAjax.php +++ b/modules/Documents/views/QuickCreateAjax.php @@ -13,7 +13,7 @@ class Documents_QuickCreateAjax_View extends Vtiger_IndexAjax_View { public function checkPermission(Vtiger_Request $request) { $moduleName = $request->getModule(); - if (!(Users_Privileges_Model::isPermitted($moduleName, 'EditView'))) { + if (!(Users_Privileges_Model::isPermitted($moduleName, 'CreateView'))) { throw new AppException(vtranslate('LBL_PERMISSION_DENIED', $moduleName)); } } diff --git a/modules/Events/actions/SaveAjax.php b/modules/Events/actions/SaveAjax.php index 7e4ba0fec7bf5be620e1bb41495bcac52b37cc60..e7bc75922bb75e0d98481d637e048468761939ae 100644 --- a/modules/Events/actions/SaveAjax.php +++ b/modules/Events/actions/SaveAjax.php @@ -14,7 +14,12 @@ class Events_SaveAjax_Action extends Events_Save_Action { $moduleName = $request->getModule(); $record = $request->get('record'); - if (!Users_Privileges_Model::isPermitted($moduleName, 'Save', $record)) { + $actionName = ($record) ? 'EditView' : 'CreateView'; + if(!Users_Privileges_Model::isPermitted($moduleName, $actionName, $record)) { + throw new AppException(vtranslate('LBL_PERMISSION_DENIED')); + } + + if(!Users_Privileges_Model::isPermitted($moduleName, 'Save', $record)) { throw new AppException(vtranslate('LBL_PERMISSION_DENIED')); } diff --git a/modules/HelpDesk/models/DetailView.php b/modules/HelpDesk/models/DetailView.php index a60ecb8612271e06045cc80d02d3a308999c3176..22836f561c9f84d1b3af676877b99b1e810514f7 100644 --- a/modules/HelpDesk/models/DetailView.php +++ b/modules/HelpDesk/models/DetailView.php @@ -35,7 +35,7 @@ class HelpDesk_DetailView_Model extends Vtiger_DetailView_Model { } $quotesModuleModel = Vtiger_Module_Model::getInstance('Faq'); - if($currentUserModel->hasModuleActionPermission($quotesModuleModel->getId(), 'DetailView')) { + if($currentUserModel->hasModuleActionPermission($quotesModuleModel->getId(), 'CreateView')) { $basicActionLink = array( 'linktype' => 'DETAILVIEW', 'linklabel' => 'LBL_CONVERT_FAQ', diff --git a/modules/Inventory/views/SendEmail.php b/modules/Inventory/views/SendEmail.php index 800afb8b7dcdf2730f6a70171eb7ceed8bcc0d2b..2978dbf0c91736c1c44cdbff5579d5726658dd54 100644 --- a/modules/Inventory/views/SendEmail.php +++ b/modules/Inventory/views/SendEmail.php @@ -10,6 +10,13 @@ class Inventory_SendEmail_View extends Vtiger_ComposeEmail_View { + public function checkPermission(Vtiger_Request $request) { + $moduleName = $request->getModule(); + if(!Users_Privileges_Model::isPermitted($moduleName, 'index') || !Users_Privileges_Model::isPermitted('Emails', 'CreateView')) { + throw new AppException(vtranslate('LBL_PERMISSION_DENIED')); + } + } + /** * Function which will construct the compose email * This will handle the case of attaching the invoice pdf as attachment diff --git a/modules/Invoice/models/DetailView.php b/modules/Invoice/models/DetailView.php index 1b808c538caacd4fcfe696d12890ebe0a8c8d29a..2ecb36b34a3c574e1a9af52fb4558b1021fc3003 100644 --- a/modules/Invoice/models/DetailView.php +++ b/modules/Invoice/models/DetailView.php @@ -17,7 +17,7 @@ class Invoice_DetailView_Model extends Inventory_DetailView_Model { $recordModel = $this->getRecord(); $purchaseOrderModuleModel = Vtiger_Module_Model::getInstance('PurchaseOrder'); - if ($currentUserModel->hasModuleActionPermission($purchaseOrderModuleModel->getId(), 'EditView')) { + if ($currentUserModel->hasModuleActionPermission($purchaseOrderModuleModel->getId(), 'CreateView')) { $basicActionLink = array( 'linktype' => 'DETAILVIEW', 'linklabel' => vtranslate('LBL_GENERATE') . ' ' . vtranslate($purchaseOrderModuleModel->getSingularLabelKey(), 'PurchaseOrder'), diff --git a/modules/Leads/models/DetailView.php b/modules/Leads/models/DetailView.php index 99ad20d6cdd08c2939983373ad6b086d4941a950..01fe5f0b4296c0ca7a864138d923635ccac6c0fa 100644 --- a/modules/Leads/models/DetailView.php +++ b/modules/Leads/models/DetailView.php @@ -51,7 +51,7 @@ class Leads_DetailView_Model extends Accounts_DetailView_Model { $CalendarActionLinks[] = array(); $CalendarModuleModel = Vtiger_Module_Model::getInstance('Calendar'); - if($currentUserModel->hasModuleActionPermission($CalendarModuleModel->getId(), 'EditView')) { + if($currentUserModel->hasModuleActionPermission($CalendarModuleModel->getId(), 'CreateView')) { $CalendarActionLinks[] = array( 'linktype' => 'DETAILVIEW', 'linklabel' => 'LBL_ADD_EVENT', diff --git a/modules/Portal/actions/SaveAjax.php b/modules/Portal/actions/SaveAjax.php index df8f0d92a5554fdc402344f87134b6e4d8cebdf2..2bdd5be0004488f0b8c916422b3fa67f0faad5b8 100644 --- a/modules/Portal/actions/SaveAjax.php +++ b/modules/Portal/actions/SaveAjax.php @@ -14,6 +14,11 @@ class Portal_SaveAjax_Action extends Vtiger_SaveAjax_Action { $moduleName = $request->getModule(); $record = $request->get('record'); + $actionName = ($record) ? 'EditView' : 'CreateView'; + if(!Users_Privileges_Model::isPermitted($moduleName, $actionName, $record)) { + throw new AppException(vtranslate('LBL_PERMISSION_DENIED')); + } + if(!Users_Privileges_Model::isPermitted($moduleName, 'Save', $record)) { throw new AppException(vtranslate('LBL_PERMISSION_DENIED')); } diff --git a/modules/Potentials/models/Record.php b/modules/Potentials/models/Record.php index 72f8bd013744a51f624764704ed51819ec152447..d4526bceb1fb80fcedb9821b112e1784d9ec2495 100644 --- a/modules/Potentials/models/Record.php +++ b/modules/Potentials/models/Record.php @@ -94,7 +94,7 @@ class Potentials_Record_Model extends Vtiger_Record_Model { $privilegeModel = Users_Privileges_Model::getCurrentUserPrivilegesModel(); $moduleName = 'Project'; - if(!Users_Privileges_Model::isPermitted($moduleName, 'EditView')) { + if(!Users_Privileges_Model::isPermitted($moduleName, 'CreateView')) { return; } diff --git a/modules/Potentials/views/ConvertPotential.php b/modules/Potentials/views/ConvertPotential.php index 20857096d9a80eaebbf0a881e432589a77c11610..b84e271ad3370a380869aac380bc50e863e5de38 100644 --- a/modules/Potentials/views/ConvertPotential.php +++ b/modules/Potentials/views/ConvertPotential.php @@ -16,7 +16,7 @@ class Potentials_ConvertPotential_View extends Vtiger_Index_View { $projectModuleModel = Vtiger_Module_Model::getInstance('Project'); $currentUserModel = Users_Privileges_Model::getCurrentUserPrivilegesModel(); - if(!$currentUserModel->hasModuleActionPermission($projectModuleModel->getId(), 'EditView')) { + if(!$currentUserModel->hasModuleActionPermission($projectModuleModel->getId(), 'CreateView')) { throw new AppException(vtranslate('LBL_PERMISSION_DENIED', $moduleName)); } } diff --git a/modules/Potentials/views/SaveConvertPotential.php b/modules/Potentials/views/SaveConvertPotential.php index 51cc3ebf6d132232005bb20ae93cec3aec19c4ba..5e4110362ba3f6a90c4a6f51d7801db7ebbce22c 100644 --- a/modules/Potentials/views/SaveConvertPotential.php +++ b/modules/Potentials/views/SaveConvertPotential.php @@ -17,7 +17,7 @@ class Potentials_SaveConvertPotential_View extends Vtiger_View_Controller { $projectModuleModel = Vtiger_Module_Model::getInstance('Project'); $currentUserModel = Users_Privileges_Model::getCurrentUserPrivilegesModel(); - if(!$currentUserModel->hasModuleActionPermission($projectModuleModel->getId(), 'EditView')) { + if(!$currentUserModel->hasModuleActionPermission($projectModuleModel->getId(), 'CreateView')) { throw new AppException(vtranslate('LBL_CREATE_PROJECT_PERMISSION_DENIED', $moduleName)); } } diff --git a/modules/Products/models/DetailView.php b/modules/Products/models/DetailView.php index 5f2497ea37f72f4d6b5b4a5fd904d4c36a8d614e..2eab5df47dd599ac6e899f67785d64ea75df33e4 100644 --- a/modules/Products/models/DetailView.php +++ b/modules/Products/models/DetailView.php @@ -24,7 +24,7 @@ class Products_DetailView_Model extends Vtiger_DetailView_Model { if ($recordModel->getActiveStatusOfRecord()) { $quotesModuleModel = Vtiger_Module_Model::getInstance('Quotes'); - if($currentUserModel->hasModuleActionPermission($quotesModuleModel->getId(), 'EditView')) { + if($currentUserModel->hasModuleActionPermission($quotesModuleModel->getId(), 'CreateView')) { $basicActionLink = array( 'linktype' => 'DETAILVIEW', 'linklabel' => vtranslate('LBL_CREATE').' '.vtranslate($quotesModuleModel->getSingularLabelKey(), 'Quotes'), @@ -35,7 +35,7 @@ class Products_DetailView_Model extends Vtiger_DetailView_Model { } $invoiceModuleModel = Vtiger_Module_Model::getInstance('Invoice'); - if($currentUserModel->hasModuleActionPermission($invoiceModuleModel->getId(), 'EditView')) { + if($currentUserModel->hasModuleActionPermission($invoiceModuleModel->getId(), 'CreateView')) { $basicActionLink = array( 'linktype' => 'DETAILVIEW', 'linklabel' => vtranslate('LBL_CREATE').' '.vtranslate($invoiceModuleModel->getSingularLabelKey(), 'Invoice'), @@ -46,7 +46,7 @@ class Products_DetailView_Model extends Vtiger_DetailView_Model { } $purchaseOrderModuleModel = Vtiger_Module_Model::getInstance('PurchaseOrder'); - if($currentUserModel->hasModuleActionPermission($purchaseOrderModuleModel->getId(), 'EditView')) { + if($currentUserModel->hasModuleActionPermission($purchaseOrderModuleModel->getId(), 'CreateView')) { $basicActionLink = array( 'linktype' => 'DETAILVIEW', 'linklabel' => vtranslate('LBL_CREATE').' '.vtranslate($purchaseOrderModuleModel->getSingularLabelKey(), 'PurchaseOrder'), @@ -57,7 +57,7 @@ class Products_DetailView_Model extends Vtiger_DetailView_Model { } $salesOrderModuleModel = Vtiger_Module_Model::getInstance('SalesOrder'); - if($currentUserModel->hasModuleActionPermission($salesOrderModuleModel->getId(), 'EditView')) { + if($currentUserModel->hasModuleActionPermission($salesOrderModuleModel->getId(), 'CreateView')) { $basicActionLink = array( 'linktype' => 'DETAILVIEW', 'linklabel' => vtranslate('LBL_CREATE').' '.vtranslate($salesOrderModuleModel->getSingularLabelKey(), 'SalesOrder'), diff --git a/modules/Products/views/InRelation.php b/modules/Products/views/InRelation.php index 6950ff630e83c97e6e6a2624ffb9a8108abd2844..a9493019f46503f70d2b76df508f298fa5073e62 100644 --- a/modules/Products/views/InRelation.php +++ b/modules/Products/views/InRelation.php @@ -126,6 +126,7 @@ class Products_InRelation_View extends Vtiger_RelatedList_View { $viewer->assign('IS_EDITABLE', $relationModel->isEditable()); $viewer->assign('IS_DELETABLE', $relationModel->isDeletable()); + $viewer->assign('IS_CREATE_PERMITTED', $relatedModuleModel->isPermitted('CreateView')); $viewer->assign('MODULE', $moduleName); $viewer->assign('PAGING', $pagingModel); diff --git a/modules/Products/views/MoreCurrenciesList.php b/modules/Products/views/MoreCurrenciesList.php index 34f87a1498343d1c02498b6294c26474f748cf4a..2720352cc3f26f9a37474bd13759f717dedd282d 100644 --- a/modules/Products/views/MoreCurrenciesList.php +++ b/modules/Products/views/MoreCurrenciesList.php @@ -13,9 +13,11 @@ class Products_MoreCurrenciesList_View extends Vtiger_IndexAjax_View { public function checkPermission(Vtiger_Request $request) { $moduleName = $request->getModule(); + $record = $request->get('record'); - if (!Users_Privileges_Model::isPermitted($moduleName, 'EditView')) { - throw new AppException(vtranslate('LBL_PERMISSION_DENIED', $moduleName)); + $actionName = ($record) ? 'EditView' : 'CreateView'; + if(!Users_Privileges_Model::isPermitted($moduleName, $actionName, $record)) { + throw new AppException(vtranslate('LBL_PERMISSION_DENIED')); } } diff --git a/modules/Quotes/models/DetailView.php b/modules/Quotes/models/DetailView.php index ec66f465dc60235efa2effea0c16f5577a071d75..3739c07ef12a83d7deeaf6b49ac8993678b16de6 100644 --- a/modules/Quotes/models/DetailView.php +++ b/modules/Quotes/models/DetailView.php @@ -23,7 +23,7 @@ class Quotes_DetailView_Model extends Inventory_DetailView_Model { $recordModel = $this->getRecord(); $invoiceModuleModel = Vtiger_Module_Model::getInstance('Invoice'); - if($currentUserModel->hasModuleActionPermission($invoiceModuleModel->getId(), 'EditView')) { + if($currentUserModel->hasModuleActionPermission($invoiceModuleModel->getId(), 'CreateView')) { $basicActionLink = array( 'linktype' => 'DETAILVIEW', 'linklabel' => vtranslate('LBL_GENERATE').' '.vtranslate($invoiceModuleModel->getSingularLabelKey(), 'Invoice'), @@ -34,7 +34,7 @@ class Quotes_DetailView_Model extends Inventory_DetailView_Model { } $salesOrderModuleModel = Vtiger_Module_Model::getInstance('SalesOrder'); - if($currentUserModel->hasModuleActionPermission($salesOrderModuleModel->getId(), 'EditView')) { + if($currentUserModel->hasModuleActionPermission($salesOrderModuleModel->getId(), 'CreateView')) { $basicActionLink = array( 'linktype' => 'DETAILVIEW', 'linklabel' => vtranslate('LBL_GENERATE').' '.vtranslate($salesOrderModuleModel->getSingularLabelKey(), 'SalesOrder'), @@ -45,7 +45,7 @@ class Quotes_DetailView_Model extends Inventory_DetailView_Model { } $purchaseOrderModuleModel = Vtiger_Module_Model::getInstance('PurchaseOrder'); - if($currentUserModel->hasModuleActionPermission($purchaseOrderModuleModel->getId(), 'EditView')) { + if($currentUserModel->hasModuleActionPermission($purchaseOrderModuleModel->getId(), 'CreateView')) { $basicActionLink = array( 'linktype' => 'DETAILVIEW', 'linklabel' => vtranslate('LBL_GENERATE').' '.vtranslate($purchaseOrderModuleModel->getSingularLabelKey(), 'PurchaseOrder'), diff --git a/modules/Rss/actions/Save.php b/modules/Rss/actions/Save.php index 3c59df1b8914d5890247571271c6c9ea395178d5..80708b7e19993349961581d09c9978c6988a51ea 100644 --- a/modules/Rss/actions/Save.php +++ b/modules/Rss/actions/Save.php @@ -15,6 +15,11 @@ class Rss_Save_Action extends Vtiger_Save_Action { $moduleName = $request->getModule(); $record = $request->get('record'); + $actionName = ($record) ? 'EditView' : 'CreateView'; + if(!Users_Privileges_Model::isPermitted($moduleName, $actionName, $record)) { + throw new AppException(vtranslate('LBL_PERMISSION_DENIED')); + } + if(!Users_Privileges_Model::isPermitted($moduleName, 'Save', $record)) { throw new AppException(vtranslate('LBL_PERMISSION_DENIED')); } diff --git a/modules/SalesOrder/models/DetailView.php b/modules/SalesOrder/models/DetailView.php index 5eb24d4a4c30ef2e803cd4eb3475a53adced9092..a6e27e709457215a113e643f6da9e66941591daa 100644 --- a/modules/SalesOrder/models/DetailView.php +++ b/modules/SalesOrder/models/DetailView.php @@ -23,7 +23,7 @@ class SalesOrder_DetailView_Model extends Inventory_DetailView_Model { $recordModel = $this->getRecord(); $invoiceModuleModel = Vtiger_Module_Model::getInstance('Invoice'); - if($currentUserModel->hasModuleActionPermission($invoiceModuleModel->getId(), 'EditView')) { + if($currentUserModel->hasModuleActionPermission($invoiceModuleModel->getId(), 'CreateView')) { $basicActionLink = array( 'linktype' => 'DETAILVIEW', 'linklabel' => vtranslate('LBL_CREATE').' '.vtranslate($invoiceModuleModel->getSingularLabelKey(), 'Invoice'), @@ -34,7 +34,7 @@ class SalesOrder_DetailView_Model extends Inventory_DetailView_Model { } $purchaseOrderModuleModel = Vtiger_Module_Model::getInstance('PurchaseOrder'); - if($currentUserModel->hasModuleActionPermission($purchaseOrderModuleModel->getId(), 'EditView')) { + if($currentUserModel->hasModuleActionPermission($purchaseOrderModuleModel->getId(), 'CreateView')) { $basicActionLink = array( 'linktype' => 'DETAILVIEW', 'linklabel' => vtranslate('LBL_CREATE').' '.vtranslate($purchaseOrderModuleModel->getSingularLabelKey(), 'PurchaseOrder'), diff --git a/modules/Vendors/models/DetailView.php b/modules/Vendors/models/DetailView.php index 9df5838938ce4cea687b39db81e4d01177476044..7bdeb3dab6f37c128170b407d9746762212c97cb 100644 --- a/modules/Vendors/models/DetailView.php +++ b/modules/Vendors/models/DetailView.php @@ -33,7 +33,7 @@ class Vendors_DetailView_Model extends Vtiger_DetailView_Model { $linkModelList['DETAILVIEWBASIC'][] = Vtiger_Link_Model::getInstanceFromValues($basicActionLink); } $purchaseOrderModuleModel = Vtiger_Module_Model::getInstance('PurchaseOrder'); - if($currentUserModel->hasModuleActionPermission($purchaseOrderModuleModel->getId(), 'EditView')) { + if($currentUserModel->hasModuleActionPermission($purchaseOrderModuleModel->getId(), 'CreateView')) { $basicActionLink = array( 'linktype' => 'DETAILVIEW', 'linklabel' => vtranslate('LBL_CREATE').' '.vtranslate($purchaseOrderModuleModel->getSingularLabelKey(), 'PurchaseOrder'), diff --git a/modules/Vtiger/actions/Save.php b/modules/Vtiger/actions/Save.php index fa60da48c50f16dfa5371e7bc78a5d4f8dde15c7..635a47a8c24adbc8b8c13c0f2e2ec3e8b53b713f 100644 --- a/modules/Vtiger/actions/Save.php +++ b/modules/Vtiger/actions/Save.php @@ -14,6 +14,11 @@ class Vtiger_Save_Action extends Vtiger_Action_Controller { $moduleName = $request->getModule(); $record = $request->get('record'); + $actionName = ($record) ? 'EditView' : 'CreateView'; + if(!Users_Privileges_Model::isPermitted($moduleName, $actionName, $record)) { + throw new AppException(vtranslate('LBL_PERMISSION_DENIED')); + } + if(!Users_Privileges_Model::isPermitted($moduleName, 'Save', $record)) { throw new AppException(vtranslate('LBL_PERMISSION_DENIED')); } diff --git a/modules/Vtiger/models/Action.php b/modules/Vtiger/models/Action.php index 64acfb55a3210050c9ce36631bdb98d2d595b019..88dee98b9fce2584d5b3f6b1e867f152912700e9 100644 --- a/modules/Vtiger/models/Action.php +++ b/modules/Vtiger/models/Action.php @@ -13,7 +13,7 @@ */ class Vtiger_Action_Model extends Vtiger_Base_Model { - static $standardActions = array('0' => 'Save','1' => 'EditView','2' => 'Delete','3' => 'index','4' => 'DetailView'); + static $standardActions = array('0' => 'Save','1' => 'EditView','2' => 'Delete','3' => 'index','4' => 'DetailView', '7' => 'CreateView'); static $nonConfigurableActions = array('Save', 'index', 'SavePriceBook', 'SaveVendor', 'DetailViewAjax', 'PriceBookEditView', 'QuickCreate', 'VendorEditView', 'DeletePriceBook', 'DeleteVendor', 'Popup', 'PriceBookDetailView', diff --git a/modules/Vtiger/models/DetailView.php b/modules/Vtiger/models/DetailView.php index 31bc26d9c1fd2f695cc10a3304aafd4ab7a1df32..dda317ccc5e675960e16cba859761fef1c90b251 100644 --- a/modules/Vtiger/models/DetailView.php +++ b/modules/Vtiger/models/DetailView.php @@ -88,7 +88,7 @@ class Vtiger_DetailView_Model extends Vtiger_Base_Model { $linkModelList['DETAILVIEW'][] = Vtiger_Link_Model::getInstanceFromValues($deletelinkModel); } - if($moduleModel->isDuplicateOptionAllowed('EditView', $recordId)) { + if($moduleModel->isDuplicateOptionAllowed('CreateView', $recordId)) { $duplicateLinkModel = array( 'linktype' => 'DETAILVIEWBASIC', 'linklabel' => 'LBL_DUPLICATE', @@ -229,7 +229,7 @@ class Vtiger_DetailView_Model extends Vtiger_Base_Model { $userPrivilegesModel = Users_Privileges_Model::getCurrentUserPrivilegesModel(); $documentsInstance = Vtiger_Module_Model::getInstance('Documents'); if($userPrivilegesModel->hasModuleActionPermission($documentsInstance->getId(), 'DetailView') && $moduleModel->isModuleRelated('Documents')) { - $createPermission = $userPrivilegesModel->hasModuleActionPermission($documentsInstance->getId(), 'EditView'); + $createPermission = $userPrivilegesModel->hasModuleActionPermission($documentsInstance->getId(), 'CreateView'); $widgets[] = array( 'linktype' => 'DETAILVIEWWIDGET', 'linklabel' => 'Documents', diff --git a/modules/Vtiger/models/ListView.php b/modules/Vtiger/models/ListView.php index e355aab79baa0af55215a0fa5e6e920df33aafdb..e23b7d508c6cd5e71a203acaf78e73219c9a9218 100644 --- a/modules/Vtiger/models/ListView.php +++ b/modules/Vtiger/models/ListView.php @@ -117,7 +117,7 @@ class Vtiger_ListView_Model extends Vtiger_Base_Model { } $modCommentsModel = Vtiger_Module_Model::getInstance('ModComments'); - if($moduleModel->isCommentEnabled() && $modCommentsModel->isPermitted('EditView')) { + if($moduleModel->isCommentEnabled() && $modCommentsModel->isPermitted('CreateView')) { $massActionLinks[] = array( 'linktype' => 'LISTVIEWMASSACTION', 'linklabel' => 'LBL_ADD_COMMENT', diff --git a/modules/Vtiger/models/RelationListView.php b/modules/Vtiger/models/RelationListView.php index 88eef67020c22a753642be9deb9c1ec9dee25db3..35f99ca4703fb431b7ad717522c159216ef7ae20 100644 --- a/modules/Vtiger/models/RelationListView.php +++ b/modules/Vtiger/models/RelationListView.php @@ -176,21 +176,22 @@ class Vtiger_RelationListView_Model extends Vtiger_Base_Model { $relatedModel = $relationModel->getRelationModuleModel(); if($relatedModel->get('label') == 'Calendar'){ - - $addLinkList[] = array( - 'linktype' => 'LISTVIEWBASIC', - 'linklabel' => vtranslate('LBL_ADD_EVENT'), - 'linkurl' => $this->getCreateEventRecordUrl(), - 'linkicon' => '', - '_linklabel' => '_add_event'// used in relatedlist.tpl to identify module to open quickcreate popup - ); - $addLinkList[] = array( - 'linktype' => 'LISTVIEWBASIC', - 'linklabel' => vtranslate('LBL_ADD_TASK'), - 'linkurl' => $this->getCreateTaskRecordUrl(), - 'linkicon' => '', - '_linklabel' => '_add_task' - ); + if($relatedModel->isPermitted('CreateView')) { + $addLinkList[] = array( + 'linktype' => 'LISTVIEWBASIC', + 'linklabel' => vtranslate('LBL_ADD_EVENT'), + 'linkurl' => $this->getCreateEventRecordUrl(), + 'linkicon' => '', + '_linklabel' => '_add_event'// used in relatedlist.tpl to identify module to open quickcreate popup + ); + $addLinkList[] = array( + 'linktype' => 'LISTVIEWBASIC', + 'linklabel' => vtranslate('LBL_ADD_TASK'), + 'linkurl' => $this->getCreateTaskRecordUrl(), + 'linkicon' => '', + '_linklabel' => '_add_task' + ); + } } else if ($relatedModel->get('label') == 'Documents') { $parentRecordModule = $this->getParentRecordModel(); $parentModule = $parentRecordModule->getModule(); @@ -226,15 +227,17 @@ class Vtiger_RelationListView_Model extends Vtiger_Base_Model { 'linkclass' => 'addDocumentToVtiger', ); }else{ - $addLinkList = array( - array( - 'linktype' => 'LISTVIEWBASIC', - // NOTE: $relatedModel->get('label') assuming it to be a module name - we need singular label for Add action. - 'linklabel' => vtranslate('LBL_ADD')." ".vtranslate('SINGLE_'.$relatedModel->getName(), $relatedModel->getName()), - 'linkurl' => $this->getCreateViewUrl(), - 'linkicon' => '', - ) - ); + if (Users_Privileges_Model::isPermitted($relatedModel->getName(), 'CreateView')) { + $addLinkList = array( + array( + 'linktype' => 'LISTVIEWBASIC', + // NOTE: $relatedModel->get('label') assuming it to be a module name - we need singular label for Add action. + 'linklabel' => vtranslate('LBL_ADD')." ".vtranslate('SINGLE_'.$relatedModel->getName(), $relatedModel->getName()), + 'linkurl' => $this->getCreateViewUrl(), + 'linkicon' => '', + ) + ); + } } foreach($addLinkList as $addLink) { diff --git a/modules/Vtiger/views/ComposeEmail.php b/modules/Vtiger/views/ComposeEmail.php index 2d27701c92eda2849af2727ea0bd9f8e1c8213d8..0ef99ddd944cf612918e9479f88fc2849965f8c4 100644 --- a/modules/Vtiger/views/ComposeEmail.php +++ b/modules/Vtiger/views/ComposeEmail.php @@ -23,8 +23,9 @@ class Vtiger_ComposeEmail_View extends Vtiger_Footer_View { public function checkPermission(Vtiger_Request $request) { $moduleName = $request->getModule(); - - if (!Users_Privileges_Model::isPermitted($moduleName, 'EditView')) { + $record = $request->get('record'); + $actionName = ($record) ? 'EditView' : 'CreateView'; + if(!Users_Privileges_Model::isPermitted($moduleName, $actionName, $record)) { throw new AppException(vtranslate('LBL_PERMISSION_DENIED')); } } diff --git a/modules/Vtiger/views/Edit.php b/modules/Vtiger/views/Edit.php index d746173c73a3a34412255f257c69a444dece7c03..84c30b0299b244d772733a9aa2ee1f3e4c086889 100644 --- a/modules/Vtiger/views/Edit.php +++ b/modules/Vtiger/views/Edit.php @@ -18,7 +18,12 @@ Class Vtiger_Edit_View extends Vtiger_Index_View { $moduleName = $request->getModule(); $record = $request->get('record'); - if (!Users_Privileges_Model::isPermitted($moduleName, 'EditView', $record)) { + $actionName = 'CreateView'; + if ($record && !$request->get('isDuplicate')) { + $actionName = 'EditView'; + } + + if(!Users_Privileges_Model::isPermitted($moduleName, $actionName, $record)) { throw new AppException(vtranslate('LBL_PERMISSION_DENIED')); } diff --git a/modules/Vtiger/views/List.php b/modules/Vtiger/views/List.php index c2fd61910524b6b9d90d92d5f22aa53c229bc5a1..94973858b1791d005ddea7ecb72e4d270d610c81 100644 --- a/modules/Vtiger/views/List.php +++ b/modules/Vtiger/views/List.php @@ -402,6 +402,7 @@ class Vtiger_List_View extends Vtiger_Index_View { } $viewer->assign('LIST_VIEW_MODEL', $listViewModel); $viewer->assign('GROUPS_IDS', Vtiger_Util_Helper::getGroupsIdsForUsers($currentUser->getId())); + $viewer->assign('IS_RECORD_CREATABLE', $listViewModel->getModule()->isPermitted('CreateView')); $viewer->assign('IS_MODULE_EDITABLE', $listViewModel->getModule()->isPermitted('EditView')); $viewer->assign('IS_MODULE_DELETABLE', $listViewModel->getModule()->isPermitted('Delete')); $viewer->assign('SEARCH_DETAILS', $searchParams); diff --git a/modules/Vtiger/views/RelatedList.php b/modules/Vtiger/views/RelatedList.php index 8cd0c316f47b6fe348d71b394238b6a295aa9cc7..7b2d92a816cdda9511ef30275c818ef43d4f0c06 100644 --- a/modules/Vtiger/views/RelatedList.php +++ b/modules/Vtiger/views/RelatedList.php @@ -90,6 +90,7 @@ class Vtiger_RelatedList_View extends Vtiger_Index_View { $viewer = $this->getViewer($request); $viewer->assign('RELATED_FIELDS_INFO', json_encode($fieldsInfo)); + $viewer->assign('IS_CREATE_PERMITTED', isPermitted($relatedModuleName, 'CreateView')); $viewer->assign('RELATED_RECORDS' , $models); $viewer->assign('PARENT_RECORD', $parentRecordModel); $viewer->assign('RELATED_LIST_LINKS', $links); diff --git a/pkg/vtiger/modules/EmailTemplates/modules/EmailTemplates/actions/Save.php b/pkg/vtiger/modules/EmailTemplates/modules/EmailTemplates/actions/Save.php index 83aada21236785b09fcfdb488dfc61832fc181ef..4085157c5fee95a499e261ae6182a30ec360e5f8 100644 --- a/pkg/vtiger/modules/EmailTemplates/modules/EmailTemplates/actions/Save.php +++ b/pkg/vtiger/modules/EmailTemplates/modules/EmailTemplates/actions/Save.php @@ -14,6 +14,11 @@ class EmailTemplates_Save_Action extends Vtiger_Save_Action { $moduleName = $request->getModule(); $record = $request->get('record'); + $actionName = ($record) ? 'EditView' : 'CreateView'; + if(!Users_Privileges_Model::isPermitted($moduleName, $actionName, $record)) { + throw new AppException(vtranslate('LBL_PERMISSION_DENIED')); + } + if (!Users_Privileges_Model::isPermitted($moduleName, 'Save', $record)) { throw new AppException(vtranslate('LBL_PERMISSION_DENIED')); } diff --git a/pkg/vtiger/modules/EmailTemplates/modules/EmailTemplates/views/List.php b/pkg/vtiger/modules/EmailTemplates/modules/EmailTemplates/views/List.php index f4027322b523e85dd6e26ccd299246c580f84cfa..0ba8ca351da9f70a2cce6fa83dbc2c8419b5f88c 100644 --- a/pkg/vtiger/modules/EmailTemplates/modules/EmailTemplates/views/List.php +++ b/pkg/vtiger/modules/EmailTemplates/modules/EmailTemplates/views/List.php @@ -204,6 +204,7 @@ class EmailTemplates_List_View extends Vtiger_Index_View { } $viewer->assign('LIST_VIEW_MODEL', $listViewModel); + $viewer->assign('IS_RECORD_CREATABLE', $listViewModel->getModule()->isPermitted('CreateView')); $viewer->assign('IS_MODULE_EDITABLE', $listViewModel->getModule()->isPermitted('EditView')); $viewer->assign('IS_MODULE_DELETABLE', $listViewModel->getModule()->isPermitted('Delete')); } diff --git a/pkg/vtiger/modules/EmailTemplates/modules/EmailTemplates/views/Popup.php b/pkg/vtiger/modules/EmailTemplates/modules/EmailTemplates/views/Popup.php index 319bf83f4d4786361b7c5f92fd1caa3efe7f96a1..3376e7f80294402219919632584448ed5afe5273 100644 --- a/pkg/vtiger/modules/EmailTemplates/modules/EmailTemplates/views/Popup.php +++ b/pkg/vtiger/modules/EmailTemplates/modules/EmailTemplates/views/Popup.php @@ -106,6 +106,7 @@ class EmailTemplates_Popup_View extends Vtiger_Popup_View { $viewer->assign('LISTVIEW_COUNT', $this->listViewCount); } + $viewer->assign('IS_RECORD_CREATABLE', $listViewModel->getModule()->isPermitted('CreateView')); $viewer->assign('IS_MODULE_EDITABLE', $listViewModel->getModule()->isPermitted('EditView')); $viewer->assign('IS_MODULE_DELETABLE', $listViewModel->getModule()->isPermitted('Delete')); diff --git a/pkg/vtiger/modules/Import/modules/Import/actions/Data.php b/pkg/vtiger/modules/Import/modules/Import/actions/Data.php index 4633c2758693ebfc6b0af339d3c83cc8195e643f..4ab19d09c2b5e2e1c10de90a6614d1a1ce25cc7d 100644 --- a/pkg/vtiger/modules/Import/modules/Import/actions/Data.php +++ b/pkg/vtiger/modules/Import/modules/Import/actions/Data.php @@ -587,7 +587,7 @@ class Import_Data_Action extends Vtiger_Action_Controller { } } if ((empty($entityId) || $entityId == 0) && !empty($referenceModuleName)) { - if (isPermitted($referenceModuleName, 'EditView') == 'yes') { + if (isPermitted($referenceModuleName, 'CreateView') == 'yes') { try { $wsEntityIdInfo = $this->createEntityRecord($referenceModuleName, $entityLabel); $wsEntityId = $wsEntityIdInfo['id']; @@ -1142,7 +1142,7 @@ class Import_Data_Action extends Vtiger_Action_Controller { $entityLabel = trim(trim($entityLabel), ','); $entityId = getEntityId($referenceModuleName, decode_html($entityLabel)); if (!$entityId) { - if (isPermitted($referenceModuleName, 'EditView') == 'yes') { + if (isPermitted($referenceModuleName, 'CreateView') == 'yes') { try { $wsEntityIdInfo = $this->createEntityRecord($referenceModuleName, $entityLabel); $wsEntityId = $wsEntityIdInfo['id']; diff --git a/pkg/vtiger/modules/MailManager/modules/MailManager/MailManager.php b/pkg/vtiger/modules/MailManager/modules/MailManager/MailManager.php index dde8aa7ae415e0facea3abb509724863077258ea..25897fdf441ad933c34ddb6b6102010b223b877a 100644 --- a/pkg/vtiger/modules/MailManager/modules/MailManager/MailManager.php +++ b/pkg/vtiger/modules/MailManager/modules/MailManager/MailManager.php @@ -107,7 +107,7 @@ class MailManager { static function checkModuleWriteAccessForCurrentUser($module) { global $current_user; - if (isPermitted($module, 'EditView') == "yes" && vtlib_isModuleActive($module)) { + if (isPermitted($module, 'CreateView') == "yes" && vtlib_isModuleActive($module)) { return true; } return false; diff --git a/pkg/vtiger/modules/MailManager/modules/MailManager/actions/Upload.php b/pkg/vtiger/modules/MailManager/modules/MailManager/actions/Upload.php index 2b12717612a99717c93aa5ca45615d9500c9a6e8..3ef689e21788d67e620317bfae3786f5a74f6759 100644 --- a/pkg/vtiger/modules/MailManager/modules/MailManager/actions/Upload.php +++ b/pkg/vtiger/modules/MailManager/modules/MailManager/actions/Upload.php @@ -244,7 +244,7 @@ class MailManager_Upload_Action extends qqFileUploader { * @return Array */ public function handleUpload($uploadDirectory, $replaceOldFile = FALSE) { - if(!isPermitted('Documents', 'EditView')) { + if(!isPermitted('Documents', 'CreateView')) { return array('error' => "Permission not available"); } diff --git a/pkg/vtiger/modules/ModComments/layouts/v7/modules/ModComments/ListViewContents.tpl b/pkg/vtiger/modules/ModComments/layouts/v7/modules/ModComments/ListViewContents.tpl index fe2a2708e7b07e67dad1e70e7729825025baac3f..9fa63f8fc29b8f9b58383a745dcaba8543413f29 100644 --- a/pkg/vtiger/modules/ModComments/layouts/v7/modules/ModComments/ListViewContents.tpl +++ b/pkg/vtiger/modules/ModComments/layouts/v7/modules/ModComments/ListViewContents.tpl @@ -164,7 +164,7 @@ <div class="emptyRecordsContent"> {assign var=SINGLE_MODULE value="SINGLE_$MODULE"} {vtranslate('LBL_NO')} {vtranslate($MODULE, $MODULE)} {vtranslate('LBL_FOUND')}. - {if $IS_MODULE_EDITABLE} + {if $IS_RECORD_CREATABLE} <a style="color:blue" href="{$MODULE_MODEL->getCreateRecordUrl()}"> {vtranslate('LBL_CREATE')}</a> {if Users_Privileges_Model::isPermitted($MODULE, 'Import') && $LIST_VIEW_MODEL->isImportEnabled()} {vtranslate('LBL_OR', $MODULE)} diff --git a/pkg/vtiger/modules/Projects/Project/layouts/v7/modules/Project/ShowChart.tpl b/pkg/vtiger/modules/Projects/Project/layouts/v7/modules/Project/ShowChart.tpl index 16ea7bbaa13d66425c0addd432429fb551765e34..0aad47ce08fb5fde95c6e20f420563701dbacd16 100644 --- a/pkg/vtiger/modules/Projects/Project/layouts/v7/modules/Project/ShowChart.tpl +++ b/pkg/vtiger/modules/Projects/Project/layouts/v7/modules/Project/ShowChart.tpl @@ -241,7 +241,7 @@ <tr> <td> {assign var="PROJECT_TASK_MODEL" value=Vtiger_Module_Model::getInstance('ProjectTask')} - {assign var="IS_MODULE_EDITABLE" value=$PROJECT_TASK_MODEL->isPermitted('EditView')} + {assign var="IS_MODULE_EDITABLE" value=$PROJECT_TASK_MODEL->isPermitted('CreateView')} {assign var=SINGLE_MODULE value="SINGLE_ProjectTask"} {vtranslate('LBL_NO')} {vtranslate('ProjectTask', 'ProjectTask')} {vtranslate('LBL_FOUND')} {vtranslate('LBL_NO_DATE_VALUE_MSG', 'ProjectTask')}.{if $IS_MODULE_EDITABLE} <a href="{$PROJECT_TASK_MODEL->getCreateRecordUrl()}&projectid={$PARENT_ID}"> {vtranslate('LBL_CREATE')} </a>{/if} </td> diff --git a/pkg/vtiger/modules/Webforms/settings/models/Module.php b/pkg/vtiger/modules/Webforms/settings/models/Module.php index 2c12de17fa599e1e8e3dcdfd646443d68a3e8875..6f4c613625a1b1af89130a0d6e8166f56cb3cce8 100644 --- a/pkg/vtiger/modules/Webforms/settings/models/Module.php +++ b/pkg/vtiger/modules/Webforms/settings/models/Module.php @@ -101,7 +101,7 @@ class Settings_Webforms_Module_Model extends Settings_Vtiger_Module_Model { * @return array */ public function getModuleBasicLinks(){ - $createPermission = Users_Privileges_Model::isPermitted($this->getName(), 'EditView'); + $createPermission = Users_Privileges_Model::isPermitted($this->getName(), 'CreateView'); $moduleName = $this->getName(); $basicLinks = array(); if($createPermission) { diff --git a/soap/firefoxtoolbar.php b/soap/firefoxtoolbar.php index e6c39d7c166f04ebc135836852bbe20652bac507..c833f9181980ed362b89910611ba2e2923ab649f 100644 --- a/soap/firefoxtoolbar.php +++ b/soap/firefoxtoolbar.php @@ -224,7 +224,7 @@ function CheckLeadPermission($username,$sessionid) $current_user=$seed_user; $current_user->retrieve_entity_info($user_id, 'Users'); - if(isPermitted("Leads","EditView") == "yes") + if(isPermitted("Leads",'CreateView') == "yes") { return "allowed"; }else @@ -244,7 +244,7 @@ function CheckContactPermission($username,$sessionid) $current_user=$seed_user; $current_user->retrieve_entity_info($user_id, 'Users'); - if(isPermitted("Contacts","EditView") == "yes") + if(isPermitted("Contacts",'CreateView') == "yes") { return "allowed"; }else @@ -264,7 +264,7 @@ function CheckAccountPermission($username,$sessionid) $current_user=$seed_user; $current_user->retrieve_entity_info($user_id, 'Users'); - if(isPermitted("Accounts","EditView") == "yes") + if(isPermitted("Accounts",'CreateView') == "yes") { return "allowed"; }else @@ -284,7 +284,7 @@ function CheckTicketPermission($username,$sessionid) $current_user=$seed_user; $current_user->retrieve_entity_info($user_id, 'Users'); - if(isPermitted("HelpDesk","EditView") == "yes") + if(isPermitted("HelpDesk",'CreateView') == "yes") { return "allowed"; }else @@ -304,7 +304,7 @@ function CheckVendorPermission($username,$sessionid) $current_user=$seed_user; $current_user->retrieve_entity_info($user_id, 'Users'); - if(isPermitted("Vendors","EditView") == "yes") + if(isPermitted("Vendors",'CreateView') == "yes") { return "allowed"; }else @@ -324,7 +324,7 @@ function CheckProductPermission($username,$sessionid) $current_user=$seed_user; $current_user->retrieve_entity_info($user_id, 'Users'); - if(isPermitted("Products","EditView") == "yes") + if(isPermitted("Products",'CreateView') == "yes") { return "allowed"; }else @@ -344,7 +344,7 @@ function CheckNotePermission($username,$sessionid) $current_user=$seed_user; $current_user->retrieve_entity_info($user_id, 'Users'); - if(isPermitted("Documents","EditView") == "yes") + if(isPermitted("Documents",'CreateView') == "yes") { return "allowed"; }else @@ -364,7 +364,7 @@ function CheckSitePermission($username,$sessionid) $current_user=$seed_user; $current_user->retrieve_entity_info($user_id, 'Users'); - if(isPermitted("Portal","EditView") == "yes") + if(isPermitted("Portal",'CreateView') == "yes") { return "allowed"; }else @@ -384,7 +384,7 @@ function CheckRssPermission($username,$sessionid) $current_user=$seed_user; $current_user->retrieve_entity_info($user_id, 'Users'); - if(isPermitted("Rss","EditView") == "yes") + if(isPermitted("Rss",'CreateView') == "yes") { return "allowed"; }else @@ -407,7 +407,7 @@ function create_site_from_webform($username,$sessionid,$portalname,$portalurl) $current_user=$seed_user; $current_user->retrieve_entity_info($user_id, 'Users'); require_once("modules/Portal/Portal.php"); - if(isPermitted("Portals","EditView") == "yes") + if(isPermitted("Portals",'CreateView') == "yes") { $result = SavePortal($portalname,$portalurl); @@ -477,7 +477,7 @@ function create_rss_from_webform($username,$sessionid,$url) require_once("modules/Rss/Rss.php"); $oRss = new vtigerRSS(); - if(isPermitted("RSS","EditView") == "yes") + if(isPermitted("RSS",'CreateView') == "yes") { if($oRss->setRSSUrl($url)) { @@ -519,7 +519,7 @@ function create_note_from_webform($username,$sessionid,$subject,$desc) require_once("modules/Documents/Documents.php"); $focus = new Documents(); - if(isPermitted("Documents","EditView") == "yes") + if(isPermitted("Documents",'CreateView') == "yes") { $focus->column_fields['notes_title'] = $subject; $focus->column_fields['notecontent'] = $desc; @@ -557,7 +557,7 @@ function create_product_from_webform($username,$sessionid,$productname,$code,$we $adb->println("Create New Product from Web Form - Starts"); require_once("modules/Products/Products.php"); - if(isPermitted("Products","EditView") == "yes") + if(isPermitted("Products",'CreateView') == "yes") { $focus = new Products(); $focus->column_fields['productname'] = $productname; @@ -596,7 +596,7 @@ function create_vendor_from_webform($username,$sessionid,$vendorname,$email,$pho $current_user->retrieve_entity_info($user_id, 'Users'); $adb->println("Create New Vendor from Web Form - Starts"); require_once("modules/Vendors/Vendors.php"); - if(isPermitted("Vendors","EditView" ) == "yes") + if(isPermitted("Vendors",'CreateView' ) == "yes") { $focus = new Vendors(); $focus->column_fields['vendorname'] = $vendorname; @@ -636,7 +636,7 @@ function create_ticket_from_toolbar($username,$sessionid,$title,$description,$pr $current_user=$seed_user; $current_user->retrieve_entity_info($user_id, 'Users'); - if(isPermitted("HelpDesk","EditView") == "yes") + if(isPermitted("HelpDesk",'CreateView') == "yes") { $seed_ticket = new HelpDesk(); @@ -683,7 +683,7 @@ function create_account($username,$sessionid,$accountname,$email,$phone,$primary $current_user=$seed_user; $current_user->retrieve_entity_info($user_id,'Users'); require_once("modules/Accounts/Accounts.php"); - if(isPermitted("Accounts","EditView") == "yes") + if(isPermitted("Accounts",'CreateView') == "yes") { $query = "SELECT accountname FROM vtiger_account,vtiger_crmentity WHERE accountname =? and vtiger_account.accountid = vtiger_crmentity.crmid and vtiger_crmentity.deleted != 1"; $result = $adb->pquery($query, array($accountname)); @@ -737,7 +737,7 @@ function create_lead_from_webform($username,$sessionid,$lastname,$email,$phone,$ require_once("modules/Leads/Leads.php"); $focus = new Leads(); - if(isPermitted("Leads","EditView") == "yes") + if(isPermitted("Leads",'CreateView') == "yes") { $focus->column_fields['lastname'] = $lastname; $focus->column_fields['firstname'] = $firstname; @@ -785,7 +785,7 @@ function create_contact1($user_name, $first_name, $last_name, $email_address ,$a $current_user->retrieve_entity_info($user_id,'Users'); require_once('modules/Contacts/Contacts.php'); - if(isPermitted("Contacts","EditView") == "yes") + if(isPermitted("Contacts",'CreateView') == "yes") { $contact = new Contacts(); $contact->column_fields[firstname]= $first_name; @@ -854,7 +854,7 @@ function GetPicklistValues($username,$sessionid,$tablename) $output[$i] = decode_html($adb->query_result($result1,$i,$tablename)); } } - else if((isPermitted("HelpDesk","EditView") == "yes") && (CheckFieldPermission($tablename,'HelpDesk') == 'true')) + else if((isPermitted("HelpDesk",'CreateView') == "yes") && (CheckFieldPermission($tablename,'HelpDesk') == 'true')) { $query = "select " .$adb->sql_escape_string($tablename) . " from vtiger_". $adb->sql_escape_string($tablename) ." inner join vtiger_role2picklist on vtiger_role2picklist.picklistvalueid = vtiger_". $adb->sql_escape_string($tablename) .".picklist_valueid where roleid=? and picklistid in (select picklistid from vtiger_". $adb->sql_escape_string($tablename)." ) order by sortid"; $result1 = $adb->pquery($query, array($roleid)); diff --git a/soap/thunderbirdplugin.php b/soap/thunderbirdplugin.php index 070b85a33531c9a58b2259ed19cc101297c94201..19c097a4effdf6c9615e36e00823de45a81a28cf 100644 --- a/soap/thunderbirdplugin.php +++ b/soap/thunderbirdplugin.php @@ -605,7 +605,7 @@ function CheckContactPerm($user_name,$password) $user_id = $seed_user->retrieve_user_id($user_name); $current_user = $seed_user; $current_user->retrieve_entity_info($user_id,"Users"); - if(isPermitted("Contacts","EditView") == "yes") + if(isPermitted("Contacts",'CreateView') == "yes") { return "allowed"; }else @@ -662,7 +662,7 @@ function CheckLeadViewPerm($user_name) $user_id = $seed_user->retrieve_user_id($user_name); $current_user = $seed_user; $current_user->retrieve_entity_info($user_id,"Users"); - if(isPermitted("Leads","EditView") == "yes") + if(isPermitted("Leads",'CreateView') == "yes") { return "allowed"; }else