Main menu

В этой статье Я рассмотрю два варианта отключения возможности сортировки контрагентов (а так же сортировки в других модулях) по различным полям. Если вам нужно отключить сортировку в модулях Vtiger или отключить ее не для всех в списках модулей - добро пожаловать под кат.

Первый вариант менее удобен, так как отключает возможность сортировки вообще для всех. А вот второй более гибкий, так как им можно запретить возможность сортировку в модулях для отдельных групп. Здесь Я рассмотрю оба варианта, а второй будет работать следующим образом: сортировка отключена для всех пользователей кроме администраторов. Поэтому для использования более удобного варианта сразу переходите ко второй части.

Итак, начнем с самого простого и топорного способа отключения возможности сортировки в Vtiger: отключим ее вообще для всех. Для этого нужно открыть файл /include/ListView/ListViewController.php и в районе 600 строки находим в выражении такой код:

$name = "<a href='javascript:;' onClick='getListViewEntries_js(\"".$module.
            "\",\"parenttab=".$tabname."&order_by=".$field->getColumnName()."&sorder=".
            $temp_sorder.$sort_qry."\");' class='listFormHeaderLinks'>".
            getTranslatedString('LBL_LIST_USER_NAME_ROLE',$module)."".$arrow."</a>";
        } else {
          if($this->isHeaderSortingEnabled()) {
            $name = "<a href='javascript:;' onClick='getListViewEntries_js(\"".$module.
              "\",\"parenttab=".$tabname."&foldername=Default&order_by=".$field->getColumnName()."&start=".
              $_SESSION["lvs"][$module]["start"]."&sorder=".$temp_sorder."".
            $sort_qry."\");' class='listFormHeaderLinks'>".$label."".$arrow."</a>";

И заменяем его на следующий:

$name = "<a href='javascript:;'>".
            getTranslatedString('LBL_LIST_USER_NAME_ROLE',$module)."".$arrow."</a>";
        } else {
          if($this->isHeaderSortingEnabled()) {
            $name = "<a class='listFormHeaderLinks'>".$label."".$arrow."</a>";

Но, как Я уже заметил выше, этот вариант слишком топорный. Можно сделать его более гибким, а именно отключить возможность сортировки всем, кроме администраторов. Это гораздо удобнее. Правда для этого нужно забыть первый вариант ;)

Снова идем в файл /include/ListView/ListViewController.php и находим в районе 600 строки следующий код:

if($module == 'Users' && $fieldName == 'User Name') {
          $name = "<a href='javascript:;' onClick='getListViewEntries_js(\"".$module.
            "\",\"parenttab=".$tabname."&order_by=".$field->getColumnName()."&sorder=".
            $temp_sorder.$sort_qry."\");' class='listFormHeaderLinks'>".
            getTranslatedString('LBL_LIST_USER_NAME_ROLE',$module)."".$arrow."</a>";
        } else {
          if($this->isHeaderSortingEnabled()) {
            $name = "<a href='javascript:;' onClick='getListViewEntries_js(\"".$module.
              "\",\"parenttab=".$tabname."&foldername=Default&order_by=".$field->getColumnName()."&start=".
              $_SESSION["lvs"][$module]["start"]."&sorder=".$temp_sorder."".
            $sort_qry."\");' class='listFormHeaderLinks'>".$label."".$arrow."</a>";
 
          } else {
            $name = $label;
          }

Здесь, после кода

else {
            $name = $label;
          }

Добавляем новое условие, при котором возможность сортировки остается включенной только для администраторов:

if (is_admin($current_user)) {
            $name = "<a href='javascript:;' onClick='getListViewEntries_js(\"".$module.
              "\",\"parenttab=".$tabname."&foldername=Default&order_by=".$field->getColumnName()."&start=".
              $_SESSION["lvs"][$module]["start"]."&sorder=".$temp_sorder."".
            $sort_qry."\");' class='listFormHeaderLinks'>".$label."".$arrow."</a>";
 
          } else {
            $name = $label;
          }

Нет особого смысла объяснять первый вариант, ведь там все слишком просто, а вот вторым мы указываем условие if (is_admin($current_user)), которое определяет является ли пользователь администратором и для него добавляем возможность сортировки списков. Для всех остальных же эта возможность отсутствует. При этом важно оставить предыдущие условия, чтобы не нарушать функционал.