diff --git a/layouts/v7/modules/Reports/Step1.tpl b/layouts/v7/modules/Reports/Step1.tpl index d581273400c78b22bac25fef6a574bbcb11c8e87..f58aa9cf40b84c78d8828e4038a15aa53072305f 100644 --- a/layouts/v7/modules/Reports/Step1.tpl +++ b/layouts/v7/modules/Reports/Step1.tpl @@ -104,10 +104,18 @@ <label class='col-lg-3 control-label textAlignLeft'>{vtranslate('LBL_SHARE_REPORT',$MODULE)}</label> <div class='col-lg-4'> <select id="memberList" class="col-lg-12 select2-container select2 members " multiple="true" name="members[]" data-placeholder="{vtranslate('LBL_ADD_USERS_ROLES', $MODULE)}"> + <optgroup label="{vtranslate('LBL_ALL',$MODULE)}"> + <option value="All::Users" data-member-type="{vtranslate('LBL_ALL',$MODULE)}" + {if ($REPORT_MODEL->get('sharingtype') == 'Public')} selected="selected"{/if}> + {vtranslate('LBL_ALL_USERS',$MODULE)} + </option> + </optgroup> {foreach from=$MEMBER_GROUPS key=GROUP_LABEL item=ALL_GROUP_MEMBERS} <optgroup label="{$GROUP_LABEL}"> {foreach from=$ALL_GROUP_MEMBERS item=MEMBER} - <option value="{$MEMBER->getId()}" data-member-type="{$GROUP_LABEL}" {if isset($SELECTED_MEMBERS_GROUP[$GROUP_LABEL][$MEMBER->getId()])}selected="true"{/if}>{$MEMBER->getName()}</option> + {if $GROUP_LABEL neq 'Users' || $MEMBER->getId() neq 'Users:'|cat:$CURRENT_USER->getId()} + <option value="{$MEMBER->getId()}" data-member-type="{$GROUP_LABEL}" {if isset($SELECTED_MEMBERS_GROUP[$GROUP_LABEL][$MEMBER->getId()])}selected="true"{/if}>{$MEMBER->getName()}</option> + {/if} {/foreach} </optgroup> {/foreach} diff --git a/layouts/v7/modules/Reports/resources/Detail.js b/layouts/v7/modules/Reports/resources/Detail.js index 411ccf11e1d0857dc4d3ed45db55399c515bdde0..5792f5776a740b29500cc077a3b3be45cdb4ec1b 100644 --- a/layouts/v7/modules/Reports/resources/Detail.js +++ b/layouts/v7/modules/Reports/resources/Detail.js @@ -162,6 +162,25 @@ Vtiger_Detail_Js("Reports_Detail_Js",{},{ }); }, + registerOnlyAllUsersInSharedList : function(){ + var self = this; + jQuery('#memberList').on('change',function(e){ + var element = jQuery(e.currentTarget); + if(self.isAllUsersSelected()){ + element.find('option').not('[value="All::Users"]').prop('disabled',true); + element.select2('val',['All::Users']); + element.select2('close'); + }else{ + element.find('option').removeProp('disabled'); + } + }); + }, + + isAllUsersSelected : function() { + var memberList = jQuery('#memberList').val(); + return (memberList != null && (memberList.indexOf('All::Users') != -1)) ? true : false + }, + registerEvents : function(){ this.registerSaveOrGenerateReportEvent(); this.registerEventsForActions(); @@ -170,5 +189,6 @@ Vtiger_Detail_Js("Reports_Detail_Js",{},{ this.generateReportCount(parseInt(jQuery("#countValue").text())); this.registerConditionBlockChangeEvent(); this.registerEventForModifyCondition(); + this.registerOnlyAllUsersInSharedList(); } }); \ No newline at end of file diff --git a/layouts/v7/modules/Reports/resources/Edit.js b/layouts/v7/modules/Reports/resources/Edit.js index ae9d06696b993c464ade16cedae61a4ed77af706..1b7670878a5e6ed158e8cda43607431f85ddaf3a 100644 --- a/layouts/v7/modules/Reports/resources/Edit.js +++ b/layouts/v7/modules/Reports/resources/Edit.js @@ -157,6 +157,24 @@ Vtiger_Edit_Js("Reports_Edit_Js",{ }, registerPageLeaveEvents : function() { }, + registerOnlyAllUsersInSharedList : function(){ + var self = this; + jQuery('#memberList').on('change',function(e){ + var element = jQuery(e.currentTarget); + if(self.isAllUsersSelected()){ + element.find('option').not('[value="All::Users"]').prop('disabled',true); + element.select2('val',['All::Users']); + element.select2('close'); + }else{ + element.find('option').removeProp('disabled'); + } + }); + }, + + isAllUsersSelected : function() { + var memberList = jQuery('#memberList').val(); + return (memberList != null && (memberList.indexOf('All::Users') != -1)) ? true : false + }, registerEvents : function(){ this._super(); var statusToProceed = this.proceedRegisterEvents(); @@ -166,6 +184,7 @@ Vtiger_Edit_Js("Reports_Edit_Js",{ var form = this.currentInstance.getContainer(); this.registerFormSubmitEvent(form); this.registerBackStepClickEvent(); + this.registerOnlyAllUsersInSharedList(); } }); diff --git a/modules/Reports/models/Record.php b/modules/Reports/models/Record.php index c16e3dc92d58ddce2981d40249e4e97279035a42..cf8b793399d136e86dae4e7f4a434dcdea4cafd1 100644 --- a/modules/Reports/models/Record.php +++ b/modules/Reports/models/Record.php @@ -445,12 +445,15 @@ class Reports_Record_Model extends Vtiger_Record_Model { $reportId = $this->getId(); - //When members variable is not empty, it means record shared with other users, so - //sharing type of a report should be private - $sharingType = 'Public'; + //Newly created records are always as Private, only shared users can see report + $sharingType = 'Private'; + $members = $this->get('members',array()); - if(!empty($members)){ - $sharingType = 'Private'; + + if($members && count($members) == 1){ + if($members[0] == 'All::Users'){ + $sharingType = 'Public'; + } } if(empty($reportId)) {