diff --git a/data/CRMEntity.php b/data/CRMEntity.php index ec61d6fed0bf98fd55446e7cc9d3fc6838baaac9..2ff6a3c47640c7ccbd86a2867470917f8027d793 100644 --- a/data/CRMEntity.php +++ b/data/CRMEntity.php @@ -278,6 +278,23 @@ class CRMEntity { if ($module == 'Events') { $module = 'Calendar'; } + + $entityFields = Vtiger_Functions::getEntityModuleInfo($module); + $entityFieldNames = explode(',', $entityFields['fieldname']); + switch ($module) { + case 'HelpDesk': $entityFieldNames = array('ticket_title'); + break; + case 'Documents': $entityFieldNames = array('notes_title'); + break; + } + + $record_label = ''; + foreach($entityFieldNames as $entityFieldName) { + $record_label .= $this->column_fields[$entityFieldName]." "; + } + $label = decode_html($record_label); + $this->column_fields['label'] = $label; + if ($this->mode == 'edit') { $description_val = from_html($this->column_fields['description'], ($insertion_mode == 'edit') ? true : false); @@ -291,8 +308,8 @@ class CRMEntity { $acl = Vtiger_AccessControl::loadUserPrivileges($current_user->id); if ($acl->is_admin == true || $acl->profileGlobalPermission[1] == 0 || $acl->profileGlobalPermission[2] == 0 || $this->isWorkFlowFieldUpdate) { - $sql = "update vtiger_crmentity set smownerid=?, smgroupid=?,modifiedby=?,description=?, modifiedtime=? where crmid=?"; - $params = array($ownerid, $groupid, $current_user->id, $description_val, $adb->formatDate($date_var, true), $this->id); + $sql = "update vtiger_crmentity set smownerid=?, smgroupid=?,modifiedby=?,description=?, modifiedtime=?"; + $params = array($ownerid, $groupid, $current_user->id, $description_val, $adb->formatDate($date_var, true)); } else { $profileList = getCurrentUserProfileList(); $perm_qry = "SELECT columnname FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid = vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid = vtiger_field.fieldid WHERE vtiger_field.tabid = ? AND vtiger_profile2field.visible = 0 AND vtiger_profile2field.readonly = 0 AND vtiger_profile2field.profileid IN (" . generateQuestionMarks($profileList) . ") AND vtiger_def_org_field.visible = 0 and vtiger_field.tablename='vtiger_crmentity' and vtiger_field.displaytype in (1,3) and vtiger_field.presence in (0,2);"; @@ -302,13 +319,22 @@ class CRMEntity { $columname[] = $adb->query_result($perm_result, $i, "columnname"); } if (is_array($columname) && in_array("description", $columname)) { - $sql = "update vtiger_crmentity set smownerid=?, smgroupid=?, modifiedby=?,description=?, modifiedtime=? where crmid=?"; - $params = array($ownerid, $groupid, $current_user->id, $description_val, $adb->formatDate($date_var, true), $this->id); + $sql = "update vtiger_crmentity set smownerid=?, smgroupid=?, modifiedby=?,description=?, modifiedtime=?"; + $params = array($ownerid, $groupid, $current_user->id, $description_val, $adb->formatDate($date_var, true)); } else { - $sql = "update vtiger_crmentity set smownerid=?, smgroupid=?,modifiedby=?, modifiedtime=? where crmid=?"; - $params = array($ownerid, $groupid, $current_user->id, $adb->formatDate($date_var, true), $this->id); + $sql = "update vtiger_crmentity set smownerid=?, smgroupid=?,modifiedby=?, modifiedtime=?"; + $params = array($ownerid, $groupid, $current_user->id, $adb->formatDate($date_var, true)); } } + + if($label) { + $sql .= ", label = ? "; + array_push($params, trim($label)); + } + + $sql .= " where crmid=?"; + array_push($params,$this->id); + $adb->pquery($sql, $params); $this->column_fields['modifiedtime'] = $modified_date_var; $this->column_fields['modifiedby'] = $current_user->id; @@ -339,8 +365,19 @@ class CRMEntity { } $description_val = from_html($this->column_fields['description'], ($insertion_mode == 'edit') ? true : false); - $sql = "insert into vtiger_crmentity (crmid,smcreatorid,smownerid,smgroupid,setype,description,modifiedby,createdtime,modifiedtime,source) values(?,?,?,?,?,?,?,?,?,?)"; - $params = array($current_id, $current_user->id, $ownerid, $groupid, $module, $description_val, $current_user->id, $created_date_var, $modified_date_var,$source); + $params = array("crmid" => $current_id, "smcreatorid" => $current_user->id, "smownerid" => $ownerid, + "smgroupid" => $groupid, "setype" => $module, "description" => $description_val, + "modifiedby" => $current_user->id, "createdtime" => $created_date_var, + "modifiedtime" => $modified_date_var, "source" => $source); + + if($label) { + $params['label'] = trim($label); + } + + $insert_columns = array_keys($params); + $insert_data = array_values($params); + $sql = "insert into vtiger_crmentity (".implode(",",$insert_columns).") values(".generateQuestionMarks($insert_data).")"; + $adb->pquery($sql, $params); $this->column_fields['createdtime'] = $created_date_var; diff --git a/include/Webservices/Utils.php b/include/Webservices/Utils.php index cd0d3cc580fb82ddfbdda0142725bf43e4b57692..2ac8e592f797da550eff5774c0ff4a960c6f78c6 100644 --- a/include/Webservices/Utils.php +++ b/include/Webservices/Utils.php @@ -1291,7 +1291,7 @@ function vtws_filedetails($fileData){ $fileName = $fileData['name']; $fileType = $fileData['type']; $fileName = html_entity_decode($fileName, ENT_QUOTES, vglobal('default_charset')); - $filenamewithpath = $fileData['path'].'_'.$fileData['encName']; + $filenamewithpath = $fileData['path'].$fileData['attachmentsid'].'_'.$fileData['storedname']; $filesize = filesize($filenamewithpath); $fileDetails['fileid'] = $fileData['attachmentsid']; $fileDetails['filename'] = $fileName; diff --git a/layouts/v7/modules/Vtiger/Header.tpl b/layouts/v7/modules/Vtiger/Header.tpl index 1a5e157d71081f087df162ae374bb36d1d446da9..707f6117481cdf2a0f85d23be636f5df715556c9 100644 --- a/layouts/v7/modules/Vtiger/Header.tpl +++ b/layouts/v7/modules/Vtiger/Header.tpl @@ -15,19 +15,19 @@ <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> - <link type='text/css' rel='stylesheet' href='layouts/v7/lib/todc/css/bootstrap.min.css'> - <link type='text/css' rel='stylesheet' href='layouts/v7/lib/todc/css/docs.min.css'> - <link type='text/css' rel='stylesheet' href='layouts/v7/lib/todc/css/todc-bootstrap.min.css'> - <link type='text/css' rel='stylesheet' href='layouts/v7/lib/font-awesome/css/font-awesome.min.css'> - <link type='text/css' rel='stylesheet' href='layouts/v7/lib/jquery/select2/select2.css'> - <link type='text/css' rel='stylesheet' href='layouts/v7/lib/select2-bootstrap/select2-bootstrap.css'> - <link type='text/css' rel='stylesheet' href='libraries/bootstrap/js/eternicode-bootstrap-datepicker/css/datepicker3.css'> - <link type='text/css' rel='stylesheet' href='layouts/v7/lib/jquery/jquery-ui-1.11.3.custom/jquery-ui.css'> - <link type='text/css' rel='stylesheet' href='layouts/v7/lib/vt-icons/style.css'> - <link type='text/css' rel='stylesheet' href='layouts/v7/lib/animate/animate.min.css'> - <link type='text/css' rel='stylesheet' href='layouts/v7/lib/jquery/malihu-custom-scrollbar/jquery.mCustomScrollbar.css'> - <link type='text/css' rel='stylesheet' href='layouts/v7/lib/jquery/jquery.qtip.custom/jquery.qtip.css'> - <link type='text/css' rel='stylesheet' href='layouts/v7/lib/jquery/daterangepicker/daterangepicker.css'> + <link type='text/css' rel='stylesheet' href='{vresource_url("layouts/v7/lib/todc/css/bootstrap.min.css")}'> + <link type='text/css' rel='stylesheet' href='{vresource_url("layouts/v7/lib/todc/css/docs.min.css")}'> + <link type='text/css' rel='stylesheet' href='{vresource_url("layouts/v7/lib/todc/css/todc-bootstrap.min.css")}'> + <link type='text/css' rel='stylesheet' href='{vresource_url("layouts/v7/lib/font-awesome/css/font-awesome.min.css")}'> + <link type='text/css' rel='stylesheet' href='{vresource_url("layouts/v7/lib/jquery/select2/select2.css")}'> + <link type='text/css' rel='stylesheet' href='{vresource_url("layouts/v7/lib/select2-bootstrap/select2-bootstrap.css")}'> + <link type='text/css' rel='stylesheet' href='{vresource_url("libraries/bootstrap/js/eternicode-bootstrap-datepicker/css/datepicker3.css")}'> + <link type='text/css' rel='stylesheet' href='{vresource_url("layouts/v7/lib/jquery/jquery-ui-1.11.3.custom/jquery-ui.css")}'> + <link type='text/css' rel='stylesheet' href='{vresource_url("layouts/v7/lib/vt-icons/style.css")}'> + <link type='text/css' rel='stylesheet' href='{vresource_url("layouts/v7/lib/animate/animate.min.css")}'> + <link type='text/css' rel='stylesheet' href='{vresource_url("layouts/v7/lib/jquery/malihu-custom-scrollbar/jquery.mCustomScrollbar.css")}'> + <link type='text/css' rel='stylesheet' href='{vresource_url("layouts/v7/lib/jquery/jquery.qtip.custom/jquery.qtip.css")}'> + <link type='text/css' rel='stylesheet' href='{vresource_url("layouts/v7/lib/jquery/daterangepicker/daterangepicker.css")}'> <input type="hidden" id="inventoryModules" value={ZEND_JSON::encode($INVENTORY_MODULES)}> diff --git a/layouts/v7/modules/Vtiger/JSResources.tpl b/layouts/v7/modules/Vtiger/JSResources.tpl index fc4fa9b219ed0e7a4958a1874a2254fcf46c8897..ff7ac3d1cd5ca34c71e7629bed3f96b98cfe5ddb 100644 --- a/layouts/v7/modules/Vtiger/JSResources.tpl +++ b/layouts/v7/modules/Vtiger/JSResources.tpl @@ -10,34 +10,34 @@ ********************************************************************************/ -->*} {strip} - <script type="text/javascript" src="layouts/v7/lib/jquery/purl.js"></script> - <script type="text/javascript" src="layouts/v7/lib/jquery/select2/select2.min.js"></script> - <script type="text/javascript" src="layouts/v7/lib/jquery/jquery.class.min.js"></script> - <script type="text/javascript" src="layouts/v7/lib/jquery/jquery-ui-1.11.3.custom/jquery-ui.js"></script> - <script type="text/javascript" src="layouts/v7/lib/todc/js/popper.min.js"></script> - <script type="text/javascript" src="layouts/v7/lib/todc/js/bootstrap.min.js"></script> - <script type="text/javascript" src="libraries/jquery/jstorage.min.js"></script> - <script type="text/javascript" src="layouts/v7/lib/jquery/jquery-validation/jquery.validate.min.js"></script> - <script type="text/javascript" src="layouts/v7/lib/jquery/jquery.slimscroll.min.js"></script> - <script type="text/javascript" src="libraries/jquery/jquery.ba-outside-events.min.js"></script> - <script type="text/javascript" src="libraries/jquery/defunkt-jquery-pjax/jquery.pjax.js"></script> - <script type="text/javascript" src="libraries/jquery/multiplefileupload/jquery_MultiFile.js"></script> - <script type="text/javascript" src="resources/jquery.additions.js"></script> - <script type="text/javascript" src="layouts/v7/lib/bootstrap-notify/bootstrap-notify.min.js"></script> - <script type="text/javascript" src="layouts/v7/lib/jquery/websockets/reconnecting-websocket.js"></script> - <script type="text/javascript" src="layouts/v7/lib/jquery/jquery-play-sound/jquery.playSound.js"></script> - <script type="text/javascript" src="layouts/v7/lib/jquery/malihu-custom-scrollbar/jquery.mousewheel.min.js"></script> - <script type="text/javascript" src="layouts/v7/lib/jquery/malihu-custom-scrollbar/jquery.mCustomScrollbar.js"></script> - <script type="text/javascript" src="layouts/v7/lib/jquery/autoComplete/jquery.textcomplete.js"></script> - <script type="text/javascript" src="layouts/v7/lib/jquery/jquery.qtip.custom/jquery.qtip.js"></script> - <script type="text/javascript" src="libraries/jquery/jquery-visibility.min.js"></script> - <script type="text/javascript" src="layouts/v7/lib/momentjs/moment.js"></script> - <script type="text/javascript" src="layouts/v7/lib/jquery/daterangepicker/moment.min.js"></script> - <script type="text/javascript" src="layouts/v7/lib/jquery/daterangepicker/jquery.daterangepicker.js"></script> - <script type="text/javascript" src="layouts/v7/lib/jquery/jquery.timeago.js"></script> - <script type="text/javascript" src="libraries/jquery/ckeditor/ckeditor.js"></script> - <script type="text/javascript" src="libraries/jquery/ckeditor/adapters/jquery.js"></script> - <script type='text/javascript' src='layouts/v7/lib/anchorme_js/anchorme.min.js'></script> + <script type="text/javascript" src="{vresource_url('layouts/v7/lib/jquery/purl.js')}"></script> + <script type="text/javascript" src="{vresource_url('layouts/v7/lib/jquery/select2/select2.min.js')}"></script> + <script type="text/javascript" src="{vresource_url('layouts/v7/lib/jquery/jquery.class.min.js')}"></script> + <script type="text/javascript" src="{vresource_url('layouts/v7/lib/jquery/jquery-ui-1.11.3.custom/jquery-ui.js')}"></script> + <script type="text/javascript" src="{vresource_url('layouts/v7/lib/todc/js/popper.min.js')}"></script> + <script type="text/javascript" src="{vresource_url('layouts/v7/lib/todc/js/bootstrap.min.js')}"></script> + <script type="text/javascript" src="{vresource_url('libraries/jquery/jstorage.min.js')}"></script> + <script type="text/javascript" src="{vresource_url('layouts/v7/lib/jquery/jquery-validation/jquery.validate.min.js')}"></script> + <script type="text/javascript" src="{vresource_url('layouts/v7/lib/jquery/jquery.slimscroll.min.js')}"></script> + <script type="text/javascript" src="{vresource_url('libraries/jquery/jquery.ba-outside-events.min.js')}"></script> + <script type="text/javascript" src="{vresource_url('libraries/jquery/defunkt-jquery-pjax/jquery.pjax.js')}"></script> + <script type="text/javascript" src="{vresource_url('libraries/jquery/multiplefileupload/jquery_MultiFile.js')}"></script> + <script type="text/javascript" src="{vresource_url('resources/jquery.additions.js')}"></script> + <script type="text/javascript" src="{vresource_url('layouts/v7/lib/bootstrap-notify/bootstrap-notify.min.js')}"></script> + <script type="text/javascript" src="{vresource_url('layouts/v7/lib/jquery/websockets/reconnecting-websocket.js')}"></script> + <script type="text/javascript" src="{vresource_url('layouts/v7/lib/jquery/jquery-play-sound/jquery.playSound.js')}"></script> + <script type="text/javascript" src="{vresource_url('layouts/v7/lib/jquery/malihu-custom-scrollbar/jquery.mousewheel.min.js')}"></script> + <script type="text/javascript" src="{vresource_url('layouts/v7/lib/jquery/malihu-custom-scrollbar/jquery.mCustomScrollbar.js')}"></script> + <script type="text/javascript" src="{vresource_url('layouts/v7/lib/jquery/autoComplete/jquery.textcomplete.js')}"></script> + <script type="text/javascript" src="{vresource_url('layouts/v7/lib/jquery/jquery.qtip.custom/jquery.qtip.js')}"></script> + <script type="text/javascript" src="{vresource_url('libraries/jquery/jquery-visibility.min.js')}"></script> + <script type="text/javascript" src="{vresource_url('layouts/v7/lib/momentjs/moment.js')}"></script> + <script type="text/javascript" src="{vresource_url('layouts/v7/lib/jquery/daterangepicker/moment.min.js')}"></script> + <script type="text/javascript" src="{vresource_url('layouts/v7/lib/jquery/daterangepicker/jquery.daterangepicker.js')}"></script> + <script type="text/javascript" src="{vresource_url('layouts/v7/lib/jquery/jquery.timeago.js')}"></script> + <script type="text/javascript" src="{vresource_url('libraries/jquery/ckeditor/ckeditor.js')}"></script> + <script type="text/javascript" src="{vresource_url('libraries/jquery/ckeditor/adapters/jquery.js')}"></script> + <script type='text/javascript' src="{vresource_url('layouts/v7/lib/anchorme_js/anchorme.min.js')}"></script> <script type="text/javascript" src="{vresource_url('layouts/v7/modules/Vtiger/resources/Class.js')}"></script> <script type='text/javascript' src="{vresource_url('layouts/v7/resources/helper.js')}"></script> <script type="text/javascript" src="{vresource_url('layouts/v7/resources/application.js')}"></script> @@ -60,7 +60,7 @@ <script type="text/javascript" src="{vresource_url('layouts/v7/resources/v7_client_compat.js')}"></script> <!-- Added in the end since it should be after less file loaded --> - <script type="text/javascript" src="libraries/bootstrap/js/less.min.js"></script> + <script type="text/javascript" src="{vresource_url('libraries/bootstrap/js/less.min.js')}"></script> <!-- Enable tracking pageload time --> <script type="text/javascript"> diff --git a/layouts/v7/modules/Vtiger/partials/SidebarEssentials.tpl b/layouts/v7/modules/Vtiger/partials/SidebarEssentials.tpl index cc6f933ef402db95dc6cf3fd81bb25afa985b384..f822cd53032df0172d520ae3934b1e862d1abb8c 100644 --- a/layouts/v7/modules/Vtiger/partials/SidebarEssentials.tpl +++ b/layouts/v7/modules/Vtiger/partials/SidebarEssentials.tpl @@ -23,6 +23,7 @@ <div class="list-menu-content"> {assign var="CUSTOM_VIEW_NAMES" value=array()} {if $CUSTOM_VIEWS && count($CUSTOM_VIEWS) > 0} + {assign var="IS_ADMIN" value=$CURRENT_USER_MODEL->isAdminUser()} <!-- Libertus Mod --> {foreach key=GROUP_LABEL item=GROUP_CUSTOM_VIEWS from=$CUSTOM_VIEWS} {if $GROUP_LABEL neq 'Mine' && $GROUP_LABEL neq 'Shared'} {continue} @@ -40,7 +41,7 @@ {assign var=count value=0} {assign var=LISTVIEW_URL value=$MODULE_MODEL->getListViewUrl()} {foreach item="CUSTOM_VIEW" from=$GROUP_CUSTOM_VIEWS name="customView"} - {assign var=IS_DEFAULT value=$CUSTOM_VIEW->isDefault()} + {assign var="IS_DEFAULT" value=$CUSTOM_VIEW->isDefault()} {assign var="CUSTOME_VIEW_RECORD_MODEL" value=CustomView_Record_Model::getInstanceById($CUSTOM_VIEW->getId())} {assign var="MEMBERS" value=$CUSTOME_VIEW_RECORD_MODEL->getMembers()} {assign var="LIST_STATUS" value=$CUSTOME_VIEW_RECORD_MODEL->get('status')} @@ -56,12 +57,22 @@ <div class="pull-right"> <span class="js-popover-container" style="cursor:pointer;"> <span class="fa fa-angle-down" rel="popover" data-toggle="popover" aria-expanded="true" - {if $CUSTOM_VIEW->isMine() and $CUSTOM_VIEW->get('viewname') neq 'All'} - data-deletable="{if $CUSTOM_VIEW->isDeletable()}true{else}false{/if}" data-editable="{if $CUSTOM_VIEW->isEditable()}true{else}false{/if}" - {if $CUSTOM_VIEW->isEditable()} data-editurl="{$CUSTOM_VIEW->getEditUrl()}{/if}" {if $CUSTOM_VIEW->isDeletable()} {if $SHARED_MEMBER_COUNT eq 1 or $LIST_STATUS eq 3} data-shared="1"{/if} data-deleteurl="{$CUSTOM_VIEW->getDeleteUrl()}"{/if} - {/if} - toggleClass="fa {if $IS_DEFAULT}fa-check-square-o{else}fa-square-o{/if}" data-filter-id="{$CUSTOM_VIEW->getId()}" - data-is-default="{$IS_DEFAULT}" data-defaulttoggle="{$CUSTOM_VIEW->getToggleDefaultUrl()}" data-default="{$CUSTOM_VIEW->getDuplicateUrl()}" data-isMine="{if $CUSTOM_VIEW->isMine()}true{else}false{/if}"> + {if ($CUSTOM_VIEW->isMine() || $IS_ADMIN) && $CUSTOM_VIEW->get('viewname') neq 'All'} + data-deletable="{if $CUSTOM_VIEW->isDeletable()}true{else}false{/if}" + data-editable="{if $CUSTOM_VIEW->isEditable()}true{else}false{/if}" + {if $CUSTOM_VIEW->isEditable()} data-editurl="{$CUSTOM_VIEW->getEditUrl()}{/if}" + {if $CUSTOM_VIEW->isDeletable()} + {if $SHARED_MEMBER_COUNT eq 1 or $LIST_STATUS eq 3} data-shared="1"{/if} + data-deleteurl="{$CUSTOM_VIEW->getDeleteUrl()}" + {/if} + {/if} + toggleClass="fa {if $IS_DEFAULT}fa-check-square-o{else}fa-square-o{/if}" + data-filter-id="{$CUSTOM_VIEW->getId()}" + data-is-default="{$IS_DEFAULT}" + data-defaulttoggle="{$CUSTOM_VIEW->getToggleDefaultUrl()}" + data-default="{$CUSTOM_VIEW->getDuplicateUrl()}" + data-isMine="{if $CUSTOM_VIEW->isMine()}true{else}false{/if}" + data-isadmin="{if $IS_ADMIN}true{else}false{/if}"> </span> </span> </div> diff --git a/layouts/v7/modules/Vtiger/resources/ListSidebar.js b/layouts/v7/modules/Vtiger/resources/ListSidebar.js index a8ecae4d28011dbb83ca4e5b77ff7b09bbdef55d..735d43e282d675162366efc980a6947ceecbc827 100644 --- a/layouts/v7/modules/Vtiger/resources/ListSidebar.js +++ b/layouts/v7/modules/Vtiger/resources/ListSidebar.js @@ -168,23 +168,33 @@ Vtiger.Class('Vtiger_ListSidebar_Js',{},{ toggleEle.attr('data-is-default', jQuery(ele).data('is-default')); toggleEle.attr('data-filter-id', jQuery(ele).data('filter-id')); contentEle.find('.toggleDefault i').attr('class', jQuery(ele).attr('toggleClass')); - editEle.attr('data-id', jQuery(ele).data('id')); + editEle.attr('data-id', jQuery(ele).data('id')); deleteEle.attr('data-id', jQuery(ele).data('id')); - if(jQuery(ele).data('ismine') === false){ + // Libertus Mod - data-isadmin also added to SideBarEssentials.tpl + if((jQuery(ele).data('ismine') === false) && (jQuery(ele).data('isadmin') === false)) { contentEle.find('.editFilter').css("display", "none"); contentEle.find('.deleteFilter').css("display","none"); } + + if (!jQuery(ele).data('deletable')) { + contentEle.find('.deleteFilter').remove(); // This propogates to the next iteration of the each() method; removing the entire li + } else { + if(contentEle.find('li').hasClass('deleteFilter') === false) { + contentEle.find('ul').prepend(deleteEle); // Add back if missing + } + contentEle.find('.deleteFilter').removeClass('disabled'); + } + if (!jQuery(ele).data('editable')) { - contentEle.find('.editFilter').remove(); + contentEle.find('.editFilter').remove(); // This propogates to the next iteration of the each() method; removing the entire li } else { + if(contentEle.find('li').hasClass('editFilter') === false) { + contentEle.find('ul').prepend(editEle); // Add back if missing + } contentEle.find('.editFilter').removeClass('disabled'); } - if (!jQuery(ele).data('deletable')) { - contentEle.find('.deleteFilter').remove(); - } else { - contentEle.find('.deleteFilter').removeClass('disabled'); - } + var options = { html: true, placement: 'left', diff --git a/modules/Emails/models/Record.php b/modules/Emails/models/Record.php index 11fe808dd6baa4a3c89b53681bc5a6a1d45212f9..d92abdf56dad8b1ac73f9d4bb183ef3ee6d1da14 100644 --- a/modules/Emails/models/Record.php +++ b/modules/Emails/models/Record.php @@ -182,7 +182,7 @@ class Emails_Record_Model extends Vtiger_Record_Model { //Adding attachments to mail if(is_array($attachments)) { foreach($attachments as $attachment) { - $fileNameWithPath = $rootDirectory.$attachment['path'].$attachment['fileid']."_".$attachment['storedname']; + $fileNameWithPath = $rootDirectory.$attachment['filenamewithpath']; if(is_file($fileNameWithPath)) { $mailer->AddAttachment($fileNameWithPath, $attachment['attachment']); } @@ -277,12 +277,24 @@ class Emails_Record_Model extends Vtiger_Record_Model { $attachmentsList = array(); if($numOfRows) { for($i=0; $i<$numOfRows; $i++) { - $attachmentsList[$i]['fileid'] = $db->query_result($attachmentRes, $i, 'attachmentsid'); - $attachmentsList[$i]['attachment'] = decode_html($db->query_result($attachmentRes, $i, 'name')); - $attachmentsList[$i]['storedname'] = decode_html($db->query_result($attachmentRes, $i, 'storedname')); - $path = $db->query_result($attachmentRes, $i, 'path'); + $attachmentId = $db->query_result($attachmentRes, $i, 'attachmentsid'); + $rawFileName = $db->query_result($attachmentRes, $i, 'name'); + $storedName = $db->query_result($attachmentRes, $i, 'storedname'); + $path = $db->query_result($attachmentRes, $i, 'path'); + if($storedName) { + $filename = $storedName; + } else { + $filename = $rawFileName; + } + $attachmentsList[$i]['attachment'] = decode_html($rawFileName); + $attachmentsList[$i]['fileid'] = $attachmentId; + $attachmentsList[$i]['storedname'] = decode_html($storedName); $attachmentsList[$i]['path'] = $path; - $attachmentsList[$i]['size'] = filesize($path.$attachmentsList[$i]['fileid'].'_'.$attachmentsList[$i]['storedname']); + $saved_filename = $attachmentId."_".$filename; + $filenamewithpath = $path.$saved_filename; + $filesize = filesize($filenamewithpath); + $attachmentsList[$i]['filenamewithpath'] = $filenamewithpath; + $attachmentsList[$i]['size'] = $filesize; $attachmentsList[$i]['type'] = $db->query_result($attachmentRes, $i, 'type'); $attachmentsList[$i]['cid'] = $db->query_result($attachmentRes, $i, 'cid'); } diff --git a/modules/Migration/schema/730_to_740.php b/modules/Migration/schema/730_to_740.php new file mode 100644 index 0000000000000000000000000000000000000000..4a0b367a12b62922088f3911c1674f10a3d68010 --- /dev/null +++ b/modules/Migration/schema/730_to_740.php @@ -0,0 +1,19 @@ +<?php +/*+******************************************************************************** + * The contents of this file are subject to the vtiger CRM Public License Version 1.0 + * ("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. + *********************************************************************************/ + +if (defined('VTIGER_UPGRADE')) { + global $current_user, $adb; + $db = PearDatabase::getInstance(); + + $eventManager = new VTEventsManager($db); + $className = 'Vtiger_RecordLabelUpdater_Handler'; + $eventManager->unregisterHandler($className); + echo "Unregistered record label update handler.<br>"; +} \ No newline at end of file diff --git a/modules/Vtiger/RecordLabelUpdater.php b/modules/Vtiger/RecordLabelUpdater.php deleted file mode 100644 index 2c4447f88fa2c8fdb7f32dffdbc1f8eeb343f6a9..0000000000000000000000000000000000000000 --- a/modules/Vtiger/RecordLabelUpdater.php +++ /dev/null @@ -1,26 +0,0 @@ -<?php -/* +*********************************************************************************** - * The contents of this file are subject to the vtiger CRM Public License Version 1.0 - * ("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. - * *********************************************************************************** */ -require_once 'include/events/VTEventHandler.inc'; - -class Vtiger_RecordLabelUpdater_Handler extends VTEventHandler { - - function handleEvent($eventName, $data) { - global $adb; - - if ($eventName == 'vtiger.entity.aftersave') { - $labelInfo = getEntityName($data->getModuleName(), $data->getId(), true); - - if ($labelInfo) { - $label = decode_html($labelInfo[$data->getId()]); - $adb->pquery('UPDATE vtiger_crmentity SET label=? WHERE crmid=?', array($label, $data->getId())); - } - } - } -} \ No newline at end of file diff --git a/modules/Vtiger/handlers/RecordLabelUpdater.php b/modules/Vtiger/handlers/RecordLabelUpdater.php deleted file mode 100644 index b4472d3d2bf564b4cff1c974ef9628800c3eeb44..0000000000000000000000000000000000000000 --- a/modules/Vtiger/handlers/RecordLabelUpdater.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php -/* +*********************************************************************************** - * The contents of this file are subject to the vtiger CRM Public License Version 1.0 - * ("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. - * *********************************************************************************** */ -require_once 'include/events/VTEventHandler.inc'; - -class Vtiger_RecordLabelUpdater_Handler extends VTEventHandler { - - function handleEvent($eventName, $data) { - global $adb; - - if ($eventName == 'vtiger.entity.aftersave') { - $record = $data->getId(); - $module = $data->getModuleName(); - - if($module === 'Users') { - return; - } - - $labelInfo = getEntityName($module, $record, true); - - if ($labelInfo) { - $label = decode_html($labelInfo[$data->getId()]); - $adb->pquery('UPDATE vtiger_crmentity SET label=? WHERE crmid=?', array($label, $record)); - } - } - } -} \ No newline at end of file diff --git a/modules/com_vtiger_workflow/VTWorkflowManager.inc b/modules/com_vtiger_workflow/VTWorkflowManager.inc index 0ea8f1235af3b2a4337ded33ab62b9e1dc936f2f..bfd394c5dc3b3ce68bd9279379c3013ea0ee85a7 100644 --- a/modules/com_vtiger_workflow/VTWorkflowManager.inc +++ b/modules/com_vtiger_workflow/VTWorkflowManager.inc @@ -24,6 +24,7 @@ class VTWorkflowManager{ function __construct($adb){ $this->adb = $adb; + $this->setMaxAllowedScheduledWorkflows(); } function save($workflow){ @@ -105,13 +106,24 @@ class VTWorkflowManager{ $result = $adb->pquery($query, $params); return $adb->query_result($result, 0, 'count'); } + + /** + * Function to set max allowed scheduled workflow count as per global defaults + */ + function setMaxAllowedScheduledWorkflows(){ + global $max_scheduled_workflows; + if(!empty($max_scheduled_workflows)){ + vglobal('max_scheduled_workflows', $max_scheduled_workflows); + }else{ + vglobal('max_scheduled_workflows', 10); + } + } /** * Function returns the maximum allowed scheduled workflows * @return int */ function getMaxAllowedScheduledWorkflows() { - vglobal('max_scheduled_workflows', 10); return vglobal('max_scheduled_workflows'); } diff --git a/packages/vtiger/mandatory/PBXManager.zip b/packages/vtiger/mandatory/PBXManager.zip index 07720357484e4878f38e42a5fd296ffb599f1bbe..3227486951dbe1aad0abcc85eba0acceaeeef9b3 100644 Binary files a/packages/vtiger/mandatory/PBXManager.zip and b/packages/vtiger/mandatory/PBXManager.zip differ diff --git a/packages/vtiger/optional/CustomerPortal.zip b/packages/vtiger/optional/CustomerPortal.zip index d81610c26a208ca3563d9e7fb607064b57d7700a..ac46c5b1c6d6793ca69c6ae251469ddaa1b45765 100644 Binary files a/packages/vtiger/optional/CustomerPortal.zip and b/packages/vtiger/optional/CustomerPortal.zip differ diff --git a/packages/vtiger/optional/ModComments.zip b/packages/vtiger/optional/ModComments.zip index a1e37d05c84937d116fe22278de9d221f6e0ab05..bba05805eec71b34c2cd9dbd062a9fda1ef45be7 100644 Binary files a/packages/vtiger/optional/ModComments.zip and b/packages/vtiger/optional/ModComments.zip differ diff --git a/pkg/vtiger/modules/CustomerPortal/modules/CustomerPortal/apis/DownloadFile.php b/pkg/vtiger/modules/CustomerPortal/modules/CustomerPortal/apis/DownloadFile.php index c8260dda8db6e8922a0d84fe144430c510e00b4b..110b6141249dabbffb95e0aa41b2fc0231c6e01a 100644 --- a/pkg/vtiger/modules/CustomerPortal/modules/CustomerPortal/apis/DownloadFile.php +++ b/pkg/vtiger/modules/CustomerPortal/modules/CustomerPortal/apis/DownloadFile.php @@ -63,18 +63,22 @@ class CustomerPortal_DownloadFile extends CustomerPortal_API_Abstract { $fileres = $adb->pquery($fileidQuery, array($id)); $fileid = $adb->query_result($fileres, 0, 'attachmentsid'); - $filepathQuery = 'SELECT path,name FROM vtiger_attachments WHERE attachmentsid = ?'; - $fileres = $adb->pquery($filepathQuery, array($fileid)); - $filepath = $adb->query_result($fileres, 0, 'path'); - $filename = $adb->query_result($fileres, 0, 'name'); - $filename = decode_html($filename); + $filepathQuery = 'SELECT path,name,storedname FROM vtiger_attachments WHERE attachmentsid = ?'; + $fileres = $adb->pquery($filepathQuery, array($fileid)); + $filepath = $adb->query_result($fileres, 0, 'path'); + if($adb->query_result($fileres, 0, 'storedname')) { + $filename = $adb->query_result($fileres, 0, 'storedname'); + } else { + $filename = $adb->query_result($fileres, 0, 'name'); + } + $realfilename = decode_html($adb->query_result($fileres, 0, 'name')); - $saved_filename = $fileid."_".$filename; - $filenamewithpath = $filepath.$saved_filename; - $filesize = filesize($filenamewithpath); - $fileDetails = array(); - $fileDetails['fileid'] = $fileid; - $fileDetails['filename'] = $filename; + $saved_filename = $fileid."_".$filename; + $filenamewithpath = $filepath.$saved_filename; + $filesize = filesize($filenamewithpath); + $fileDetails = array(); + $fileDetails['fileid'] = $fileid; + $fileDetails['filename'] = $realfilename; $fileDetails['filetype'] = $filetype; $fileDetails['filesize'] = $filesize; $fileDetails['filecontents'] = base64_encode(file_get_contents($filenamewithpath)); @@ -86,8 +90,13 @@ class CustomerPortal_DownloadFile extends CustomerPortal_API_Abstract { //construct path for attachment and get file size and type details $attachmentDetails = $rawAttachmentDetails[0]; $fileid = $attachmentDetails['attachmentsid']; - $filename = $attachmentDetails['name']; + $filename = $attachmentDetails['storedname']; + if(empty($filename)){ + $filename = $attachmentDetails['name']; + } $filepath = $attachmentDetails['path']; + $realfilename = decode_html($attachmentDetails['name']); + $saved_filename = $fileid."_".$filename; $filenamewithpath = $filepath.$saved_filename; $filesize = filesize($filenamewithpath); @@ -96,7 +105,7 @@ class CustomerPortal_DownloadFile extends CustomerPortal_API_Abstract { //Construct array with all attachment details $fileDetails = array(); $fileDetails['fileid'] = $fileid; - $fileDetails['filename'] = $filename; + $fileDetails['filename'] = $realfilename; $fileDetails['filetype'] = $filetype; $fileDetails['filesize'] = $filesize; $fileDetails['filecontents'] = base64_encode(file_get_contents($filenamewithpath)); diff --git a/pkg/vtiger/modules/ModComments/modules/ModComments/models/Record.php b/pkg/vtiger/modules/ModComments/modules/ModComments/models/Record.php index 6d8807df47e7beeca77944c5be875adc1c410da6..6616d6a6e80c69fd01b85d7757c38aadebd4f667 100644 --- a/pkg/vtiger/modules/ModComments/modules/ModComments/models/Record.php +++ b/pkg/vtiger/modules/ModComments/modules/ModComments/models/Record.php @@ -412,14 +412,27 @@ class ModComments_Record_Model extends Vtiger_Record_Model { $attachmentsList = array(); if($numOfRows) { for($i=0; $i<$numOfRows; $i++) { - $attachmentsList[$i]['fileid'] = $db->query_result($attachmentRes, $i, 'attachmentsid'); - $attachmentsList[$i]['attachment'] = decode_html($db->query_result($attachmentRes, $i, 'name')); - $path = $db->query_result($attachmentRes, $i, 'path'); + $attachmentId = $db->query_result($attachmentRes, $i, 'attachmentsid'); + $rawFileName = $db->query_result($attachmentRes, $i, 'name'); + $storedName = $db->query_result($attachmentRes, $i, 'storedname'); + $path = $db->query_result($attachmentRes, $i, 'path'); + if($storedName) { + $filename = $storedName; + } else { + $filename = $rawFileName; + } + $attachmentsList[$i]['attachment'] = decode_html($rawFileName); + $attachmentsList[$i]['fileid'] = $attachmentId; + $attachmentsList[$i]['storedname'] = decode_html($storedName); $attachmentsList[$i]['path'] = $path; - $attachmentsList[$i]['size'] = filesize($path.$attachmentsList[$i]['fileid'].'_'.$attachmentsList[$i]['attachment']); + $saved_filename = $attachmentId."_".$filename; + $filenamewithpath = $path.$saved_filename; + $filesize = filesize($filenamewithpath); + $attachmentsList[$i]['filenamewithpath'] = $filenamewithpath; + $attachmentsList[$i]['size'] = $filesize; $attachmentsList[$i]['type'] = $db->query_result($attachmentRes, $i, 'type'); $attachmentsList[$i]['cid'] = $db->query_result($attachmentRes, $i, 'cid'); - } + } } return $attachmentsList; } diff --git a/pkg/vtiger/modules/PBXManager/settings/models/Record.php b/pkg/vtiger/modules/PBXManager/settings/models/Record.php index f17988f3559bd58d0c779b7c837a97f9f3217ba6..2520ff18b6ea6bd61a7e927fa4457bdbf37e3ffa 100644 --- a/pkg/vtiger/modules/PBXManager/settings/models/Record.php +++ b/pkg/vtiger/modules/PBXManager/settings/models/Record.php @@ -11,29 +11,29 @@ class Settings_PBXManager_Record_Model extends Settings_Vtiger_Record_Model { const tableName = 'vtiger_pbxmanager_gateway'; - + public function getId() { return $this->get('id'); } public function getName() { } - + public function getModule(){ return new Settings_PBXManager_Module_Model; } - + static function getCleanInstance(){ return new self; } - + public static function getInstance(){ $serverModel = new self(); $db = PearDatabase::getInstance(); $query = 'SELECT * FROM '.self::tableName; $gatewatResult = $db->pquery($query, array()); $gatewatResultCount = $db->num_rows($gatewatResult); - + if($gatewatResultCount > 0) { $rowData = $db->query_result_rowdata($gatewatResult, 0); $serverModel->set('gateway',$rowData['gateway']); @@ -46,7 +46,7 @@ class Settings_PBXManager_Record_Model extends Settings_Vtiger_Record_Model { } return $serverModel; } - + public static function getInstanceById($recordId, $qualifiedModuleName) { $db = PearDatabase::getInstance(); $result = $db->pquery('SELECT * FROM '.self::tableName.' WHERE id = ?', array($recordId)); @@ -66,20 +66,20 @@ class Settings_PBXManager_Record_Model extends Settings_Vtiger_Record_Model { } return false; } - + public function save() { $db = PearDatabase::getInstance(); - $parameters = ''; + $parameters = array(); $selectedGateway = $this->get('gateway'); $connector = new PBXManager_PBXManager_Connector; - + foreach ($connector->getSettingsParameters() as $field => $type) { $parameters[$field] = $this->get($field); } $this->set('parameters', Zend_Json::encode($parameters)); $params = array($selectedGateway,$this->get('parameters')); $id = $this->getId(); - + if ($id) { $query = 'UPDATE '.self::tableName.' SET gateway=?, parameters = ? WHERE id = ?'; array_push($params, $id); diff --git a/vtigerversion.php b/vtigerversion.php index 7a7ade6383272ef11256d683a03c6f8f0c031b03..83a0f13b2d1a2031527763983cd6e0b2be9d2de6 100644 --- a/vtigerversion.php +++ b/vtigerversion.php @@ -8,9 +8,9 @@ * All Rights Reserved. ************************************************************************************/ -$patch_version = '20201013'; // -ve timestamp before release, +ve timestamp after release. +$patch_version = '-20201019'; // -ve timestamp before release, +ve timestamp after release. $modified_database = ''; -$vtiger_current_version = '7.3.0'; +$vtiger_current_version = '7.4.0'; $_SESSION['vtiger_version'] = $vtiger_current_version; ?>