Dolibarrize module

This commit is contained in:
Laurent Destailleur
2018-03-11 18:28:27 +01:00
parent f0a0c8c3e5
commit 8b6dea218b
5 changed files with 75 additions and 86 deletions

View File

@@ -1,6 +1,5 @@
<?php
/* Module descriptor for ticket system
* Copyright (C) - 2013-2018 Jean-François FERRY <hello@librethic.io>
/* Copyright (C) - 2013-2018 Jean-François FERRY <hello@librethic.io>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -14,17 +13,20 @@
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Module descriptor for ticket system
*/
/**
* \defgroup ticketsup Ticketsup module
* \brief Ticketsup module descriptor.
* \brief Ticketsup module descriptor.
* \file core/modules/modTicketsup.class.php
* \ingroup ticketsup
* \brief Description and activation file for module Ticketsup
* \ingroup ticketsup
* \brief Description and activation file for module Ticketsup
*/
require_once DOL_DOCUMENT_ROOT . "/core/modules/DolibarrModules.class.php";
/**
* Description and activation class for module Ticketsup
*/
@@ -45,13 +47,10 @@ class modTicketsup extends DolibarrModules
// Id for module (must be unique).
// Use a free id here
// (See in Home -> System information -> Dolibarr for list of used modules id).
$this->numero = 110120;
$this->numero = 56000;
// Key text used to identify module (for permissions, menus, etc...)
$this->rights_class = 'ticketsup';
$this->editor_name = "Dolibarr";
$this->editor_web = "https://dolibrr.org";
// Family can be 'crm','financial','hr','projects','products','ecm','technic','other'
// It is used to group modules in module setup page
$this->family = "crm";
@@ -70,9 +69,6 @@ class modTicketsup extends DolibarrModules
// Key used in llx_const table to save module status enabled/disabled
// (where MYMODULE is value of property name of module in uppercase)
$this->const_name = 'MAIN_MODULE_' . strtoupper($this->name);
// Where to store the module in setup page
// (0=common,1=interface,2=others,3=very specific)
$this->special = 2;
// Name of image file used for this module.
// If file is in theme/yourtheme/img directory under name object_pictovalue.png
// use this->picto='pictovalue'
@@ -119,7 +115,7 @@ class modTicketsup extends DolibarrModules
$this->requiredby = array();
// Minimum version of PHP required by module
$this->phpmin = array(5, 3);
$this->langfiles = array("ticketsup");
$this->langfiles = array("ticketsup");
// Constants
// List of particular constants to add when module is enabled
// (key, 'chaine', value, desc, visible, 'current' or 'allentities', deleteonunactive)
@@ -168,43 +164,36 @@ class modTicketsup extends DolibarrModules
$r = 0;
$r++;
$this->rights[$r][0] = 110120; // id de la permission
$this->rights[$r][1] = "Créer un ticket"; // libelle de la permission
$this->rights[$r][2] = 'c'; // type de la permission (deprecie a ce jour)
$this->rights[$r][3] = 0; // La permission est-elle une permission par defaut
$this->rights[$r][4] = 'create';
$r++;
$this->rights[$r][0] = 110121; // id de la permission
$this->rights[$r][1] = "Lire les tickets"; // libelle de la permission
$this->rights[$r][0] = 56001; // id de la permission
$this->rights[$r][1] = "Read ticket"; // libelle de la permission
$this->rights[$r][2] = 'r'; // type de la permission (deprecie a ce jour)
$this->rights[$r][3] = 1; // La permission est-elle une permission par defaut
$this->rights[$r][4] = 'read';
$r++;
$this->rights[$r][0] = 110122; // id de la permission
$this->rights[$r][1] = "Modifier les tickets"; // libelle de la permission
$this->rights[$r][0] = 56002; // id de la permission
$this->rights[$r][1] = "Create les tickets"; // libelle de la permission
$this->rights[$r][2] = 'w'; // type de la permission (deprecie a ce jour)
$this->rights[$r][3] = 0; // La permission est-elle une permission par defaut
$this->rights[$r][4] = 'write';
$r++;
$this->rights[$r][0] = 110123; // id de la permission
$this->rights[$r][1] = "Supprimer les tickets"; // libelle de la permission
$this->rights[$r][0] = 56003; // id de la permission
$this->rights[$r][1] = "Delete les tickets"; // libelle de la permission
$this->rights[$r][2] = 'd'; // type de la permission (deprecie a ce jour)
$this->rights[$r][3] = 0; // La permission est-elle une permission par defaut
$this->rights[$r][4] = 'delete';
$r++;
$this->rights[$r][0] = 110124; // id de la permission
$this->rights[$r][1] = "Gérer les tickets"; // libelle de la permission
$this->rights[$r][0] = 56004; // id de la permission
$this->rights[$r][1] = "Manage tickets"; // libelle de la permission
//$this->rights[$r][2] = 'd'; // type de la permission (deprecie a ce jour)
$this->rights[$r][3] = 0; // La permission est-elle une permission par defaut
$this->rights[$r][4] = 'manage';
$r++;
$this->rights[$r][0] = 110125; // id de la permission
$this->rights[$r][1] = 'Voir tous les tickets (non effectif pour les utilisateurs externes, toujours limités au tiers dont ils dépendent)'; // libelle de la permission
$this->rights[$r][0] = 56005; // id de la permission
$this->rights[$r][1] = 'See all tickets, even if not assigned to (not effective for external users, always restricted to the thirdpardy they depends on)'; // libelle de la permission
$this->rights[$r][2] = 'r'; // type de la permission (deprecie a ce jour)
$this->rights[$r][3] = 0; // La permission est-elle une permission par defaut
$this->rights[$r][4] = 'view';
@@ -250,7 +239,7 @@ class modTicketsup extends DolibarrModules
'langs' => 'ticketsup@ticketsup',
'position' => 102,
'enabled' => 1,
'perms' => '$user->rights->ticketsup->create',
'perms' => '$user->rights->ticketsup->write',
'target' => '',
'user' => 2);
$r++;

View File

@@ -134,7 +134,7 @@ class ActionsTicketsup
////}
}
if (GETPOST('add_ticket') && $user->rights->ticketsup->create) {
if (GETPOST('add_ticket') && $user->rights->ticketsup->write) {
$error = 0;
if (!GETPOST("subject")) {
@@ -602,7 +602,7 @@ class ActionsTicketsup
}
}
}
return 0;
}
@@ -707,7 +707,7 @@ class ActionsTicketsup
if ($conf->global->TICKETS_NOTIFICATION_ALSO_MAIN_ADDRESS && !in_array($conf->global->TICKETS_NOTIFICATION_EMAIL_TO, $sendto)) {
if(!empty($conf->global->TICKETS_NOTIFICATION_EMAIL_TO)) $sendto[] = $conf->global->TICKETS_NOTIFICATION_EMAIL_TO;
}
// altairis: dont try to send email if no recipient
if (!empty($sendto)) {
$this->sendTicketMessageByEmail($subject, $message, '', $sendto);
@@ -779,13 +779,13 @@ class ActionsTicketsup
if (!empty($this->dao->origin_email)) {
$sendto[] = $this->dao->origin_email;
}
if ($this->dao->fk_soc > 0 && ! in_array($this->dao->origin_email, $sendto)) {
$this->dao->socid = $this->dao->fk_soc;
$this->dao->fetch_thirdparty();
if(!empty($this->dao->thirdparty->email)) $sendto[] = $this->dao->thirdparty->email;
}
// altairis: Add global email address reciepient
if ($conf->global->TICKETS_NOTIFICATION_ALSO_MAIN_ADDRESS && !in_array($conf->global->TICKETS_NOTIFICATION_EMAIL_TO, $sendto)) {
if(!empty($conf->global->TICKETS_NOTIFICATION_EMAIL_TO)) $sendto[] = $conf->global->TICKETS_NOTIFICATION_EMAIL_TO;
@@ -963,7 +963,7 @@ class ActionsTicketsup
/**
* Fetch object
*
*
* @param int $id Id
* @param int $track_id Track id
* @param string $ref Ref
@@ -977,7 +977,7 @@ class ActionsTicketsup
/**
* print statut
*
*
* @param int $mode Mode
* @return void
*/
@@ -1088,7 +1088,7 @@ class ActionsTicketsup
print '<div class="info">' . $langs->trans('NoLogForThisTicket') . '</div>';
}
}
/**
* View list of logs with timeline view
*
@@ -1098,10 +1098,10 @@ class ActionsTicketsup
public function viewTimelineTicketLogs($show_user = true)
{
global $conf, $langs, $bc;
// Load logs in cache
$ret = $this->dao->loadCacheLogsTicket();
if (is_array($this->dao->cache_logs_ticket) && count($this->dao->cache_logs_ticket) > 0) {
print '<section id="cd-timeline">';
@@ -1110,13 +1110,13 @@ class ActionsTicketsup
print '<div class="cd-timeline-img">';
//print '<img src="img/history.png" alt="">';
print '</div> <!-- cd-timeline-img -->';
print '<div class="cd-timeline-content">';
print dol_nl2br($arraylogs['message']);
print '<span class="cd-date">';
print dol_print_date($arraylogs['datec'], 'dayhour');
if ($show_user) {
if ($arraylogs['fk_user_create'] > 0) {
$userstat = new User($this->db);
@@ -1148,13 +1148,13 @@ class ActionsTicketsup
global $langs;
if (!empty($user->rights->ticketsup->manage) && $action == 'edit_message_init') {
// MESSAGE
print '<form action="' . $_SERVER['PHP_SELF'] . '" method="post">';
print '<input type="hidden" name="token" value="' . $_SESSION['newtoken'] . '">';
print '<input type="hidden" name="track_id" value="' . $this->dao->track_id . '">';
print '<input type="hidden" name="action" value="set_message">';
}
// Initial message
print '<table class="border" width="100%">';
print '<tr class="liste_titre"><td class="nowrap" colspan="2">';
@@ -1163,9 +1163,9 @@ class ActionsTicketsup
print '<a href="' . $_SERVER['PHP_SELF'] . '?action=edit_message_init&amp;track_id=' . $this->dao->track_id . '">' . img_edit($langs->trans('Modify')) . ' ' . $langs->trans('Modify') . '</a>';
}
print '</td></tr>';
print '<tr>';
print '<td>';
if (!empty($user->rights->ticketsup->manage) && $action == 'edit_message_init') {
// MESSAGE
@@ -1181,7 +1181,7 @@ class ActionsTicketsup
} else {
print dol_nl2br($this->dao->message);
}
//print '<div>' . $this->dao->message . '</div>';
}
print '</td>';
@@ -1209,7 +1209,7 @@ class ActionsTicketsup
$action = GETPOST('action');
$this->viewTicketOriginalMessage($user, $action);
if (is_array($this->dao->cache_msgs_ticket) && count($this->dao->cache_msgs_ticket) > 0) {
print_titre($langs->trans('TicketMailExchanges'));
@@ -1264,7 +1264,7 @@ class ActionsTicketsup
print '<div class="info">' . $langs->trans('NoMsgForThisTicket') . '</div>';
}
}
/**
* View list of message for ticket with timeline display
*
@@ -1275,11 +1275,11 @@ class ActionsTicketsup
public function viewTicketTimelineMessages($show_private, $show_user = true)
{
global $conf, $langs, $user, $bc;
// Load logs in cache
$ret = $this->dao->loadCacheMsgsTicket();
$action = GETPOST('action');
if (is_array($this->dao->cache_msgs_ticket) && count($this->dao->cache_msgs_ticket) > 0) {
print '<section id="cd-timeline">';
@@ -1291,13 +1291,13 @@ class ActionsTicketsup
print '<div class="cd-timeline-img">';
print '<img src="img/messages.png" alt="">';
print '</div> <!-- cd-timeline-img -->';
print '<div class="cd-timeline-content">';
print $arraymsgs['message'];
print '<span class="cd-date">';
print dol_print_date($arraymsgs['datec'], 'dayhour');
if ($show_user) {
if ($arraymsgs['fk_user_action'] > 0) {
$userstat = new User($this->db);
@@ -1324,7 +1324,7 @@ class ActionsTicketsup
/**
* load_previous_next_ref
*
*
* @param string $filter Filter
* @param int $fieldid Id
* @return int 0
@@ -1420,7 +1420,7 @@ class ActionsTicketsup
/**
* Copy files into ticket directory
* Used for files linked into messages
*
*
* @return void
*/
public function copyFilesForTicket()
@@ -1467,7 +1467,7 @@ class ActionsTicketsup
/**
* Print html navbar with link to set ticket status
* $selected : 0=>'NotRead', 1=>'Read', 3=>'Answered', 4=>'Assigned', 5 => 'InProgress', 6=> 'Waiting', 8=>'Closed', 9=>'Deleted'
*
*
* @return void
*/
public function viewStatusActions()
@@ -1506,17 +1506,17 @@ class ActionsTicketsup
print '</div></div><br />';
}
/**
* deleteObjectLinked
*
*
* @return number
*/
*/
public function deleteObjectLinked()
{
return $this->dao->deleteObjectLinked();
}
/**
* Hook to add email element template
*
@@ -1529,13 +1529,13 @@ class ActionsTicketsup
public function emailElementlist($parameters, &$object, &$action, $hookmanager)
{
global $langs;
$error = 0;
if (in_array('admin', explode(':', $parameters['context']))) {
$this->results = array('ticketsup_send' => $langs->trans('MailToSendTicketsupMessage'));
}
if (! $error) {
return 0; // or return 1 to replace standard code
} else {

View File

@@ -303,7 +303,7 @@ class Ticketsups extends DolibarrApi
public function post($request_data = null)
{
$ticketstatic = new Ticketsup($this->db);
if (! DolibarrApiAccess::$user->rights->ticketsup->create) {
if (! DolibarrApiAccess::$user->rights->ticketsup->write) {
throw new RestException(401);
}
// Check mandatory fields
@@ -334,7 +334,7 @@ class Ticketsups extends DolibarrApi
public function postNewMessage($request_data = null)
{
$ticketstatic = new Ticketsup($this->db);
if (! DolibarrApiAccess::$user->rights->ticketsup->create) {
if (! DolibarrApiAccess::$user->rights->ticketsup->write) {
throw new RestException(401);
}
// Check mandatory fields
@@ -365,7 +365,7 @@ class Ticketsups extends DolibarrApi
*/
public function put($id, $request_data = null)
{
if (! DolibarrApiAccess::$user->rights->ticketsup->create) {
if (! DolibarrApiAccess::$user->rights->ticketsup->write) {
throw new RestException(401);
}
@@ -398,7 +398,7 @@ class Ticketsups extends DolibarrApi
*/
public function delete($id)
{
if (! DolibarrApiAccess::$user->rights->ticketsup->supprimer) {
if (! DolibarrApiAccess::$user->rights->ticketsup->delete) {
throw new RestException(401);
}
$result = $this->ticketsup->fetch($id);

View File

@@ -159,7 +159,7 @@ if (empty($reshook))
{
// Selection of new fields
include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
// Purge search criteria
if (GETPOST('button_removefilter_x','alpha') || GETPOST('button_removefilter.x','alpha') ||GETPOST('button_removefilter','alpha')) // All tests are required to be compatible with all browsers
{
@@ -175,7 +175,7 @@ if (empty($reshook))
{
$massaction=''; // Protection to avoid mass action if we force a new search during a mass action confirmation
}
// Mass actions
$objectclass='Ticketsup';
$objectlabel='Ticketsup';
@@ -285,14 +285,14 @@ if (is_numeric($nbtotalofrecords) && $limit > $nbtotalofrecords)
else
{
$sql.= $db->plimit($limit+1, $offset);
$resql=$db->query($sql);
if (! $resql)
{
dol_print_error($db);
exit;
}
$num = $db->num_rows($resql);
}
@@ -513,7 +513,7 @@ foreach($object->fields as $key => $val)
print '<td class="liste_titre'.($align?' '.$align:'').'">';
$object->printSelectStatus(dol_escape_htmltag($search[$key]));
print '</td>';
} elseif ($key == 'type_code') {
print '<td class="liste_titre'.($align?' '.$align:'').'">';
$formTicket->selectTypesTickets(dol_escape_htmltag($search[$key]), 'search_'.$key.'', '', 2, 1, 1);
@@ -527,7 +527,7 @@ foreach($object->fields as $key => $val)
$formTicket->selectSeveritiesTickets(dol_escape_htmltag($search[$key]), 'search_'.$key.'', '', 2, 1, 1);
print '</td>';
} else {
print '<td class="liste_titre'.($align?' '.$align:'').'"><input type="text" class="flat maxwidth75" name="search_'.$key.'" value="'.dol_escape_htmltag($search[$key]).'"></td>';
}
}
@@ -586,14 +586,14 @@ while ($i < min($num, $limit))
{
$obj = $db->fetch_object($resql);
if (empty($obj)) break; // Should not happen
// Store properties in $object
$object->id = $obj->rowid;
foreach($object->fields as $key => $val)
{
if (isset($obj->$key)) $object->$key = $obj->$key;
}
// Show here line of result
print '<tr class="oddeven">';
foreach($object->fields as $key => $val)
@@ -633,9 +633,9 @@ while ($i < min($num, $limit))
}
print '</td>';
if (! $i) $totalarray['nbfield']++;
print '</tr>';
$i++;
}
@@ -691,18 +691,18 @@ if (in_array('builddoc',$arrayofmassactions) && ($nbtotalofrecords === '' || $nb
{
$hidegeneratedfilelistifempty=1;
if ($massaction == 'builddoc' || $action == 'remove_file' || $show_files) $hidegeneratedfilelistifempty=0;
require_once(DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php');
$formfile = new FormFile($db);
// Show list of available documents
$urlsource=$_SERVER['PHP_SELF'].'?sortfield='.$sortfield.'&sortorder='.$sortorder;
$urlsource.=str_replace('&amp;','&',$param);
$filedir=$diroutputmassaction;
$genallowed=$user->rights->ticketsup->read;
$delallowed=$user->rights->ticketsup->create;
$delallowed=$user->rights->ticketsup->write;
print $formfile->showdocuments('massfilesarea_ticketsup','',$filedir,$urlsource,0,$delallowed,'',1,1,0,48,1,$param,$title,'','','',null,$hidegeneratedfilelistifempty);
}

View File

@@ -44,7 +44,7 @@ $notnotifytiersatcreate = !empty($notNotifyTiers);
$action = GETPOST('action', 'alpha', 3);
// Protection if external user
if (!$user->rights->ticketsup->read || !$user->rights->ticketsup->create) {
if (!$user->rights->ticketsup->read || !$user->rights->ticketsup->write) {
accessforbidden();
}