From 053da4fdd734d4a6662203c529d88ddcdf2d4967 Mon Sep 17 00:00:00 2001 From: tomolimo Date: Thu, 2 Aug 2018 16:57:00 +0200 Subject: [PATCH] Redesigned localization management Added under maintenance message --- ajax/dropdownUsers.php | 2 +- ajax/task_users.php | 4 +- front/case.form.php | 23 +- front/case.front.php | 39 -- front/case.php | 23 +- front/caselink.form.php | 2 +- front/caselink.php | 2 +- front/process.form.php | 2 +- front/process.php | 2 +- front/processmaker.form.php | 68 ++-- front/processmaker.helpdesk.form.php | 14 +- hook.php | 127 +++---- inc/case.class.php | 522 ++++--------------------- inc/casechangelog.class.php | 15 +- inc/casedynaform.class.php | 5 +- inc/casehistory.class.php | 5 +- inc/caselink.class.php | 52 ++- inc/casemap.class.php | 11 +- inc/config.class.php | 72 ++-- inc/process.class.php | 90 +++-- inc/process_profile.class.php | 17 +- inc/processmaker.class.php | 109 ++++-- inc/profile.class.php | 14 +- inc/task.class.php | 10 +- inc/taskcategory.class.php | 41 +- locales/cs_CZ.php | 122 ------ locales/cs_CZ.po | 548 ++++++++++++++++++++++++++ locales/en_GB.php | 122 ------ locales/en_GB.po | 547 ++++++++++++++++++++++++++ locales/fr_FR.php | 122 ------ locales/fr_FR.po | 550 +++++++++++++++++++++++++++ locales/source.po | 544 ++++++++++++++++++++++++++ pics/under_maintenance.png | Bin 0 -> 106081 bytes setup.php | 2 - 34 files changed, 2629 insertions(+), 1199 deletions(-) delete mode 100644 front/case.front.php delete mode 100644 locales/cs_CZ.php create mode 100644 locales/cs_CZ.po delete mode 100644 locales/en_GB.php create mode 100644 locales/en_GB.po delete mode 100644 locales/fr_FR.php create mode 100644 locales/fr_FR.po create mode 100644 locales/source.po create mode 100644 pics/under_maintenance.png diff --git a/ajax/dropdownUsers.php b/ajax/dropdownUsers.php index d26a3c3..b57a0b9 100644 --- a/ajax/dropdownUsers.php +++ b/ajax/dropdownUsers.php @@ -99,7 +99,7 @@ if ($_REQUEST['page'] == 1 && empty($_REQUEST['searchText'])) { if (count($users)) { foreach ($users as $ID => $output) { - $title = sprintf(__('%1$s - %2$s'), $output, $logins[$ID]); + $title = sprintf('%1$s - %2$s', $output, $logins[$ID]); array_push($datas, array('id' => $ID, 'text' => $output, diff --git a/ajax/task_users.php b/ajax/task_users.php index add1883..658cf8b 100644 --- a/ajax/task_users.php +++ b/ajax/task_users.php @@ -22,7 +22,7 @@ $PM_DB = new PluginProcessmakerDB; $rand = rand(); echo "
"; -echo $LANG['processmaker']['item']['reassigncase']." "; +echo __('Re-assign task to', 'processmaker')." "; echo ""; echo ""; echo ""; @@ -42,6 +42,6 @@ PluginProcessmakerUser::dropdown( array('name' => 'users_id_recipient', 'width' => '', 'specific_tags' => array('taskGuid' => $_REQUEST['taskGuid']))); echo "  "; -echo ""; +echo ""; Html::closeForm(true); diff --git a/front/case.form.php b/front/case.form.php index e2611dd..5798cbf 100644 --- a/front/case.form.php +++ b/front/case.form.php @@ -32,9 +32,9 @@ if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'route' && isset( $_REQ if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'delete') { // delete case from case table, this will also delete the tasks if ($locCase->getFromDB($_POST['cases_id']) && $locCase->deleteCase()) { - Session::addMessageAfterRedirect($LANG['processmaker']['item']['case']['deleted'], true, INFO); + Session::addMessageAfterRedirect(__('Case has been deleted!', 'processmaker'), true, INFO); } else { - Session::addMessageAfterRedirect($LANG['processmaker']['item']['case']['errordeleted'], true, ERROR); + Session::addMessageAfterRedirect(__('Unable to delete case!', 'processmaker'), true, ERROR); } // will redirect to item or to list if no item $locCase->redirectToList(); @@ -47,12 +47,12 @@ if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'cancel') { $resultPM = $PM_SOAP->cancelCase($locCase->fields['case_guid']); if ($resultPM->status_code === 0) { if ($locCase->cancelCase()) { - Session::addMessageAfterRedirect($LANG['processmaker']['item']['case']['cancelled'], true, INFO); + Session::addMessageAfterRedirect(__('Case has been cancelled!', 'processmaker'), true, INFO); } else { - Session::addMessageAfterRedirect($LANG['processmaker']['item']['case']['errorcancelled'], true, ERROR); + Session::addMessageAfterRedirect(__('Unable to cancel case!', 'processmaker'), true, ERROR); } } else { - Session::addMessageAfterRedirect($LANG['processmaker']['item']['case']['errorcancelled'], true, ERROR); + Session::addMessageAfterRedirect(__('Unable to cancel case!', 'processmaker'), true, ERROR); } Html::back(); } else @@ -78,12 +78,15 @@ if (isset($_REQUEST['id']) && $_REQUEST['id'] > 0) { Html::header(__('Process cases', 'processmaker'), $_SERVER['PHP_SELF'], "helpdesk", "PluginProcessmakerCase", "cases"); } - if ($locCase->getFromDB($_REQUEST['id'])) { - - $locCase->display($_REQUEST); - - Html::footer(); + if (!$PM_SOAP->config->fields['maintenance']) { + if ($locCase->getFromDB($_REQUEST['id'])) { + $locCase->display($_REQUEST); + } + } else { + PluginProcessmakerProcessmaker::showUnderMaintenance(); } + + Html::footer(); } diff --git a/front/case.front.php b/front/case.front.php deleted file mode 100644 index d036ef4..0000000 --- a/front/case.front.php +++ /dev/null @@ -1,39 +0,0 @@ -getFromGUID($_REQUEST['APP_UID'])) { -// //$PM_SOAP = new PluginProcessmakerProcessmaker(); -// //$PM_SOAP->login( ); - -// if (isset( $_REQUEST['form'] )) { -// $PM_SOAP->derivateCase($myCase, $_REQUEST); //, $_SERVER['HTTP_COOKIE'] ) ; -// } -// } - -//} else -// if (isset( $_REQUEST['form'] ) && isset( $_REQUEST['form']['BTN_CATCH'] ) && isset( $_REQUEST['form']['APP_UID'])) { -// // Claim task management -// // here we are in a Claim request -// $myCase = new PluginProcessmakerCase; -// if ($myCase->getFromGUID( $_REQUEST['form']['APP_UID'] )) { -// //$PM_SOAP = new PluginProcessmakerProcessmaker(); -// //$PM_SOAP->login( ); - -// $pmClaimCase = $PM_SOAP->claimCase($myCase->fields['case_guid'], $_REQUEST['DEL_INDEX'] ); - -// // now manage tasks associated with item -// $PM_SOAP->claimTask($myCase->getID(), $_REQUEST['DEL_INDEX']); -// } -//} - -//// now redirect to item form page -//$config = $PM_SOAP->config; // PluginProcessmakerConfig::getInstance(); -//echo ""; \ No newline at end of file diff --git a/front/case.php b/front/case.php index 277496f..7542690 100644 --- a/front/case.php +++ b/front/case.php @@ -2,22 +2,17 @@ include_once ("../../../inc/includes.php"); -Html::header($LANG['processmaker']['title'][1], $_SERVER['PHP_SELF'], "helpdesk", "PluginProcessmakerCase", "cases"); - -if (Session::haveRightsOr("plugin_processmaker_config", [READ, UPDATE])) { - //$process=new PluginProcessmakerProcess(); - - //if (isset( $_REQUEST['refresh'] ) && Session::haveRight("plugin_processmaker_config", UPDATE)) { - // $process->refresh(); - // Html::back(); - //} - - //$process->title(); - - Search::show('PluginProcessmakerCase'); +Html::header(__('ProcessMaker', 'processmaker'), $_SERVER['PHP_SELF'], "helpdesk", "PluginProcessmakerCase", "cases"); +if (!$PM_SOAP->config->fields['maintenance']) { + if (Session::haveRightsOr("plugin_processmaker_config", [READ, UPDATE])) { + Search::show('PluginProcessmakerCase'); + } else { + Html::displayRightError(); + } } else { - Html::displayRightError(); + PluginProcessmakerProcessmaker::showUnderMaintenance(); } + Html::footer(); diff --git a/front/caselink.form.php b/front/caselink.form.php index e426fc1..4cd65d6 100644 --- a/front/caselink.form.php +++ b/front/caselink.form.php @@ -24,7 +24,7 @@ if (isset($_REQUEST["update"])) { $PluginCaselink->redirectToList(); } else { - Html::header($LANG['processmaker']['title'][1], $_SERVER['PHP_SELF'], "tools", "PluginProcessmakerMenu", "caselinks"); + Html::header(__('ProcessMaker', 'processmaker'), $_SERVER['PHP_SELF'], "tools", "PluginProcessmakerMenu", "caselinks"); $PluginCaselink->display($_REQUEST); diff --git a/front/caselink.php b/front/caselink.php index 3b48186..fb11f5c 100644 --- a/front/caselink.php +++ b/front/caselink.php @@ -2,7 +2,7 @@ include_once ("../../../inc/includes.php"); -Html::header($LANG['processmaker']['title'][1], $_SERVER['PHP_SELF'], "tools", "PluginProcessmakerMenu", "caselinks"); +Html::header(__('ProcessMaker', 'processmaker'), $_SERVER['PHP_SELF'], "tools", "PluginProcessmakerMenu", "caselinks"); if (Session::haveRightsOr("plugin_processmaker_config", [READ, UPDATE])) { diff --git a/front/process.form.php b/front/process.form.php index c25cbfb..6592c2b 100644 --- a/front/process.form.php +++ b/front/process.form.php @@ -22,7 +22,7 @@ if (isset($_REQUEST["update"])) { } else { - Html::header($LANG['processmaker']['title'][1], $_SERVER['PHP_SELF'], "tools", "PluginProcessmakerMenu", "processes"); + Html::header(__('ProcessMaker', 'processmaker'), $_SERVER['PHP_SELF'], "tools", "PluginProcessmakerMenu", "processes"); $PluginProcess->display($_REQUEST); diff --git a/front/process.php b/front/process.php index da454c4..4b8a84a 100644 --- a/front/process.php +++ b/front/process.php @@ -2,7 +2,7 @@ include_once ("../../../inc/includes.php"); -Html::header($LANG['processmaker']['title'][1], $_SERVER['PHP_SELF'], "tools", "PluginProcessmakerMenu", "processes"); +Html::header(__('ProcessMaker', 'processmaker'), $_SERVER['PHP_SELF'], "tools", "PluginProcessmakerMenu", "processes"); if (Session::haveRightsOr("plugin_processmaker_config", [READ, UPDATE])) { $process=new PluginProcessmakerProcess(); diff --git a/front/processmaker.form.php b/front/processmaker.form.php index 849f478..1c5ca5f 100644 --- a/front/processmaker.form.php +++ b/front/processmaker.form.php @@ -24,16 +24,16 @@ switch ($_POST["action"]) { $item = new $_POST['itemtype']; $item->getFromDB($_POST['items_id']); unset($_SERVER['REQUEST_URI']); // to prevent use of processmaker.form.php in NavigateList - Session::initNavigateListItems('PluginProcessmakerCase', + Session::initNavigateListItems('PluginProcessmakerCase', //TRANS : %1$s is the itemtype name, // %2$s is the name of the item (used for headings of a list) - sprintf(__('%1$s = %2$s'), + sprintf('%1$s = %2$s', $_POST['itemtype']::getTypeName(1), $item->fields["name"])); Html::redirect($link); } Html::back(); } else { - Session::addMessageAfterRedirect($LANG['processmaker']['item']['error'][$resultCase->status_code]."
".$resultCase->message." (".$resultCase->status_code.")", true, ERROR); + Session::addMessageAfterRedirect( PluginProcessmakerProcessmaker::getPMErrorMessage($resultCase->status_code)."
".$resultCase->message." (".$resultCase->status_code.")", true, ERROR); } } else { Html::back(); @@ -52,7 +52,7 @@ switch ($_POST["action"]) { Html::redirect($CFG_GLPI['root_doc']."/plugins/processmaker/front/processmaker.helpdesk.form.php?processes_id=".$_POST['plugin_processmaker_processes_id']."&case_guid=".$resultCase->caseId."&rand=$rand&itilcategories_id=".$_POST["itilcategories_id"]."&type=".$_REQUEST["type"]."&entities_id=".$_REQUEST['entities_id']); } else { - Session::addMessageAfterRedirect($LANG['processmaker']['item']['error'][$resultCase->status_code]."
$resultCase->message ($resultCase->status_code)", true, ERROR); //echo "Error creating case: $resultCase->message \n"; + Session::addMessageAfterRedirect( PluginProcessmakerProcessmaker::getPMErrorMessage($resultCase->status_code)."
$resultCase->message ($resultCase->status_code)", true, ERROR); Html::redirect($CFG_GLPI["root_doc"]."/front/helpdesk.public.php?create_ticket=1"); } @@ -82,12 +82,12 @@ switch ($_POST["action"]) { $_POST['users_id'], $_POST['users_id_recipient']); if ($pmResponse) { - Session::addMessageAfterRedirect($LANG['processmaker']['item']['case']['reassigned'], true, INFO); + Session::addMessageAfterRedirect(__('Task re-assigned!', 'processmaker'), true, INFO); } else { - Session::addMessageAfterRedirect($LANG['processmaker']['item']['case']['notreassigned'].$pmResponse->message, true, ERROR); + Session::addMessageAfterRedirect(__('Error re-assigning task: ', 'processmaker').$pmResponse->message, true, ERROR); } } else { - Session::addMessageAfterRedirect($LANG['processmaker']['item']['case']['assignedtoyou'], true, ERROR); // Html::back(); + Session::addMessageAfterRedirect(__('Task already assigned to this person!','processmaker'), true, ERROR); } //} else if (isset($_POST['delete'])) { // // delete case from case table, this will also delete the tasks @@ -106,35 +106,35 @@ switch ($_POST["action"]) { // } else { // Session::addMessageAfterRedirect($LANG['processmaker']['item']['case']['errordeleted'], true, ERROR); // } - } else if (isset($_POST['cancel'])) { - // cancel case from PM - $locCase = new PluginProcessmakerCase; - $locCase->getFromDB($_POST['cases_id']); - $resultPM = $PM_SOAP->cancelCase($locCase->fields['case_guid']); //, $_POST['plugin_processmaker_del_index'], $_POST['plugin_processmaker_users_id'] ) ; - if ($resultPM->status_code === 0) { - //$locCase = new PluginProcessmakerCase; - //$locCase->getFromDB($_POST['cases_id']); - if ($locCase->cancelCase()) { - Session::addMessageAfterRedirect($LANG['processmaker']['item']['case']['cancelled'], true, INFO); - } else { - Session::addMessageAfterRedirect($LANG['processmaker']['item']['case']['errorcancelled'], true, ERROR); - } - } else { - if ($resultPM->status_code == 100 && $locCase->deleteCase()) { // case is draft then delete it - // request delete from pm itself - $PM_SOAP->login(true); + //} else if (isset($_POST['cancel'])) { + // // cancel case from PM + // $locCase = new PluginProcessmakerCase; + // $locCase->getFromDB($_POST['cases_id']); + // $resultPM = $PM_SOAP->cancelCase($locCase->fields['case_guid']); //, $_POST['plugin_processmaker_del_index'], $_POST['plugin_processmaker_users_id'] ) ; + // if ($resultPM->status_code === 0) { + // //$locCase = new PluginProcessmakerCase; + // //$locCase->getFromDB($_POST['cases_id']); + // if ($locCase->cancelCase()) { + // Session::addMessageAfterRedirect($LANG['processmaker']['item']['case']['cancelled'], true, INFO); + // } else { + // Session::addMessageAfterRedirect($LANG['processmaker']['item']['case']['errorcancelled'], true, ERROR); + // } + // } else { + // if ($resultPM->status_code == 100 && $locCase->deleteCase()) { // case is draft then delete it + // // request delete from pm itself + // $PM_SOAP->login(true); - $resultPM = $PM_SOAP->deleteCase($locCase->fields['case_guid']); + // $resultPM = $PM_SOAP->deleteCase($locCase->fields['case_guid']); - if ($resultPM->status_code == 0) { - Session::addMessageAfterRedirect($LANG['processmaker']['item']['case']['deleted'], true, INFO); - } else { - Session::addMessageAfterRedirect($LANG['processmaker']['item']['case']['errordeleted'], true, ERROR); - } - } else { - Session::addMessageAfterRedirect($LANG['processmaker']['item']['case']['errorcancelled']. " " . $resultPM->message, true, ERROR); - } - } + // if ($resultPM->status_code == 0) { + // Session::addMessageAfterRedirect($LANG['processmaker']['item']['case']['deleted'], true, INFO); + // } else { + // Session::addMessageAfterRedirect($LANG['processmaker']['item']['case']['errordeleted'], true, ERROR); + // } + // } else { + // Session::addMessageAfterRedirect($LANG['processmaker']['item']['case']['errorcancelled']. " " . $resultPM->message, true, ERROR); + // } + // } } break; diff --git a/front/processmaker.helpdesk.form.php b/front/processmaker.helpdesk.form.php index 5e4b145..884622d 100644 --- a/front/processmaker.helpdesk.form.php +++ b/front/processmaker.helpdesk.form.php @@ -4,12 +4,12 @@ include_once ("../../../inc/includes.php"); /** * Summary of processMakerShowProcessList - * @param mixed $ID - * @param mixed $from_helpdesk + * @param mixed $ID + * @param mixed $from_helpdesk * @return boolean */ function processMakerShowProcessList ($ID, $from_helpdesk) { - global $DB, $CFG_GLPI, $LANG, $_SESSION; + global $DB, $CFG_GLPI, $_SESSION; if (!Session::haveRight("ticket", CREATE)) { return false; @@ -18,10 +18,10 @@ function processMakerShowProcessList ($ID, $from_helpdesk) { $rand = rand(); echo ""; echo "
"; - echo ""; + echo ""; echo ""; - if (count($caseInfo->currentUsers) > 0) { + if (property_exists($caseInfo, 'currentUsers') && count($caseInfo->currentUsers) > 0) { echo " - - - - + + + + "; foreach($caseInfo->currentUsers as $currentTask) { @@ -354,6 +353,10 @@ class PluginProcessmakerCase extends CommonDBTM { } + static private function localSortTasks ($a, $b) { + return $a->delIndex - $b->delIndex; + } + /** * Summary of sortTasks * @param mixed $tasks is the array of tasks from a getCaseInfo->currentUsers @@ -362,10 +365,6 @@ class PluginProcessmakerCase extends CommonDBTM { */ public function sortTasks($tasks, $GLPICurrentPMUserId) { - function localSortTasks ($a, $b) { - return $a->delIndex - $b->delIndex; - }; - $tbctasks = []; $utasks = []; $infotasks = []; @@ -383,9 +382,9 @@ class PluginProcessmakerCase extends CommonDBTM { // order task by "current user", then by "to be claimed", and then push to end "tasks assigned to another user" // then by delindex ASC in these three parts - usort($utasks, 'localSortTasks'); - usort($tbctasks, 'localSortTasks'); - usort($infotasks, 'localSortTasks'); + usort($utasks, 'self::localSortTasks'); + usort($tbctasks, 'self::localSortTasks'); + usort($infotasks, 'self::localSortTasks'); return array_merge($utasks, $tbctasks, $infotasks); } @@ -403,19 +402,16 @@ class PluginProcessmakerCase extends CommonDBTM { echo "
".$LANG['processmaker']['item']['tab']."
".__('Process - Case','processmaker')."
"; - echo $LANG['processmaker']['item']['selectprocess']." "; + _e('Select the process you want to add', 'processmaker'); echo ""; echo ""; echo ""; @@ -41,8 +41,8 @@ function processMakerShowProcessList ($ID, $from_helpdesk) { /** * Summary of processMakerShowCase - * @param mixed $ID - * @param mixed $from_helpdesk + * @param mixed $ID + * @param mixed $from_helpdesk */ function processMakerShowCase( $ID, $from_helpdesk ) { global $CFG_GLPI, $PM_SOAP; diff --git a/hook.php b/hook.php index 5dbb141..922a66e 100644 --- a/hook.php +++ b/hook.php @@ -25,17 +25,15 @@ if (!function_exists('arFieldExists')) { } function plugin_processmaker_MassiveActions($type) { - global $LANG; - switch ($type) { case 'PluginProcessmakerProcess' : if (plugin_processmaker_haveRight('config', UPDATE)) { - return array('plugin_processmaker_taskrefresh' => $LANG['processmaker']['config']['refreshtasklist']); + return array('plugin_processmaker_taskrefresh' => __('Synchronize Task List', 'processmaker')); } break; case 'PluginProcessmakerProcess_Profile' : if (plugin_processmaker_haveRight('config', UPDATE)) { - return array('purge' => $LANG['processmaker']['process']['profile']); + return array('purge' => __('Delete permanently')); } break; //case 'PluginProcessmakerCase' : @@ -48,66 +46,65 @@ function plugin_processmaker_MassiveActions($type) { } -function plugin_processmaker_MassiveActionsDisplay($options) { - global $LANG; +//function plugin_processmaker_MassiveActionsDisplay($options) { - switch ($options['itemtype']) { - case 'PluginProcessmakerProcess' : - //case 'PluginProcessmakerCase' : - switch ($options['action']) { - case "plugin_processmaker_taskrefresh" : - //case "plugin_processmaker_purgecase" : - echo ""; - break; +// switch ($options['itemtype']) { +// case 'PluginProcessmakerProcess' : +// //case 'PluginProcessmakerCase' : +// switch ($options['action']) { +// case "plugin_processmaker_taskrefresh" : +// //case "plugin_processmaker_purgecase" : +// echo ""; +// break; - } - break; - } - return ""; -} +// } +// break; +// } +// return ""; +//} -function plugin_processmaker_MassiveActionsProcess($data) { +//function plugin_processmaker_MassiveActionsProcess($data) { - switch ($data['action']) { +// switch ($data['action']) { - case "plugin_processmaker_taskrefresh" : - if ($data['itemtype'] == 'PluginProcessmakerProcess') { - foreach ($data["item"] as $key => $val) { - if ($val == 1) { - $process = new PluginProcessmakerProcess; - $process->refreshTasks( array( 'id' => $key ) ); +// case "plugin_processmaker_taskrefresh" : +// if ($data['itemtype'] == 'PluginProcessmakerProcess') { +// foreach ($data["item"] as $key => $val) { +// if ($val == 1) { +// $process = new PluginProcessmakerProcess; +// $process->refreshTasks( array( 'id' => $key ) ); - } - } - } - break; - //case "plugin_processmaker_purgecase": - // if ($data['itemtype'] == 'PluginProcessmakerCase') { - // foreach ($data["item"] as $key => $val) { - // if ($val == 1) { - // $locCase= new PluginProcessmakerCase; - // //$locCase->( array( 'id' => $key ) ); +// } +// } +// } +// break; +// //case "plugin_processmaker_purgecase": +// // if ($data['itemtype'] == 'PluginProcessmakerCase') { +// // foreach ($data["item"] as $key => $val) { +// // if ($val == 1) { +// // $locCase= new PluginProcessmakerCase; +// // //$locCase->( array( 'id' => $key ) ); - // } - // } - // } - // break; - //case 'plugin_processmaker_process_profile_delete' : - // if ($data['itemtype'] == 'PluginProcessmakerProcess_Profile') { - // foreach ($data["item"] as $key => $val) { - // if ($val == 1) { - // $process_profile = new PluginProcessmakerProcess_Profile; - // $process_profile->delete( array( 'id' => $key ), true ); +// // } +// // } +// // } +// // break; +// //case 'plugin_processmaker_process_profile_delete' : +// // if ($data['itemtype'] == 'PluginProcessmakerProcess_Profile') { +// // foreach ($data["item"] as $key => $val) { +// // if ($val == 1) { +// // $process_profile = new PluginProcessmakerProcess_Profile; +// // $process_profile->delete( array( 'id' => $key ), true ); - // } - // } - // } - // break; +// // } +// // } +// // } +// // break; - } -} +// } +//} /** * Summary of plugin_processmaker_install @@ -116,7 +113,6 @@ function plugin_processmaker_MassiveActionsProcess($data) { * @return true or die! */ function plugin_processmaker_install() { - global $DB; if (!arTableExists("glpi_plugin_processmaker_cases")) { // new installation @@ -143,7 +139,6 @@ function plugin_processmaker_install() { } function plugin_processmaker_uninstall() { - //global $DB; CronTask::Unregister('PluginProcessmakerProcessmaker'); @@ -152,8 +147,7 @@ function plugin_processmaker_uninstall() { function plugin_processmaker_getAddSearchOptions($itemtype) { - global $LANG; - + $sopt = array(); // TODO add Change and Problem + other fields to the search if ($itemtype == 'Ticket') { @@ -161,7 +155,7 @@ function plugin_processmaker_getAddSearchOptions($itemtype) { $sopt[10001]['field'] = 'case_status'; //$sopt[1001]['linkfield'] = 'id'; $sopt[10001]['massiveaction'] = false; - $sopt[10001]['name'] = $LANG['processmaker']['search']['case'].' - '.$LANG['processmaker']['search']['status']; + $sopt[10001]['name'] = __('Case', 'processmaker').' - '.__('Status', 'processmaker'); $sopt[10001]['datatype'] = 'text'; $sopt[10001]['forcegroupby'] = true; //$sopt[10001]['searchtype'] = 'equals'; @@ -265,18 +259,11 @@ function plugin_pre_item_update_processmaker(CommonITILObject $parm) { * @param mixed $parm is the object */ function plugin_item_update_processmaker_satisfaction($parm) { - global $DB, $GLOBALS; $locCase = new PluginProcessmakerCase; if ($locCase->getFromItem( 'Ticket', $parm->fields['tickets_id'] )) { // case is existing for this item - - $locPM = new PluginProcessmakerProcessmaker; - $locPM->login(); - - $pmResponse = $locPM->sendVariables( $locCase->getID(), array( - 'GLPI_SATISFACTION_QUALITY' => $parm->fields['satisfaction'] - )); + $locCase->sendVariables( ['GLPI_SATISFACTION_QUALITY' => $parm->fields['satisfaction']] ); } } @@ -330,14 +317,14 @@ function plugin_item_purge_processmaker($parm) { // and we must find all tasks assigned to this former user and re-assigned them to new user (if any :))! //$caseInfo = $locPM->getCaseInfo( $locCase->getID() ); - $caseInfo = $locCase->getCaseInfo( $locCase->getID() ); + $caseInfo = $locCase->getCaseInfo( ); if ($caseInfo !== false) { //$locPM->sendVariables( $locCase->getID( ), $locVars ); - $locCase->sendVariables( $locCase->getID( ), $locVars); + $locCase->sendVariables( $locVars); // need to get info on the thread of the GLPI current user // we must retreive currentGLPI user from this array $GLPICurrentPMUserId = PluginProcessmakerUser::getPMUserId( $parm->fields['users_id'] ); - if (isset( $caseInfo->currentUsers ) && is_array( $caseInfo->currentUsers )) { + if (property_exists($caseInfo, 'currentUsers') && is_array( $caseInfo->currentUsers )) { foreach ($caseInfo->currentUsers as $caseUser) { if ($caseUser->userId == $GLPICurrentPMUserId && in_array( $caseUser->delThreadStatus, array('DRAFT', 'OPEN', 'PAUSE' ) )) { diff --git a/inc/case.class.php b/inc/case.class.php index d6041a8..8e7f654 100644 --- a/inc/case.class.php +++ b/inc/case.class.php @@ -20,7 +20,7 @@ class PluginProcessmakerCase extends CommonDBTM { const CANCELLED = 'CANCELLED'; static function getTypeName($nb=0) { - return _n('Process case', 'Process cases', $nb); + return _n('Process case', 'Process cases', $nb, 'processmaker'); } //static function canCreate() { @@ -72,10 +72,9 @@ class PluginProcessmakerCase extends CommonDBTM { * @return array os strings */ function getTabNameForItem(CommonGLPI $item, $withtemplate=0) { - global $LANG; if ($item->getType() == __CLASS__) { // get tab name for a case itself - return [ __CLASS__ => __('Case')." ".$LANG['processmaker']['case']['statuses'][$item->fields['case_status']].""]; + return [ __CLASS__ => __('Case', 'processmaker')." ".self::getStatus($item->fields['case_status']).""]; } else { $items_id = $item->getID(); $itemtype = $item->getType(); @@ -323,12 +322,12 @@ class PluginProcessmakerCase extends CommonDBTM { echo "
".__('Current task(s) properties', 'processmaker')."
".__('Task', 'processmaker')."".__('Task guid', 'processmaker')."".__('Current user', 'processmaker')."".__('Task delegation date', 'processmaker')."".__('Task', 'processmaker')."".__('Task guid', 'processmaker')."".__('Current user', 'processmaker')."".__('Task delegation date', 'processmaker')."
"; - echo ""; - $itemtype = $case->fields['itemtype']; - $item = new $itemtype; - $item->getFromDB($case->fields['items_id']); - echo ""; -// echo ""; - echo ""; + + echo ""; + + Ticket::commonListHeader(Search::HTML_OUTPUT); + + $itemtype::showShort($case->fields['items_id']); echo "
".__('Case item', 'processmaker')."
".$itemtype::getTypeName(1)."".$item->getID()."".$item->getLink(['forceid' => 1])."
".__('Case item', 'processmaker')." > ".$itemtype::getTypeName(1)."
"; - //echo "
"; - // show case properties $case->showCaseProperties(); @@ -435,7 +431,7 @@ class PluginProcessmakerCase extends CommonDBTM { echo ""; echo ""; echo ""; - echo ""; + echo ""; echo ""; Html::closeForm(); @@ -477,7 +473,7 @@ class PluginProcessmakerCase extends CommonDBTM { * @param CommonITILObject $item */ static function showForItem(CommonITILObject $item) { - global $DB, $CFG_GLPI, $LANG; + global $DB, $CFG_GLPI; $items_id = $item->getField('id'); $itemtype = $item->getType(); @@ -508,10 +504,10 @@ class PluginProcessmakerCase extends CommonDBTM { } } - $columns = array('pname' => 'Process', - 'name' => 'Name', - 'status' => 'Status', - 'sub' => 'Subcase of' + $columns = array('pname' => __('Process', 'processmaker'), + 'name' => __('Title', 'processmaker'), + 'status' => __('Status', 'processmaker'), + 'sub' => __('Subcase of', 'processmaker') ); // check if item is not solved nor closed @@ -526,10 +522,10 @@ class PluginProcessmakerCase extends CommonDBTM { echo ""; echo ""; - echo ""; + echo ""; echo ""; - echo ""; echo ""; - echo ""; echo ""; - echo ""; echo ""; - echo ""; echo ""; - echo ""; echo ""; - echo ""; echo ""; - echo ""; echo ""; - echo ""; echo ""; - echo ""; echo ""; - echo ""; echo ""; - echo ""; @@ -140,11 +138,9 @@ class PluginProcessmakerCaselink extends CommonDBTM { * @return mixed */ function getSearchOptions() { - global $LANG; - $tab = array(); - $tab['common'] = $LANG['processmaker']['title'][1]; + $tab['common'] = __('ProcessMaker', 'processmaker'); $tab[1]['table'] = $this->getTable(); $tab[1]['field'] = 'name'; @@ -166,55 +162,55 @@ class PluginProcessmakerCaselink extends CommonDBTM { $tab[10]['table'] = $this->getTable(); $tab[10]['field'] = 'is_externaldata'; - $tab[10]['name'] = __('External data'); + $tab[10]['name'] = __('External data', 'processmaker'); $tab[10]['massiveaction'] = false; $tab[10]['datatype'] = 'bool'; $tab[11]['table'] = $this->getTable(); $tab[11]['field'] = 'is_self'; - $tab[11]['name'] = __('Self'); + $tab[11]['name'] = __('Self', 'processmaker'); $tab[11]['massiveaction'] = false; $tab[11]['datatype'] = 'bool'; $tab[12]['table'] = $this->getTable(); $tab[12]['field'] = 'is_targettoclaim'; - $tab[12]['name'] = __('Claim target task'); + $tab[12]['name'] = __('Claim target task', 'processmaker'); $tab[12]['massiveaction'] = false; $tab[12]['datatype'] = 'bool'; $tab[13]['table'] = $this->getTable(); $tab[13]['field'] = 'externalapplication'; - $tab[13]['name'] = __('External application JSON config'); + $tab[13]['name'] = __('External application JSON config', 'processmaker'); $tab[13]['massiveaction'] = false; $tab[13]['datatype'] = 'text'; $tab[14]['table'] = $this->getTable(); $tab[14]['field'] = 'sourcetask_guid'; - $tab[14]['name'] = __('Source task GUID'); + $tab[14]['name'] = __('Source task GUID', 'processmaker'); $tab[14]['massiveaction'] = false; $tab[14]['datatype'] = 'text'; $tab[15]['table'] = $this->getTable(); $tab[15]['field'] = 'targettask_guid'; - $tab[15]['name'] = __('Target task GUID'); + $tab[15]['name'] = __('Target task GUID', 'processmaker'); $tab[15]['massiveaction'] = false; $tab[15]['datatype'] = 'text'; $tab[16]['table'] = $this->getTable(); $tab[16]['field'] = 'targetdynaform_guid'; - $tab[16]['name'] = __('Target dynaform GUID'); + $tab[16]['name'] = __('Target dynaform GUID', 'processmaker'); $tab[16]['massiveaction'] = false; $tab[16]['datatype'] = 'text'; $tab[17]['table'] = $this->getTable(); $tab[17]['field'] = 'targetprocess_guid'; - $tab[17]['name'] = __('Target process GUID'); + $tab[17]['name'] = __('Target process GUID', 'processmaker'); $tab[17]['massiveaction'] = false; $tab[17]['datatype'] = 'text'; $tab[18]['table'] = $this->getTable(); $tab[18]['field'] = 'sourcecondition'; - $tab[18]['name'] = __('Source condition'); + $tab[18]['name'] = __('Source condition', 'processmaker'); $tab[18]['massiveaction'] = false; $tab[18]['datatype'] = 'text'; diff --git a/inc/casemap.class.php b/inc/casemap.class.php index 5f7be24..2b2c53a 100644 --- a/inc/casemap.class.php +++ b/inc/casemap.class.php @@ -28,10 +28,10 @@ class PluginProcessmakerCasemap extends CommonDBTM { echo ""; //?rand=$rand' - $iframe = ""; @@ -40,8 +40,7 @@ class PluginProcessmakerCasemap extends CommonDBTM { } function getTabNameForItem(CommonGLPI $case, $withtemplate = 0){ - global $LANG; - return $LANG['processmaker']['item']['case']['viewcasemap']; + return __('Map', 'processmaker'); } } \ No newline at end of file diff --git a/inc/config.class.php b/inc/config.class.php index 64f7ca7..3b0c1d9 100644 --- a/inc/config.class.php +++ b/inc/config.class.php @@ -38,9 +38,7 @@ class PluginProcessmakerConfig extends CommonDBTM { * @return mixed */ static function getTypeName($nb=0) { - global $LANG; - - return $LANG['processmaker']['config']['setup']; + return __('ProcessMaker setup', 'processmaker'); } /** @@ -49,9 +47,7 @@ class PluginProcessmakerConfig extends CommonDBTM { * @return mixed */ function getName($with_comment=0) { - global $LANG; - - return $LANG['processmaker']['title'][1]; + return __('ProcessMaker', 'processmaker'); } /** @@ -143,7 +139,7 @@ class PluginProcessmakerConfig extends CommonDBTM { * @return boolean */ static function showConfigForm($item) { - global $LANG, $PM_DB, $CFG_GLPI, $PM_SOAP; + global $PM_DB, $CFG_GLPI, $PM_SOAP; $setup_ok = false; @@ -157,12 +153,12 @@ class PluginProcessmakerConfig extends CommonDBTM { $config->showFormHeader(['colspan' => 4]); echo ""; - echo "\n"; echo ""; - echo ""; + echo ""; echo "\n"; echo ""; - echo "\n"; echo ""; - echo ""; + echo ""; echo "\n"; echo ""; - echo ""; + echo ""; echo "\n"; echo ""; - echo "\n"; - echo ""; + echo ""; echo ""; - echo ""; + echo ""; echo "\n"; echo ""; - echo ""; + echo ""; echo "\n"; echo ""; - echo ""; + echo ""; echo "\n"; echo ""; - echo ""; + echo ""; echo "\n"; echo ""; - echo ""; echo ""; - echo ""; echo ""; - echo "\n"; echo ""; - echo "\n"; echo ""; - echo ""; echo ""; - echo ""; echo ""; - echo ""; + echo ""; if ($setup_ok) { // $info = $pm->systemInformation( ); $info = $PM_SOAP->systemInformation( ); - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; } else { - echo ''; + echo ''; } $config->showFormButtons(array('candel'=>false)); @@ -347,10 +343,8 @@ class PluginProcessmakerConfig extends CommonDBTM { function getTabNameForItem(CommonGLPI $item, $withtemplate=0) { - global $LANG; - if ($item->getType()=='Config') { - return $LANG['processmaker']['title'][1]; + return __('ProcessMaker', 'processmaker'); } return ''; } diff --git a/inc/process.class.php b/inc/process.class.php index 1fb0828..871a985 100644 --- a/inc/process.class.php +++ b/inc/process.class.php @@ -14,6 +14,9 @@ if (!defined('GLPI_ROOT')) { */ class PluginProcessmakerProcess extends CommonDBTM { + const CLASSIC = 'classic'; + const BPMN = 'bpmn'; + static $rightname = 'plugin_processmaker_config'; @@ -341,15 +344,15 @@ class PluginProcessmakerProcess extends CommonDBTM { * @return void (display) **/ function title() { - global $LANG, $CFG_GLPI; + global $CFG_GLPI; $buttons = array(); - $title = $LANG['processmaker']['config']['refreshprocesslist']; + $title = __('Synchronize Process List', 'processmaker'); if ($this->canCreate()) { - $buttons["process.php?refresh=1"] = $LANG['processmaker']['config']['refreshprocesslist']; + $buttons["process.php?refresh=1"] = $title; $title = ""; - Html::displayTitle($CFG_GLPI["root_doc"] . "/plugins/processmaker/pics/gears.png", $LANG['processmaker']['config']['refreshprocesslist'], $title, + Html::displayTitle($CFG_GLPI["root_doc"] . "/plugins/processmaker/pics/gears.png", $title, '', $buttons); } @@ -385,11 +388,9 @@ class PluginProcessmakerProcess extends CommonDBTM { * @return mixed */ function getSearchOptions() { - global $LANG; - $tab = array(); - $tab['common'] = $LANG['processmaker']['title'][1]; + $tab['common'] = __('ProcessMaker', 'processmaker'); $tab[1]['table'] = 'glpi_plugin_processmaker_processes'; $tab[1]['field'] = 'name'; @@ -423,25 +424,25 @@ class PluginProcessmakerProcess extends CommonDBTM { $tab[10]['table'] = 'glpi_plugin_processmaker_processes'; $tab[10]['field'] = 'process_guid'; - $tab[10]['name'] = $LANG['processmaker']['process']['process_guid']; + $tab[10]['name'] = __('Process GUID', 'processmaker'); $tab[10]['massiveaction'] = false; $tab[10]['datatype'] = 'text'; $tab[11]['table'] = 'glpi_plugin_processmaker_processes'; $tab[11]['field'] = 'project_type'; - $tab[11]['name'] = $LANG['processmaker']['process']['project_type_short']; + $tab[11]['name'] = __('Project type', 'processmaker'); $tab[11]['massiveaction'] = false; $tab[11]['datatype'] = 'specific'; $tab[12]['table'] = 'glpi_plugin_processmaker_processes'; $tab[12]['field'] = 'hide_case_num_title'; - $tab[12]['name'] = $LANG['processmaker']['process']['hide_case_num_title_short']; + $tab[12]['name'] = __('Hide case number and title', 'processmaker'); $tab[12]['massiveaction'] = true; $tab[12]['datatype'] = 'bool'; $tab[13]['table'] = 'glpi_plugin_processmaker_processes'; $tab[13]['field'] = 'insert_task_comment'; - $tab[13]['name'] = $LANG['processmaker']['process']['insert_task_comment_short']; + $tab[13]['name'] = __('Insert Task Category', 'processmaker'); $tab[13]['massiveaction'] = true; $tab[13]['datatype'] = 'bool'; @@ -453,7 +454,7 @@ class PluginProcessmakerProcess extends CommonDBTM { $tab[15]['table'] = 'glpi_plugin_processmaker_processes'; $tab[15]['field'] = 'type'; - $tab[15]['name'] = $LANG['processmaker']['process']['type']; + $tab[15]['name'] = __('Ticket type (self-service)', 'processmaker'); $tab[15]['searchtype'] = 'equals'; $tab[15]['datatype'] = 'specific'; $tab[15]['massiveaction'] = false; @@ -470,15 +471,13 @@ class PluginProcessmakerProcess extends CommonDBTM { * @param $options array **/ static function getSpecificValueToDisplay($field, $values, array $options=array()) { - global $LANG; - if (!is_array($values)) { $values = array($field => $values); } switch ($field) { case 'project_type': - return $LANG['processmaker']['process']['project_type_'.$values[$field]]; + return self::getProcessTypeName($values[$field]); case 'type': return Ticket::getTicketTypeName($values[$field]); @@ -487,13 +486,42 @@ class PluginProcessmakerProcess extends CommonDBTM { } - static function getTypeName($nb=0) { - global $LANG; + /** + * Summary of getAllTypeArray + * @return string[] + */ + static function getAllTypeArray() { + $tab = array(self::CLASSIC => _x('process_type', 'Classic', 'processmaker'), + self::BPMN => _x('process_type', 'BPMN', 'processmaker')); + + return $tab; + } + + + /** + * Summary of getProcessTypeName + * @param mixed $value + * @return mixed + */ + static function getProcessTypeName($value) { + + $tab = static::getAllTypeArray(true); + // Return $value if not defined + return (isset($tab[$value]) ? $tab[$value] : $value); + } + + + /** + * Summary of getTypeName + * @param mixed $nb + * @return mixed + */ + static function getTypeName($nb=0) { if ($nb>1) { - return $LANG['processmaker']['title'][5]; + return __('Processes', 'processmaker'); } - return $LANG['processmaker']['title'][2]; + return __('Process', 'processmaker'); } function defineTabs($options=array()) { @@ -512,7 +540,7 @@ class PluginProcessmakerProcess extends CommonDBTM { } function showForm ($ID, $options=array('candel'=>false)) { - global $DB, $CFG_GLPI, $LANG; + global $DB, $CFG_GLPI; //if ($ID > 0) { // $this->check($ID,READ); @@ -525,36 +553,36 @@ class PluginProcessmakerProcess extends CommonDBTM { $this->showFormHeader($options); echo ""; - echo ""; - echo ""; + echo ""; echo ""; echo ""; - echo ""; echo ""; - echo ""; echo ""; - echo ""; echo ""; - echo ""; echo ""; - echo ""; - echo ""; echo ""; - echo ""; echo ""; - echo ""; diff --git a/inc/process_profile.class.php b/inc/process_profile.class.php index 6e9706a..6be5844 100644 --- a/inc/process_profile.class.php +++ b/inc/process_profile.class.php @@ -23,13 +23,12 @@ class PluginProcessmakerProcess_Profile extends CommonDBTM } function getTabNameForItem( CommonGLPI $item, $withtemplate=0) { - global $LANG; - return $LANG['processmaker']['title'][4]; + return __('Authorizations', 'processmaker'); } static function displayTabContentForItem(CommonGLPI $item, $tabnum=1, $withtemplate=0) { - global $DB,$CFG_GLPI, $LANG; + global $DB; $ID = $item->getField('id'); @@ -43,7 +42,7 @@ class PluginProcessmakerProcess_Profile extends CommonDBTM echo ""; echo "
".__('Add a new case')."
".__('Add a new case', 'processmaker')."
"; - echo $LANG['processmaker']['item']['selectprocess']." "; + _e('Select the process you want to add', 'processmaker'); echo ""; PluginProcessmakerProcess::dropdown(array( 'value' => 0, 'entity' => $item->fields['entities_id'], 'name' => 'plugin_processmaker_processes_id', 'condition' => "is_active=1")); echo ""; @@ -632,7 +628,7 @@ class PluginProcessmakerCase extends CommonDBTM { * @param mixed $withtemplate */ static function displayTabContentForItem(CommonGLPI $item, $tabnum=1, $withtemplate=0) { - global $LANG, $DB, $CFG_GLPI, $PM_SOAP; + global $PM_SOAP; if ($item->getType() == __CLASS__) { // we are in a case viewing the main tab @@ -641,398 +637,16 @@ class PluginProcessmakerCase extends CommonDBTM { } else { - // the idea is to show a list of cases attached to the $item ITIL object - // TODO give possibility to start a new case if needed - self::showForItem($item); - } - } - - /** - * Summary of displayTabContentForItem - * @param CommonGLPI $item is the item - * @param mixed $tabnum is the tab num - * @param mixed $withtemplate has template - * @return mixed - */ - static function displayTabContentForItem_old(CommonGLPI $item, $tabnum=1, $withtemplate=0) { - global $LANG, $DB, $CFG_GLPI, $PM_SOAP; - - $config = $PM_SOAP->config; //PluginProcessmakerConfig::getInstance(); - - if ($config->fields['maintenance'] == 0) { - - $items_id = $item->getID(); - $itemtype = $item->getType(); - - $rand = rand(); - echo ""; - echo "
"; - echo Html::scriptBlock("$('#processmakercasemenu').css('max-width', 'none');"); - echo ""; - - $pmCaseUser = false; // initial value: no user - // first search for the case - $locCase = new self; - if ($locCase->getFromItem($itemtype, $items_id)) { - $GLPICurrentPMUserId=0; - $paramsURL=''; - $caseInfo = $locCase->getCaseInfo(); - if ($caseInfo->caseStatus != 'CANCELLED' && $caseInfo->caseStatus != 'COMPLETED') { - // need to get info on the thread of the GLPI current user - // we must retreive currentGLPI user from this array - $GLPICurrentPMUserId = PluginProcessmakerUser::getPMUserId(Session::getLoginUserID()); - $pmCaseUser = $caseInfo->currentUsers[0]; // by default currently manage only one task at a time, must define tab management for several tasks - foreach ($caseInfo->currentUsers as $caseUser) { - if ($caseUser->userId == $GLPICurrentPMUserId) { - $pmCaseUser = $caseUser; - break; - } - } - } - $locDelIndex = 1; // by default - switch ($caseInfo->caseStatus) { - case "CANCELLED" : - echo ""; - $paramsURL = "DEL_INDEX=1"; - // echo "" ; - break; - - case "DRAFT" : - case "TO_DO" : - - $paramsURL = "DEL_INDEX=".$pmCaseUser->delIndex."&action=".$caseInfo->caseStatus; - $locDelIndex = $pmCaseUser->delIndex; - if ($pmCaseUser->userId != '') { - echo ""; - - if ($GLPICurrentPMUserId == $pmCaseUser->userId) { - // then propose a button to cancel case only when assigned user is == to glpi current user - echo ""; - } - - if ($caseInfo->caseStatus == "DRAFT" || (plugin_processmaker_haveRight("case", DELETE) && $_SESSION['glpiactiveprofile']['interface'] == 'central')) { - // then propose a button to delete case - echo ""; - - } - - echo ""; - - echo ""; - } - - break; - case "COMPLETED" : - echo ""; - $paramsURL = "DEL_INDEX="; // DEL_INDEX is not set to tell PM to show the current task i.e.: the last one - break; - } - - $proj = new PluginProcessmakerProcess; - $proj->getFromGUID( $caseInfo->processId ); - $project_type = $proj->fields['project_type']; - - echo "
".$LANG['processmaker']['item']['tab']."
".$LANG['processmaker']['item']['cancelledcase']."
"; - echo $LANG['processmaker']['item']['cancelcase']; - echo ""; - echo ""; - echo ""; - //echo ""; - //echo ""; - //echo ""; - echo ""; - echo ""; - echo $LANG['processmaker']['item']['deletecase']; - echo ""; - echo ""; - //echo ""; - echo ""; - - echo ""; - - echo "
".$LANG['processmaker']['item']['completedcase']."
"; - echo ""; //?rand=$rand' - - // processmakertabpaneltable is used to align the tabs - echo ""; - echo Html::scriptBlock("$('#processmakertabpaneltable').css('max-width', 'none');"); - echo ""; - echo ""; - + // show the list of cases attached to the $item ITIL object + if (!$PM_SOAP->config->fields['maintenance']) { + self::showForItem($item); } else { - - //******************************** - // no running case for this ticket - // propose to start one - //******************************** - echo ""; - - echo ""; - } else { - echo ""; - } + PluginProcessmakerProcessmaker::showUnderMaintenance(); } - - echo "
"; - - ////////////////////////// - // Processmaker tab panels - // need to have a global variable which contains tab id - // used only one time for activated panel - ////////////////////////// - $arrayProcessmakerTabPanel = array(); - echo "
"; - - ////////////// - // Define tabs - ////////////// - echo "
    "; - //echo "
  • Nunc tincidunt
  • "; - //$arrayProcessmakerTabPanel[] = "tabs-1"; - $arrayProcessmakerTabPanel = []; - if ($pmCaseUser) { - foreach ($caseInfo->currentUsers as $caseUser) { - $title = $LANG['processmaker']['item']['task']['task'].$caseUser->taskName; - echo "
  • ". ($caseUser->userId != $GLPICurrentPMUserId ? "$title" : $title) ."
  • "; - $arrayProcessmakerTabPanel[] = "task-".$caseUser->delIndex; - } - } else { - // no user means CANCELLED or COMPLETED - // then create artificial panel to host case infos - echo "
  • ".$LANG['processmaker']['item']['case']['caseinfo']."
  • "; - $arrayProcessmakerTabPanel[] = "caseInfo"; - } - // add default panels: map, history, log and dynaforms - $defaultTabs = ['caseMap' => 'viewcasemap', 'caseHistory' => 'viewcasehistory', 'caseChangeLogHistory' => 'viewcasechangeloghistory', 'historyDynaformPage' => 'viewdynaforms' ]; - foreach ($defaultTabs as $tab => $tabText) { - echo "
  • ".$LANG['processmaker']['item']['case'][$tabText]."
  • "; - } - - echo "
"; - - //////////////// - // Define panels - //////////////// - if ($pmCaseUser) { - $csrf = Session::getNewCSRFToken(); - foreach ($caseInfo->currentUsers as $caseUser) { - // for each task, if task is to be claimed, we need to verify that current user can claim it by checking if he/she is in the group assigned to the task - $hide_claim_button=false; // by default - if (!$caseUser->userId) { - // current task is to claimed - // get task user list - $query = "SELECT items_id, itemtype FROM glpi_plugin_processmaker_tasks WHERE plugin_processmaker_cases_id = '".$locCase->getID()."' AND del_index =".$caseUser->delIndex; - foreach ($DB->request($query) as $row) { - // normally there is only one task - $task = getItemForItemtype( $row['itemtype'] ); - $task->getFromDB( $row['items_id'] ); - // check if this group can be found in the current user's groups - if (!isset($_SESSION['glpigroups']) || !in_array( $task->fields['groups_id_tech'], $_SESSION['glpigroups'] )) { - $hide_claim_button=true; - } - } - } - echo "
"; - // to load users for task re-assign only when task is not to be 'claimed' - if ($caseUser->userId) { - echo "
Loading...
"; - echo ""; - } - echo "
"; - } - } else { - // no user means CANCELLED or COMPLETED - // then create artificial panel to host case infos - echo "
"; - $url = $PM_SOAP->serverURL."/cases/cases_Open?sid=".$PM_SOAP->getPMSessionID()."&APP_UID=".$caseInfo->caseId."&".$paramsURL."&action=TO_DO"; - echo "
"; - } - // default panels - // map, history, log and dynaforms - // will be added dynamically by the addTabPanel function - - - echo "
"; - // end of tabs/panels - - echo "
"; - if ($pmCaseUser) { - $activePanel = 'task-'.$pmCaseUser->delIndex; - } else { - $activePanel = 'caseInfo'; - } - $caseMapUrl = $PM_SOAP->serverURL.($project_type=='bpmn' ? "/designer?prj_uid=".$caseInfo->processId."&prj_readonly=true&app_uid=".$caseInfo->caseId : "/cases/ajaxListener?action=processMap&rand=$rand")."&glpi_domain={$config->fields['domain']}"; - echo ""; - - echo "
".$LANG['processmaker']['item']['nocase']; - - // check if item is not solved nor closed - if ($item->fields['status'] != 'solved' && $item->fields['status'] != 'closed' && $_SESSION['glpiactiveprofile']['interface'] != 'helpdesk') { - // propose case start - echo " - ".$LANG['processmaker']['item']['startone']; - echo "
"; - echo $LANG['processmaker']['item']['selectprocess']." "; - echo ""; - echo ""; - echo ""; - PluginProcessmakerProcess::dropdown(array( 'value' => 0, 'entity' => $item->fields['entities_id'], 'name' => 'plugin_processmaker_processes_id', 'condition' => "is_active=1")); - echo ""; - echo ""; - echo "
"; - Html::closeForm(true ); - //echo ""; - - } else { - // under maintenance - echo $LANG['processmaker']['config']['undermaintenance']; } - - return true; } + /** * Summary of deleteTasks * will delete all tasks associated with this case from the item @@ -1053,22 +667,22 @@ class PluginProcessmakerCase extends CommonDBTM { } - /** - * Summary of deleteCase - * will delete case and all tasks associated with this case from the item - * @return true if case and tasks have been deleted from associated item and from case table - */ + /** + * Summary of deleteCase + * will delete case and all tasks associated with this case from the item + * @return true if case and tasks have been deleted from associated item and from case table + */ function deleteCase( ) { return $this->delete(['id' => $this->getID()]); } - /** - * Summary of cancelTasks - * will mark as information all to_do tasks - * BEWARE that this will only be done when case is in TO_DO status - * @return true if tasks have been deleted from associated item and from case table - */ + /** + * Summary of cancelTasks + * will mark as information all to_do tasks + * BEWARE that this will only be done when case is in TO_DO status + * @return true if tasks have been deleted from associated item and from case table + */ private function cancelTasks( ) { global $DB; $ret = false; @@ -1117,7 +731,7 @@ class PluginProcessmakerCase extends CommonDBTM { if ($myCase->getFromItem( $item['item']->getType(), $item['item']->getID() )) { $pmVar = $myCase->getVariables(['GLPI_ITEM_CAN_BE_SOLVED']); // TODO also manage sub-cases - if ($myCase->fields['case_status'] != 'COMPLETED' && $myCase->fields['case_status'] != 'CANCELLED' && (!isset($pmVar['GLPI_ITEM_CAN_BE_SOLVED']) || $pmVar['GLPI_ITEM_CAN_BE_SOLVED'] != 1)) { + if ($myCase->fields['case_status'] != self::COMPLETED && $myCase->fields['case_status'] != self::CANCELLED && (!isset($pmVar['GLPI_ITEM_CAN_BE_SOLVED']) || $pmVar['GLPI_ITEM_CAN_BE_SOLVED'] != 1)) { // then item can't be solved return false; } @@ -1185,9 +799,14 @@ class PluginProcessmakerCase extends CommonDBTM { return $menu; } + /** + * Summary of getSpecificValueToDisplay + * @param mixed $field + * @param mixed $values + * @param array $options + * @return mixed + */ static function getSpecificValueToDisplay($field, $values, array $options=array()) { - global $LANG; - if (!is_array($values)) { $values = array($field => $values); } @@ -1217,7 +836,7 @@ class PluginProcessmakerCase extends CommonDBTM { } case 'case_status': - return $LANG['processmaker']['case']['statuses'][$values['case_status']]; + return self::getStatus($values['case_status']); default: return parent::getSpecificValueToDisplay($field, $values, $options); @@ -1277,18 +896,11 @@ class PluginProcessmakerCase extends CommonDBTM { static function getAllStatusArray($withmetaforsearch=false) { - $tab = array(self::DRAFT => _x('case_status', 'Draft'), - self::TO_DO => _x('case_status', 'To do'), - self::COMPLETED => _x('case_status', 'Completed'), - self::CANCELLED => _x('case_status', 'Cancelled')); + $tab = array(self::DRAFT => _x('case_status', 'Draft', 'processmaker'), + self::TO_DO => _x('case_status', 'To do', 'processmaker'), + self::COMPLETED => _x('case_status', 'Completed', 'processmaker'), + self::CANCELLED => _x('case_status', 'Cancelled', 'processmaker')); - //if ($withmetaforsearch) { - // $tab['notold'] = _x('status', 'Not solved'); - // $tab['notclosed'] = _x('status', 'Not closed'); - // $tab['process'] = __('Processing'); - // $tab['old'] = _x('status', 'Solved + Closed'); - // $tab['all'] = __('All'); - //} return $tab; } @@ -1305,11 +917,9 @@ class PluginProcessmakerCase extends CommonDBTM { * @return mixed */ function getSearchOptions() { - global $LANG; - $tab = array(); - $tab['common'] = __('Process cases', 'processmaker'); //$LANG['processmaker']['title'][1]; + $tab['common'] = __('Process cases', 'processmaker'); $tab[1]['table'] = self::getTable(); $tab[1]['field'] = 'id'; @@ -1365,13 +975,12 @@ class PluginProcessmakerCase extends CommonDBTM { $tab[14]['datatype'] = 'itemlink'; $tab[14]['massiveaction'] = false; - return $tab; } function showForm ($ID, $options=array('candel'=>false)) { - global $DB, $CFG_GLPI, $LANG; + //global $DB, $CFG_GLPI, $LANG; $options['candel'] = true; @@ -1449,6 +1058,12 @@ class PluginProcessmakerCase extends CommonDBTM { } + + /** + * Summary of defineTabs + * @param mixed $options + * @return array + */ function defineTabs($options=array()) { // $ong = array('empty' => $this->getTypeName(1)); @@ -1467,11 +1082,6 @@ class PluginProcessmakerCase extends CommonDBTM { $this->addStandardTab('PluginProcessmakerCasedynaform', $ong, $options); - //$this->addStandardTab('Ticket', $ong, $options); - //$this->addStandardTab('Log', $ong, $options); - - //TODO we are going to add tabs like tasks, map, history, dynaform... - return $ong; } diff --git a/inc/casechangelog.class.php b/inc/casechangelog.class.php index c8a24ee..9d10ce7 100644 --- a/inc/casechangelog.class.php +++ b/inc/casechangelog.class.php @@ -14,15 +14,15 @@ class PluginProcessmakerCasechangelog extends CommonDBTM { global $CFG_GLPI, $PM_SOAP; $rand = rand(); - - $caseHistoryURL = $PM_SOAP->serverURL."/cases/ajaxListener?action=changeLogHistory&rand=$rand"; + + $caseHistoryURL = $PM_SOAP->serverURL."/cases/ajaxListener?action=changeLogHistory&rand=$rand"; echo ""; //?rand=$rand' - $iframe = ""; @@ -32,7 +32,6 @@ class PluginProcessmakerCasechangelog extends CommonDBTM { } function getTabNameForItem(CommonGLPI $case, $withtemplate = 0){ - global $LANG; - return $LANG['processmaker']['item']['case']['changelog']; + return __('Change log', 'processmaker'); } } \ No newline at end of file diff --git a/inc/casedynaform.class.php b/inc/casedynaform.class.php index 9ec2cab..90006f7 100644 --- a/inc/casedynaform.class.php +++ b/inc/casedynaform.class.php @@ -11,7 +11,7 @@ class PluginProcessmakerCasedynaform extends CommonDBTM { static function displayTabContentForItem(CommonGLPI $case, $tabnum=1, $withtemplate=0) { - global $CFG_GLPI, $PM_SOAP, $LANG; + global $CFG_GLPI, $PM_SOAP; $config = $PM_SOAP->config; $rand = rand(); @@ -77,8 +77,7 @@ class PluginProcessmakerCasedynaform extends CommonDBTM { } function getTabNameForItem(CommonGLPI $case, $withtemplate = 0){ - global $LANG; - return $LANG['processmaker']['item']['case']['viewdynaforms']; + return __('Dynaforms', 'processmaker'); } } \ No newline at end of file diff --git a/inc/casehistory.class.php b/inc/casehistory.class.php index ebdb9b2..e83394e 100644 --- a/inc/casehistory.class.php +++ b/inc/casehistory.class.php @@ -15,7 +15,7 @@ class PluginProcessmakerCasehistory extends CommonDBTM { $rand = rand(); $caseHistoryURL = $PM_SOAP->serverURL - ."/cases/ajaxListener?action=caseHistory&rand=$rand"; + ."/cases/ajaxListener?action=caseHistory&rand=$rand"; echo ""; @@ -32,7 +32,6 @@ class PluginProcessmakerCasehistory extends CommonDBTM { } function getTabNameForItem(CommonGLPI $case, $withtemplate = 0){ - global $LANG; - return $LANG['processmaker']['item']['case']['viewcasehistory']; + return __('History', 'processmaker'); } } \ No newline at end of file diff --git a/inc/caselink.class.php b/inc/caselink.class.php index c66fb5f..eb1701f 100644 --- a/inc/caselink.class.php +++ b/inc/caselink.class.php @@ -47,16 +47,14 @@ class PluginProcessmakerCaselink extends CommonDBTM { } static function getTypeName($nb=0) { - global $LANG; - if ($nb>1) { - return $LANG['processmaker']['title'][7]; + return __('Case-links', 'processmaker'); } - return $LANG['processmaker']['title'][6]; + return __('Case-link', 'processmaker'); } function showForm ($ID, $options=array('candel'=>false)) { - global $DB, $CFG_GLPI, $LANG; + global $DB, $CFG_GLPI; $options['candel'] = true; @@ -64,27 +62,27 @@ class PluginProcessmakerCaselink extends CommonDBTM { $this->showFormHeader($options); echo "
".__("Name").""; + echo "".__('Name').""; echo ""; echo "
".__("Active").""; + echo "".__('Active').""; Dropdown::showYesNo("is_active", $this->fields["is_active"]); echo "
".__("External data").""; + echo "".__('External data', 'processmaker').""; Dropdown::showYesNo("is_externaldata", $this->fields["is_externaldata"]); echo "
".__("Self").""; + echo "".__('Self', 'processmaker').""; Dropdown::showYesNo("is_self", $this->fields["is_self"]); echo "
".__("Source task GUID").""; + echo "".__('Source task GUID', 'processmaker').""; //PluginProcessmakerTaskCategory::dropdown(array('name' => 'plugin_processmaker_taskcategories_id_source', // 'display_emptychoice' => false, // 'value' => $this->fields['plugin_processmaker_taskcategories_id_source'])); @@ -92,7 +90,7 @@ class PluginProcessmakerCaselink extends CommonDBTM { echo "
".__("Target task GUID").""; + echo "".__('Target task GUID', 'processmaker').""; //PluginProcessmakerTaskCategory::dropdown(array('name' => 'plugin_processmaker_taskcategories_id_target', // 'display_emptychoice' => false, // 'value' => $this->fields['plugin_processmaker_taskcategories_id_target'])); @@ -100,7 +98,7 @@ class PluginProcessmakerCaselink extends CommonDBTM { echo "
".__("Target process GUID").""; + echo "".__('Target process GUID', 'processmaker').""; //Dropdown::show( 'PluginProcessmakerProcess', array('name' => 'plugin_processmaker_processes_id', // 'display_emptychoice' => true, // 'value' => $this->fields['plugin_processmaker_processes_id'], @@ -109,23 +107,23 @@ class PluginProcessmakerCaselink extends CommonDBTM { echo "
".__("Target dynaform GUID").""; + echo "".__('Target dynaform GUID', 'processmaker').""; echo ""; echo "
".__("Source condition").""; + echo "".__('Source condition', 'processmaker').""; //echo ""; echo ""; echo "
".__("Claim target task").""; + echo "".__('Claim target task', 'processmaker').""; Dropdown::showYesNo("is_targettoclaim", $this->fields["is_targettoclaim"]); echo "
".__("External application JSON config").""; + echo "".__('External application JSON config', 'processmaker').""; echo ""; echo "
".$LANG['processmaker']['config']['URL'].""; + echo "".__('Server URL (must be in same domain than GLPI)', 'processmaker').""; echo ""; echo "
" . $LANG['processmaker']['config']['domain'] . "".__('Common domain with GLPI', 'processmaker')."
".$config->fields['domain']."
"; echo Html::scriptBlock(" @@ -191,7 +187,7 @@ class PluginProcessmakerConfig extends CommonDBTM { return; } } catch(ex) {} - $('div[name=domain]').text('".$LANG['processmaker']['config']['domain-error']."') ; + $('div[name=domain]').text('".__('None!', 'processmaker')."') ; $('div[name=domain]').parent().attr('color', 'red'); }; $('input[name=pm_server_URL]').on('keyup', setCommonDomain ) ; @@ -200,23 +196,23 @@ class PluginProcessmakerConfig extends CommonDBTM { echo "
".$LANG['processmaker']['config']['workspace'].""; + echo "".__('Workspace Name', 'processmaker').""; echo ""; echo "
" . $LANG['processmaker']['config']['admin']['user'] . "".__('Server administrator name', 'processmaker').""; echo "
" . $LANG['processmaker']['config']['admin']['password'] . "".__('Server administrator password', 'processmaker').""; echo "  ".__('Clear'); echo "
".$LANG['processmaker']['config']['connectionstatus'].""; + echo "".__('Connection status', 'processmaker').""; //$pm = new PluginProcessmakerProcessmaker; if ($config->fields['pm_server_URL'] != '' @@ -232,31 +228,31 @@ class PluginProcessmakerConfig extends CommonDBTM { } echo "
".$LANG['processmaker']['config']['mysql']."
".__('SQL server setup', 'processmaker')."
" . __('SQL server (MariaDB or MySQL)') . "" . __('SQL server (MariaDB or MySQL)', 'processmaker') . ""; echo "
" . __('Database name') . "" . __('Database name', 'processmaker') . ""; echo "
" . __('SQL user') . "" . __('SQL user', 'processmaker') . ""; echo "
" . __('SQL password') . "" . __('SQL password', 'processmaker') . ""; echo "  ".__('Clear'); echo "
".$LANG['processmaker']['config']['connectionstatus'].""; + echo "".__('Connection status', 'processmaker').""; if ($PM_DB->connected && isset($PM_DB->dbdefault) && $PM_DB->dbdefault != '') { echo "".__('Test successful'); } else { @@ -267,20 +263,20 @@ class PluginProcessmakerConfig extends CommonDBTM { echo "
".__('Settings')."
".$LANG['processmaker']['config']['theme'].""; + echo "".__('Theme Name', 'processmaker').""; Dropdown::showFromArray('pm_theme', $ui_theme, array('value' => $config->fields['pm_theme'])); echo "
".$LANG['processmaker']['config']['main_task_category'].""; + echo "".__('Main Task Category (edit to change name)', 'processmaker').""; TaskCategory::dropdown(array('name' => 'taskcategories_id', 'display_emptychoice' => true, 'value' => $config->fields['taskcategories_id'])); echo "
".$LANG['processmaker']['config']['taskwriter'].""; + echo "".__('Task Writer (edit to change name)', 'processmaker').""; $rand = mt_rand(); User::dropdown(array('name' => 'users_id', 'display_emptychoice' => true, @@ -300,7 +296,7 @@ class PluginProcessmakerConfig extends CommonDBTM { echo "
".$LANG['processmaker']['config']['pm_group_name'].""; + echo "".__('Group in ProcessMaker which will contain all GLPI users', 'processmaker').""; $pmGroups = array( 0 => Dropdown::EMPTY_VALUE ); $query = "SELECT DISTINCT CON_ID, CON_VALUE FROM CONTENT WHERE CON_CATEGORY='GRP_TITLE' ORDER BY CON_VALUE;"; @@ -318,27 +314,27 @@ class PluginProcessmakerConfig extends CommonDBTM { echo "
".__('Maintenance')."
".$LANG['processmaker']['config']['maintenance'].""; + echo "".__('Maintenance mode').""; Dropdown::showYesNo("maintenance", $config->fields['maintenance']); echo "
".__('Processmaker system information')."
".__('Processmaker system information', 'processmaker')."
'._('Version').''.$info->version.'
'._('Web server').''.$info->webServer.'
'._('Server name').''.$info->serverName.'
'._('PHP version').''.$info->phpVersion.'
'._('DB version').''.$info->databaseVersion.'
'._('DB server IP').''.$info->databaseServerIp.'
'._('DB name').''.$info->databaseName.'
'._('User browser').''.$info->userBrowser.'
'._('User IP').''.$info->userIp.'
'.__('Version', 'processmaker').''.$info->version.'
'.__('Web server', 'processmaker').''.$info->webServer.'
'.__('Server name', 'processmaker').''.$info->serverName.'
'.__('PHP version', 'processmaker').''.$info->phpVersion.'
'.__('DB version', 'processmaker').''.$info->databaseVersion.'
'.__('DB server IP', 'processmaker').''.$info->databaseServerIp.'
'.__('DB name', 'processmaker').''.$info->databaseName.'
'.__('User browser', 'processmaker').''.$info->userBrowser.'
'.__('User IP', 'processmaker').''.$info->userIp.'
'._('Version').''.__('Not yet!').'
'.__('Version', 'processmaker').''.__('Not yet!', 'processmaker').'
".__("Name")." :"; + echo "".__("Name").""; //Html::autocompletionTextField($this, "name"); echo $this->fields["name"]; echo "".__("Comments")." :".__("Comments")."
".$LANG['processmaker']['process']['process_guid']." :"; + echo "".__('Process GUID', 'processmaker').""; echo $this->fields["process_guid"]; echo "
".__("Active")." :"; + echo "".__("Active").""; Dropdown::showYesNo("is_active", $this->fields["is_active"]); echo "
".$LANG['processmaker']['process']['hide_case_num_title']." :"; + echo "".__('Hide case number and title in task descriptions', 'processmaker').""; Dropdown::showYesNo("hide_case_num_title", $this->fields["hide_case_num_title"]); echo "
".$LANG['processmaker']['process']['insert_task_comment']." :"; + echo "".__('Insert Task Category comments in Task Description', 'processmaker').""; Dropdown::showYesNo("insert_task_comment", $this->fields["insert_task_comment"]); echo "
".$LANG['processmaker']['process']['type']." :"; + echo "".__('Ticket type (self-service)', 'processmaker').""; if (true) { // $canupdate || !$ID $idticketcategorysearch = mt_rand(); $opt = array('value' => $this->fields["type"]); $rand = Ticket::dropdownType('type', $opt, array(), array('toupdate' => "search_".$idticketcategorysearch )); @@ -572,7 +600,7 @@ class PluginProcessmakerProcess extends CommonDBTM { } echo "".$LANG['processmaker']['process']['itilcategory']." :"; + echo "".__('ITIL Category (self-service)', 'processmaker').""; if (true) { // $canupdate || !$ID || $canupdate_descr $opt = array('value' => $this->fields["itilcategories_id"]); @@ -601,12 +629,12 @@ class PluginProcessmakerProcess extends CommonDBTM { echo "
".$LANG['processmaker']['process']['project_type']." :"; - Dropdown::showFromArray( 'project_type', array( 'classic' => $LANG['processmaker']['process']['project_type_classic'], 'bpmn' => $LANG['processmaker']['process']['project_type_bpmn'] ), array( 'value' => $this->fields["project_type"] ) ); + echo "".__('Project type (to be changed if not up-to-date)', 'processmaker').""; + Dropdown::showFromArray( 'project_type', self::getAllTypeArray(), array( 'value' => $this->fields["project_type"] ) ); echo "
".__("Last update")." :"; + echo "".__("Last update").""; echo Html::convDateTime($this->fields["date_mod"]); echo "
"; - echo ""; + echo ""; echo ""; - $header_end .= ""; echo $header_begin.$header_top.$header_end; @@ -119,7 +118,7 @@ class PluginProcessmakerProcess_Profile extends CommonDBTM $link = $data["completename"]; if ($_SESSION["glpiis_ids_visible"]) { - $link = sprintf(__('%1$s (%2$s)'), $link, $data["entities_id"]); + $link = sprintf('%1$s (%2$s)', $link, $data["entities_id"]); } if ($canshowentity) { @@ -137,12 +136,12 @@ class PluginProcessmakerProcess_Profile extends CommonDBTM } if ($data["is_recursive"]) { - $entname = sprintf(__('%1$s %2$s'), $entname, "("); + $entname = sprintf('%1$s %2$s', $entname, "("); if ($data["is_recursive"]) { //TRANS: letter 'R' for Recursive - $entname = sprintf(__('%1$s%2$s'), $entname, __('R')); + $entname = sprintf('%1$s%2$s', $entname, __('R')); } - $entname = sprintf(__('%1$s%2$s'), $entname, ")"); + $entname = sprintf('%1$s%2$s', $entname, ")"); } echo ""; echo ""; diff --git a/inc/processmaker.class.php b/inc/processmaker.class.php index 2fb5193..6ffbe4c 100644 --- a/inc/processmaker.class.php +++ b/inc/processmaker.class.php @@ -91,6 +91,10 @@ class PluginProcessmakerProcessmaker extends CommonDBTM { static $rightname = ''; + const ERROR_CREATING_CASE = 11; + const ERROR_NO_RIGHTS = 14; + const ERROR_CREATING_CASE2 = 100; + ///** //* Return the table used to store this object @@ -102,6 +106,34 @@ class PluginProcessmakerProcessmaker extends CommonDBTM { return "glpi_plugin_processmaker_processes"; } + + /** + * Summary of getAllTypeArray + * @return string[] + */ + static function getAllPMErrorArray() { + + $tab = array(self::ERROR_CREATING_CASE => _x('errors', 'Error creating case!', 'processmaker'), + self::ERROR_NO_RIGHTS => _x('errors', 'Can\'t create case: no rights for it!', 'processmaker'), + self::ERROR_CREATING_CASE2 => _x('errors', 'Error creating case!', 'processmaker')); + + return $tab; + } + + + /** + * Summary of getProcessTypeName + * @param mixed $value + * @return mixed + */ + static function getPMErrorMessage($value) { + + $tab = static::getAllPMErrorArray(); + // Return $value if not defined + return (isset($tab[$value]) ? $tab[$value] : $value); + } + + /** * Summary of addTicketFollowup * @param mixed $itemId @@ -285,17 +317,19 @@ class PluginProcessmakerProcessmaker extends CommonDBTM { function getCaseInfo($caseGuid, $delIndex='') { try { $pmCaseInfo = $this->pmSoapClient->getCaseInfo( array( 'sessionId' => $this->getPMSessionID(), 'caseId' => $caseGuid, 'delIndex' => $delIndex) ); - switch ($pmCaseInfo->caseStatus) { - case 'DRAFT' : - case 'TO_DO': - // case 'CANCELLED' : - if (is_object( $pmCaseInfo->currentUsers )) { - $pmCaseInfo->currentUsers = array( 0 => $pmCaseInfo->currentUsers ); - } - if ($pmCaseInfo->currentUsers[0]->delThreadStatus == 'PAUSE') { - $pmCaseInfo->caseStatus = "PAUSED"; - } - break; + if (property_exists($pmCaseInfo, 'currentUsers')) { + switch ($pmCaseInfo->caseStatus) { + case 'DRAFT' : + case 'TO_DO': + // case 'CANCELLED' : + if (is_object( $pmCaseInfo->currentUsers )) { + $pmCaseInfo->currentUsers = array( 0 => $pmCaseInfo->currentUsers ); + } + if ($pmCaseInfo->currentUsers[0]->delThreadStatus == 'PAUSE') { + $pmCaseInfo->caseStatus = "PAUSED"; + } + break; + } } return $pmCaseInfo; } catch (Exception $e) { @@ -945,15 +979,13 @@ class PluginProcessmakerProcessmaker extends CommonDBTM { * @return array of strings */ static function cronInfo($name) { - global $LANG; - switch ($name) { case 'pmusers' : - return array('description' => $LANG['processmaker']['cron']['pmusers'] ); + return array('description' => __('Syncs GLPI users and groups into ProcessMaker.', 'processmaker')); case 'pmorphancases' : - return array('description' => $LANG['processmaker']['cron']['pmorphancases']['description'], 'parameter' => $LANG['processmaker']['cron']['pmorphancases']['parameter'] ); + return array('description' => __('Cleaning of orphan cases.', 'processmaker'), 'parameter' => __('Number of days to keep orphan cases', 'processmaker')); case 'pmtaskactions' : - return array('description' => $LANG['processmaker']['cron']['pmtaskactions'] ); + return array('description' => __('To apply task actions between cases.', 'processmaker')); } return array(); } @@ -1566,7 +1598,7 @@ class PluginProcessmakerProcessmaker extends CommonDBTM { * @return */ public function addTask($cases_id, $itemtype, $items_id, $caseInfo, $delIndex, $techId, $groupId, $pmTaskId, $delThread, $options=array() ) { - global $DB, $PM_DB, $LANG, $_SESSION; + global $DB, $PM_DB, $_SESSION; $default_options = array( 'txtTaskContent' => '', @@ -1655,16 +1687,16 @@ class PluginProcessmakerProcessmaker extends CommonDBTM { $input['content'] = ""; // by default empty :) if ($pmProcess->fields["insert_task_comment"]) { - $input['content'] .= $LANG['processmaker']['item']['task']['comment']."\n"; + $input['content'] .= "##processmaker.taskcomment##\n"; } if ($options['txtTaskContent'] != '') { $input['content'] .= $options['txtTaskContent']."\n"; } else if (!$pmProcess->fields["hide_case_num_title"]) { - $input['content'] .= $LANG['processmaker']['item']['task']['case'].$caseInfo->caseName."\n"; + $input['content'] .= __('Case title: ', 'processmaker').$caseInfo->caseName."\n"; } - $input['content'] .= $LANG['processmaker']['item']['task']['manage']; + $input['content'] .= "##processmakercase.url##"; $input['is_private'] = 0; $input['actiontime'] = 0; @@ -2112,7 +2144,7 @@ class PluginProcessmakerProcessmaker extends CommonDBTM { Session::initNavigateListItems('PluginProcessmakerCase', //TRANS : %1$s is the itemtype name, // %2$s is the name of the item (used for headings of a list) - sprintf(__('%1$s = %2$s'), + sprintf('%1$s = %2$s', $params['options']['parent']->getTypeName(1), $params['options']['parent']->fields["name"])); } } @@ -2124,7 +2156,7 @@ class PluginProcessmakerProcessmaker extends CommonDBTM { * @return void */ static function pre_show_tab_processmaker($params) { - global $LANG, $pmHideSolution; + global $pmHideSolution; $plugin = new Plugin(); $itemtype = $params['item']->getType(); switch ($itemtype) { @@ -2143,8 +2175,8 @@ class PluginProcessmakerProcessmaker extends CommonDBTM { if (!$pmCanSolve) { // don't display message if arbehaviours is install if (!($plugin->isInstalled('arbehaviours') && $plugin->isActivated('arbehaviours'))) { - $messageOne = $LANG['processmaker']['item']['preventsolution'][1]; - $messageTwo = $LANG['processmaker']['item']['preventsolution'][2]; + $messageOne = __('A \'Case\' is running!', 'processmaker'); + $messageTwo = __('You must manage it first (see \'Process - Case\' tab)!', 'processmaker'); // output explicit message to explain why it's not possible to add solution $message = "
@@ -2344,12 +2376,12 @@ class PluginProcessmakerProcessmaker extends CommonDBTM { * This workaround will artificially load cases_Open page to force * initialization of those SESSION variables to prevent mix of values * when viewing tabs like map, change log, history, and dynaforms - * + * * it will also manage the glpi_domain parameter - * + * * @param mixed $currentCase array that contains APP_UID, DEL_INDEX * @param mixed $iFrameUrl string which is the url of the tab panel - * @param mixed $rand integer + * @param mixed $rand integer */ public function initCaseAndShowTab($currentCase, $iFrameUrl, $rand) { $iFrameUrl = urlencode($iFrameUrl); @@ -2385,13 +2417,15 @@ class PluginProcessmakerProcessmaker extends CommonDBTM { global $_SESSION, $CFG_GLPI; if (isset( $item->datas ) && isset( $item->datas['tasks'] )) { foreach ($item->datas['tasks'] as &$task) { // we must check if task category is PM task category or not, if yes then we add task category comment to datas - $task['##task.description##'] = str_replace( '##processmaker.taskcomment##', $task['##task.categorycomment##'], $task['##task.description##'] ); $pmtask_itemtype = $item->obj->getType().'Task'; $pmtask_items_id = $task['##task.id##']; $pmtask = new PluginProcessmakerTask($pmtask_itemtype); - $pmtask->getFromDBByQuery("WHERE itemtype = '$pmtask_itemtype' AND items_id = $pmtask_items_id"); - $caseurl = urldecode($CFG_GLPI["url_base"]."/index.php?redirect=PluginProcessmakerCase_".$pmtask->fields['plugin_processmaker_cases_id']); - $task['##task.description##'] = str_replace('##processmakercase.url##', $caseurl, $task['##task.description##']); + if ($pmtask->getFromDBByQuery("WHERE itemtype = '$pmtask_itemtype' AND items_id = $pmtask_items_id")) { + $task['##task.description##'] = str_replace( '##processmaker.taskcomment##', $task['##task.categorycomment##'], $task['##task.description##'] ); + $pmtask->getFromDBByQuery("WHERE itemtype = '$pmtask_itemtype' AND items_id = $pmtask_items_id"); + $caseurl = urldecode($CFG_GLPI["url_base"]."/index.php?redirect=PluginProcessmakerCase_".$pmtask->fields['plugin_processmaker_cases_id']); + $task['##task.description##'] = str_replace('##processmakercase.url##', $caseurl, $task['##task.description##']); + } } } @@ -2992,4 +3026,17 @@ class PluginProcessmakerProcessmaker extends CommonDBTM { echo Html::scriptBlock($scriptblock); } + /** + * Summary of underMaintenance + * Shows a nice(?) under maintenance message + */ + static function showUnderMaintenance() { + global $CFG_GLPI; + echo "
"; + echo Html::image($CFG_GLPI['root_doc'].'/plugins/processmaker/pics/under_maintenance.png'); + echo "

"; + _e('ProcessMaker plugin is under maintenance, please retry later, thank you.', 'processmaker'); + echo "

"; + echo "
"; + } } diff --git a/inc/profile.class.php b/inc/profile.class.php index d85baa7..a506f38 100644 --- a/inc/profile.class.php +++ b/inc/profile.class.php @@ -12,15 +12,13 @@ class PluginProcessmakerProfile extends CommonDBTM { * @return array[] */ static function getAllRights() { - global $LANG; - $rights = array( array('itemtype' => 'PluginProcessmakerConfig', - 'label' => $LANG['processmaker']['profile']['process_config'], + 'label' => __('Process configuration', 'processmaker'), 'field' => 'plugin_processmaker_config', 'rights' => array(READ => __('Read'), UPDATE => __('Update'))), array('itemtype' => 'PluginProcessmakerConfig', - 'label' => $LANG['processmaker']['profile']['case'], + 'label' => __('Cases', 'processmaker'), 'field' => 'plugin_processmaker_case', 'rights' => array(READ => __('Read'), CANCEL => __('Cancel', 'processmaker'), DELETE => __('Delete'))) ); @@ -37,7 +35,6 @@ class PluginProcessmakerProfile extends CommonDBTM { * @return bool */ function showForm($ID=0, $openform=TRUE, $closeform=TRUE) { - global $LANG; if (!Session::haveRight("profile", READ)) { return false; @@ -52,7 +49,7 @@ class PluginProcessmakerProfile extends CommonDBTM { $rights = $this->getAllRights(); $prof->displayRightsChoiceMatrix($rights, array('canedit' => $canedit, 'default_class' => 'tab_bg_2', - 'title' => $LANG['processmaker']['title'][1])); + 'title' => __('ProcessMaker', 'processmaker'))); if ($canedit && $closeform) { echo "
"; @@ -64,6 +61,7 @@ class PluginProcessmakerProfile extends CommonDBTM { Html::closeForm(); + return true; } /** @@ -81,10 +79,8 @@ class PluginProcessmakerProfile extends CommonDBTM { * @return string|string[] */ function getTabNameForItem(CommonGLPI $item, $withtemplate=0) { - global $LANG; - if ($item->getType()=='Profile') { - return $LANG['processmaker']['title'][1]; + return __('ProcessMaker', 'processmaker'); } return ''; } diff --git a/inc/task.class.php b/inc/task.class.php index bb710e4..7cecddf 100644 --- a/inc/task.class.php +++ b/inc/task.class.php @@ -22,8 +22,7 @@ class PluginProcessmakerTask extends CommonITILTask * @param $nb : number of item in the type (default 0) **/ static function getTypeName($nb=0) { - return _n('Process case task', 'Process case tasks', $nb); - + return _n('Process case task', 'Process case tasks', $nb, 'processmaker'); } function getItilObjectItemType() { @@ -71,7 +70,7 @@ class PluginProcessmakerTask extends CommonITILTask $query = "SELECT glpi_tickettasks.id as taskID from $itemTypeTaskTable INNER JOIN $selfTable on $selfTable.items_id=$itemTypeTaskTable.id - WHERE $itemTypeTaskTable.state=1 and $selfTable.case_id='$case_id';"; + WHERE $itemTypeTaskTable.state=1 and $selfTable.plugin_processmaker_cases_id='$case_id';"; foreach ($DB->request($query) as $row) { $ret[$row['taskID']]=$row['taskID']; } @@ -130,7 +129,9 @@ class PluginProcessmakerTask extends CommonITILTask function getTabNameForItem(CommonGLPI $case, $withtemplate = 0){ - global $DB, $LANG; + global $DB; + + $tab = []; $caseInfo = $case->getCaseInfo(); @@ -156,7 +157,6 @@ class PluginProcessmakerTask extends CommonITILTask $caseInfo->currentUsers = $case->sortTasks($caseInfo->currentUsers, $GLPICurrentPMUserId); - $tab = []; foreach ($caseInfo->currentUsers as $key => $caseUser) { $title = $caseUser->taskName; if (isset($tasks[$caseUser->delIndex])) { diff --git a/inc/taskcategory.class.php b/inc/taskcategory.class.php index 1683504..18cd738 100644 --- a/inc/taskcategory.class.php +++ b/inc/taskcategory.class.php @@ -18,26 +18,24 @@ class PluginProcessmakerTaskCategory extends CommonDBTM { function getTabNameForItem( CommonGLPI $item, $withtemplate=0) { - global $LANG; - return $LANG['processmaker']['title'][3]; + return __('Task List', 'processmaker'); } static function displayTabContentForItem(CommonGLPI $item, $tabnum=1, $withtemplate=0) { - - global $LANG, $DB, $CFG_GLPI; + global $DB, $CFG_GLPI; self::title($item); echo "

".$LANG['processmaker']['title'][4]."
".__('Authorizations', 'processmaker')."
"; echo ""; @@ -99,7 +98,7 @@ class PluginProcessmakerProcess_Profile extends CommonDBTM $header_end .= ""; } $header_end .= ""._n('Entity', 'Entities', Session::getPluralNumber())."".sprintf(__('%1$s (%2$s)'), Profile::getTypeName(Session::getPluralNumber()), + $header_end .= "".sprintf('%1$s (%2$s)', Profile::getTypeName(Session::getPluralNumber()), __('D=Dynamic, R=Recursive')); $header_end .= "
".$entname."
"; - echo ""; - echo "". - "" . - "" . - "" . - "" . - "" . - "" . + echo ""; + echo "". + "" . + "" . + "" . + "" . + "" . + "" . ""; $query = "SELECT pm.pm_task_guid, pm.taskcategories_id, pm.`is_start`, gl.name, gl.completename, gl.`comment`, pm.is_active, pm.is_subprocess FROM glpi_plugin_processmaker_taskcategories AS pm @@ -48,18 +46,18 @@ class PluginProcessmakerTaskCategory extends CommonDBTM echo ""; echo ""; - echo ""; + echo ""; echo ""; @@ -70,14 +68,14 @@ class PluginProcessmakerTaskCategory extends CommonDBTM echo ""; echo ""; @@ -94,15 +92,14 @@ class PluginProcessmakerTaskCategory extends CommonDBTM * @return nothing (display) **/ static function title(CommonGLPI $item) { - global $LANG, $CFG_GLPI; + global $CFG_GLPI; $buttons = array(); - $title = $LANG['processmaker']['config']['refreshtasklist']; + $title = __('Synchronize Task List', 'processmaker'); if (Session::haveRight('plugin_processmaker_config', UPDATE)) { - $buttons["process.form.php?refreshtask=1&id=".$item->getID()] = $LANG['processmaker']['config']['refreshtasklist']; - $title = ""; - Html::displayTitle($CFG_GLPI["root_doc"] . "/plugins/processmaker/pics/gears.png", $LANG['processmaker']['config']['refreshtasklist'], $title, + $buttons["process.form.php?refreshtask=1&id=".$item->getID()] = $title; + Html::displayTitle($CFG_GLPI["root_doc"] . "/plugins/processmaker/pics/gears.png", $title, "", $buttons); } } diff --git a/locales/cs_CZ.php b/locales/cs_CZ.php deleted file mode 100644 index f2cae50..0000000 --- a/locales/cs_CZ.php +++ /dev/null @@ -1,122 +0,0 @@ -=2 && n<=4) ? 1 : 3;\n" +"X-Poedit-KeywordsList: ;__:1,2t;_e:1,2t;_x:1c,2,3t;_n:1,2,4t;__s:1,2t;_ex:1c,2,3t;_sx:1c,2,3t;_nx:1c,2,3,5t\n" +"X-Crowdin-Project: processmaker-plugin\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /3.3.0/source.po\n" +"X-Poedit-SearchPath-0: ajax\n" +"X-Poedit-SearchPath-1: front\n" +"X-Poedit-SearchPath-2: inc\n" +"X-Poedit-SearchPath-3: install\n" +"X-Poedit-SearchPath-4: js\n" +"X-Poedit-SearchPath-5: hook.php\n" +"X-Poedit-SearchPath-6: setup.php\n" + +#: ajax/task_users.php:25 +msgid "Re-assign task to" +msgstr "Znovu přiřadit úkol" + +#: ajax/task_users.php:45 +msgid "Re-assign" +msgstr "Znovu přiřadit" + +#: front/case.form.php:35 +msgid "Case has been deleted!" +msgstr "Případ byl smazán!" + +#: front/case.form.php:37 +msgid "Unable to delete case!" +msgstr "Případ se nedaří smazat!" + +#: front/case.form.php:50 +msgid "Case has been cancelled!" +msgstr "Případ byl zrušen!" + +#: front/case.form.php:52 front/case.form.php:55 +msgid "Unable to cancel case!" +msgstr "Případ se nedaří zrušit!" + +#: front/case.form.php:76 front/case.form.php:78 inc/case.class.php:922 +msgid "Process cases" +msgstr "" + +#: front/case.php:5 front/caselink.form.php:27 front/caselink.php:5 +#: front/process.form.php:25 front/process.php:5 inc/caselink.class.php:143 +#: inc/config.class.php:50 inc/config.class.php:347 inc/process.class.php:393 +#: inc/profile.class.php:52 inc/profile.class.php:83 +msgid "ProcessMaker" +msgstr "ProcessMaker" + +#: front/case.php:14 inc/case.class.php:644 +msgid "ProcessMaker plugin is under maintenance, please retry later, thank you." +msgstr "" + +#: front/processmaker.form.php:85 +msgid "Task re-assigned!" +msgstr "Úkol znovu přiřazen!" + +#: front/processmaker.form.php:87 +msgid "Error re-assigning task: " +msgstr "Chyba při opětovném přiřazování úkolu: " + +#: front/processmaker.form.php:90 +msgid "Task already assigned to this person!" +msgstr "Úkol už je této osobě přiřazen!" + +#: front/processmaker.helpdesk.form.php:21 +msgid "Process - Case" +msgstr "Proces – případ" + +#: front/processmaker.helpdesk.form.php:24 inc/case.class.php:528 +msgid "Select the process you want to add" +msgstr "Vyberte proces který chcete spustit" + +#: hook.php:31 inc/taskcategory.class.php:98 +msgid "Synchronize Task List" +msgstr "Synchronizovat seznam úkolů" + +#: hook.php:158 inc/case.class.php:77 +msgid "Case" +msgstr "Případ" + +#: hook.php:158 inc/case.class.php:509 inc/case.class.php:966 +msgid "Status" +msgstr "Stav" + +#: inc/case.class.php:23 inc/case.class.php:85 inc/case.class.php:87 +msgid "Process case" +msgid_plural "Process cases" +msgstr[0] "Process case" +msgstr[1] "Process cases" +msgstr[2] "" +msgstr[3] "" + +#: inc/case.class.php:285 +msgid "Case properties" +msgstr "" + +#: inc/case.class.php:287 inc/case.class.php:507 inc/case.class.php:940 +#: inc/process.class.php:524 +msgid "Process" +msgstr "Proces" + +#: inc/case.class.php:290 +msgid "Case title" +msgstr "" + +#: inc/case.class.php:293 +msgid "Case number" +msgstr "" + +#: inc/case.class.php:296 +msgid "Case status" +msgstr "" + +#: inc/case.class.php:299 +msgid "Case guid" +msgstr "" + +#: inc/case.class.php:302 +msgid "Creator" +msgstr "" + +#: inc/case.class.php:305 +msgid "Creation date" +msgstr "" + +#: inc/case.class.php:308 +msgid "Last update" +msgstr "" + +#: inc/case.class.php:323 +msgid "Current task(s) properties" +msgstr "" + +#: inc/case.class.php:327 +msgid "Task" +msgstr "" + +#: inc/case.class.php:328 +msgid "Task guid" +msgstr "" + +#: inc/case.class.php:329 +msgid "Current user" +msgstr "" + +#: inc/case.class.php:330 +msgid "Task delegation date" +msgstr "" + +#: inc/case.class.php:338 +msgid "To be claimed" +msgstr "" + +#: inc/case.class.php:407 +msgid "Case item" +msgstr "" + +#: inc/case.class.php:429 +msgid "Case cancellation" +msgstr "" + +#: inc/case.class.php:430 +msgid "Cancel case" +msgstr "" + +#: inc/case.class.php:434 +msgid "Confirm cancellation?" +msgstr "" + +#: inc/case.class.php:434 inc/profile.class.php:23 +msgid "Cancel" +msgstr "Storno" + +#: inc/case.class.php:455 +msgid "Case deletion" +msgstr "" + +#: inc/case.class.php:456 +msgid "Delete case" +msgstr "" + +#: inc/case.class.php:508 inc/case.class.php:933 +msgid "Title" +msgstr "" + +#: inc/case.class.php:510 inc/case.class.php:974 +msgid "Subcase of" +msgstr "" + +#: inc/case.class.php:525 +msgid "Add a new case" +msgstr "" + +#: inc/case.class.php:899 +msgctxt "case_status" +msgid "Draft" +msgstr "Koncept" + +#: inc/case.class.php:900 +msgctxt "case_status" +msgid "To do" +msgstr "Dodělat" + +#: inc/case.class.php:901 +msgctxt "case_status" +msgid "Completed" +msgstr "Dokončeno" + +#: inc/case.class.php:902 +msgctxt "case_status" +msgid "Cancelled" +msgstr "Zrušeno" + +#: inc/case.class.php:926 +msgid "ID" +msgstr "" + +#: inc/case.class.php:953 +msgid "Item" +msgstr "" + +#: inc/case.class.php:960 +msgid "Item entity" +msgstr "" + +#: inc/casechangelog.class.php:35 +msgid "Change log" +msgstr "Zobrazit: záznam změn" + +#: inc/casedynaform.class.php:80 +msgid "Dynaforms" +msgstr "Zobrazit: dynamické formuláře" + +#: inc/casehistory.class.php:35 +msgid "History" +msgstr "Zobrazit: historie případu" + +#: inc/caselink.class.php:51 +msgid "Case-links" +msgstr "Propojení případů" + +#: inc/caselink.class.php:53 +msgid "Case-link" +msgstr "Propojení případu" + +#: inc/caselink.class.php:75 inc/caselink.class.php:165 +msgid "External data" +msgstr "" + +#: inc/caselink.class.php:80 inc/caselink.class.php:171 +msgid "Self" +msgstr "" + +#: inc/caselink.class.php:85 inc/caselink.class.php:189 +msgid "Source task GUID" +msgstr "" + +#: inc/caselink.class.php:93 inc/caselink.class.php:195 +msgid "Target task GUID" +msgstr "" + +#: inc/caselink.class.php:101 inc/caselink.class.php:207 +msgid "Target process GUID" +msgstr "" + +#: inc/caselink.class.php:110 inc/caselink.class.php:201 +msgid "Target dynaform GUID" +msgstr "" + +#: inc/caselink.class.php:115 inc/caselink.class.php:213 +msgid "Source condition" +msgstr "" + +#: inc/caselink.class.php:121 inc/caselink.class.php:177 +msgid "Claim target task" +msgstr "" + +#: inc/caselink.class.php:126 inc/caselink.class.php:183 +msgid "External application JSON config" +msgstr "" + +#: inc/casemap.class.php:43 +msgid "Map" +msgstr "Zobrazit: mapa případu" + +#: inc/config.class.php:41 +msgid "ProcessMaker setup" +msgstr "Nastavení ProcessMaker" + +#: inc/config.class.php:156 +msgid "Server URL (must be in same domain than GLPI)" +msgstr "URL adresa serveru (je třeba, aby byla ze stejné domény jako GLPI)" + +#: inc/config.class.php:161 +msgid "Common domain with GLPI" +msgstr "Společná doména s GLPI" + +#: inc/config.class.php:190 +msgid "None!" +msgstr "Žádná!" + +#: inc/config.class.php:199 +msgid "Workspace Name" +msgstr "Název pracovního prostoru" + +#: inc/config.class.php:204 +msgid "Server administrator name" +msgstr "Uživatelské jméno správce serveru" + +#: inc/config.class.php:209 +msgid "Server administrator password" +msgstr "Heslo správce serveru" + +#: inc/config.class.php:215 inc/config.class.php:255 +msgid "Connection status" +msgstr "Stav spojení" + +#: inc/config.class.php:231 +msgid "SQL server setup" +msgstr "Nastavení SQL serveru" + +#: inc/config.class.php:234 +msgid "SQL server (MariaDB or MySQL)" +msgstr "" + +#: inc/config.class.php:239 +msgid "Database name" +msgstr "" + +#: inc/config.class.php:244 +msgid "SQL user" +msgstr "" + +#: inc/config.class.php:249 +msgid "SQL password" +msgstr "" + +#: inc/config.class.php:266 +msgid "Theme Name" +msgstr "Název motivu vzhledu" + +#: inc/config.class.php:272 +msgid "Main Task Category (edit to change name)" +msgstr "Hlavní kategorie úkolu (pro změnu názvu upravte)" + +#: inc/config.class.php:279 +msgid "Task Writer (edit to change name)" +msgstr "Úkol zapsal (pro změnu jména upravte)" + +#: inc/config.class.php:299 +msgid "Group in ProcessMaker which will contain all GLPI users" +msgstr "Skupina v ProcessMaker která bude obsahovat všechny uživatele z GLPI" + +#: inc/config.class.php:323 +msgid "Processmaker system information" +msgstr "" + +#: inc/config.class.php:327 inc/config.class.php:337 +msgid "Version" +msgstr "" + +#: inc/config.class.php:328 +msgid "Web server" +msgstr "" + +#: inc/config.class.php:329 +msgid "Server name" +msgstr "" + +#: inc/config.class.php:330 +msgid "PHP version" +msgstr "" + +#: inc/config.class.php:331 +msgid "DB version" +msgstr "" + +#: inc/config.class.php:332 +msgid "DB server IP" +msgstr "" + +#: inc/config.class.php:333 +msgid "DB name" +msgstr "" + +#: inc/config.class.php:334 +msgid "User browser" +msgstr "" + +#: inc/config.class.php:335 +msgid "User IP" +msgstr "" + +#: inc/config.class.php:337 +msgid "Not yet!" +msgstr "" + +#: inc/process.class.php:350 +msgid "Synchronize Process List" +msgstr "Synchronizovat seznam procesů" + +#: inc/process.class.php:427 inc/process.class.php:565 +msgid "Process GUID" +msgstr "Nikde se neopakující identifikátor procesu" + +#: inc/process.class.php:433 +msgid "Project type" +msgstr "Typ projektu" + +#: inc/process.class.php:439 +msgid "Hide case number and title" +msgstr "Skrýt číslo a titulek případu" + +#: inc/process.class.php:445 +msgid "Insert Task Category" +msgstr "Vložit kategorii úkolu" + +#: inc/process.class.php:457 inc/process.class.php:585 +msgid "Ticket type (self-service)" +msgstr "Typ požadavku (samoobslužné)" + +#: inc/process.class.php:495 +msgctxt "process_type" +msgid "Classic" +msgstr "Klasický" + +#: inc/process.class.php:496 +msgctxt "process_type" +msgid "BPMN" +msgstr "BPMN" + +#: inc/process.class.php:522 +msgid "Processes" +msgstr "Procesy" + +#: inc/process.class.php:575 +msgid "Hide case number and title in task descriptions" +msgstr "V popisech úkolů skrýt číslo a titulek" + +#: inc/process.class.php:580 +msgid "Insert Task Category comments in Task Description" +msgstr "Vložit komentáře kategorie úkolu do jeho popisu" + +#: inc/process.class.php:603 +msgid "ITIL Category (self-service)" +msgstr "ITIL kategorie (samoobslužné)" + +#: inc/process.class.php:632 +msgid "Project type (to be changed if not up-to-date)" +msgstr "Typ projektu (pokud není aktuální, bude změněno)" + +#: inc/process_profile.class.php:26 inc/process_profile.class.php:45 +msgid "Authorizations" +msgstr "Pověření" + +#: inc/process_profile.class.php:179 +msgid "Authorization not added: already existing!" +msgstr "" + +#: inc/processmaker.class.php:116 inc/processmaker.class.php:118 +msgctxt "errors" +msgid "Error creating case!" +msgstr "Chyba při vytváření případu!" + +#: inc/processmaker.class.php:117 +msgctxt "errors" +msgid "Can't create case: no rights for it!" +msgstr "Případ se nedaří vytvořit: nedostatečná oprávnění!" + +#: inc/processmaker.class.php:984 +msgid "Syncs GLPI users and groups into ProcessMaker." +msgstr "Synchronizuje uživatele a skupiny z GLPI do ProcessMaker." + +#: inc/processmaker.class.php:986 +msgid "Cleaning of orphan cases." +msgstr "Čištění osiřelých případů." + +#: inc/processmaker.class.php:986 +msgid "Number of days to keep orphan cases" +msgstr "Po kolik dnů ponechávat osiřelé případy" + +#: inc/processmaker.class.php:988 +msgid "To apply task actions between cases." +msgstr "Pro uplatnění akcí úkolu mezi případy." + +#: inc/processmaker.class.php:1696 +msgid "Case title: " +msgstr "Titulek případu: " + +#: inc/processmaker.class.php:2178 +msgid "A 'Case' is running!" +msgstr "Případ je v běhu!" + +#: inc/processmaker.class.php:2179 +msgid "You must manage it first (see 'Process - Case' tab)!" +msgstr "Nejprve je třeba toto spravovat (viz panel „Proces – případ“)!" + +#: inc/profile.class.php:17 +msgid "Process configuration" +msgstr "Nastavení procesu" + +#: inc/profile.class.php:21 +msgid "Cases" +msgstr "" + +#: inc/task.class.php:25 +msgid "Process case task" +msgid_plural "Process case tasks" +msgstr[0] "Process case task" +msgstr[1] "Process case tasks" +msgstr[2] "" +msgstr[3] "" + +#: inc/taskcategory.class.php:21 inc/taskcategory.class.php:31 +msgid "Task List" +msgstr "Seznam úkolů" + +#: inc/taskcategory.class.php:32 +msgid "Task name" +msgstr "Název úkolu" + +#: inc/taskcategory.class.php:34 inc/taskcategory.class.php:60 +msgid "Start" +msgstr "Spustit" + +#: inc/taskcategory.class.php:35 +msgid "Task GUID" +msgstr "Nikde se neopakující identifikátor úkolu" + +#: inc/taskcategory.class.php:38 inc/taskcategory.class.php:78 +msgid "Sub-process" +msgstr "" + +#~ msgid "Plugin is under maintenance, please retry later, thank you." +#~ msgstr "Plugin is under maintenance, please retry later, thank you." diff --git a/locales/en_GB.php b/locales/en_GB.php deleted file mode 100644 index bb3d5a1..0000000 --- a/locales/en_GB.php +++ /dev/null @@ -1,122 +0,0 @@ - 1);\n" +"X-Poedit-KeywordsList: ;__:1,2t;_e:1,2t;_x:1c,2,3t;_n:1,2,4t;__s:1,2t;" +"_ex:1c,2,3t;_sx:1c,2,3t;_nx:1c,2,3,5t\n" +"X-Crowdin-Project: processmaker-plugin\n" +"X-Crowdin-Language: fr\n" +"X-Crowdin-File: /3.3.0/source.po\n" +"X-Poedit-SearchPath-0: ajax\n" +"X-Poedit-SearchPath-1: front\n" +"X-Poedit-SearchPath-2: inc\n" +"X-Poedit-SearchPath-3: install\n" +"X-Poedit-SearchPath-4: js\n" +"X-Poedit-SearchPath-5: hook.php\n" +"X-Poedit-SearchPath-6: setup.php\n" + +#: ajax/task_users.php:25 +msgid "Re-assign task to" +msgstr "Ré-affecter tâche à" + +#: ajax/task_users.php:45 +msgid "Re-assign" +msgstr "Ré-affecter" + +#: front/case.form.php:35 +msgid "Case has been deleted!" +msgstr "Le cas a été effacé !" + +#: front/case.form.php:37 +msgid "Unable to delete case!" +msgstr "Impossible d'effacer le cas !" + +#: front/case.form.php:50 +msgid "Case has been cancelled!" +msgstr "Le cas a été annulé !" + +#: front/case.form.php:52 front/case.form.php:55 +msgid "Unable to cancel case!" +msgstr "Impossible d'annuler le cas !" + +#: front/case.form.php:76 front/case.form.php:78 inc/case.class.php:922 +msgid "Process cases" +msgstr "Cas des processus" + +#: front/case.php:5 front/caselink.form.php:27 front/caselink.php:5 +#: front/process.form.php:25 front/process.php:5 inc/caselink.class.php:143 +#: inc/config.class.php:50 inc/config.class.php:347 inc/process.class.php:393 +#: inc/profile.class.php:52 inc/profile.class.php:83 +msgid "ProcessMaker" +msgstr "ProcessMaker" + +#: front/case.php:14 inc/case.class.php:644 +msgid "" +"ProcessMaker plugin is under maintenance, please retry later, thank you." +msgstr "" +"Le plugin ProcessMaker est en maintenance, veuillez ré-essayer plus tard, " +"merci." + +#: front/processmaker.form.php:85 +msgid "Task re-assigned!" +msgstr "Tâche ré-affectée !" + +#: front/processmaker.form.php:87 +msgid "Error re-assigning task: " +msgstr "Impossible de re-affecter cette tâche : " + +#: front/processmaker.form.php:90 +msgid "Task already assigned to this person!" +msgstr "Tâche déjà affectée à cette personne !" + +#: front/processmaker.helpdesk.form.php:21 +msgid "Process - Case" +msgstr "Processus - Cas" + +#: front/processmaker.helpdesk.form.php:24 inc/case.class.php:528 +msgid "Select the process you want to add" +msgstr "Choisir le processus à démarrer" + +#: hook.php:31 inc/taskcategory.class.php:98 +msgid "Synchronize Task List" +msgstr "Synchroniser la liste des Tâches" + +#: hook.php:158 inc/case.class.php:77 +msgid "Case" +msgstr "Cas" + +#: hook.php:158 inc/case.class.php:509 inc/case.class.php:966 +msgid "Status" +msgstr "Statut" + +#: inc/case.class.php:23 inc/case.class.php:85 inc/case.class.php:87 +msgid "Process case" +msgid_plural "Process cases" +msgstr[0] "Cas du processus" +msgstr[1] "Cas des processus" + +#: inc/case.class.php:285 +msgid "Case properties" +msgstr "Propriétés du cas" + +#: inc/case.class.php:287 inc/case.class.php:507 inc/case.class.php:940 +#: inc/process.class.php:524 +msgid "Process" +msgstr "Processus" + +#: inc/case.class.php:290 +msgid "Case title" +msgstr "Titre du cas" + +#: inc/case.class.php:293 +msgid "Case number" +msgstr "Numéro du cas" + +#: inc/case.class.php:296 +msgid "Case status" +msgstr "Statut du cas" + +#: inc/case.class.php:299 +msgid "Case guid" +msgstr "Guid du cas" + +#: inc/case.class.php:302 +msgid "Creator" +msgstr "Créateur" + +#: inc/case.class.php:305 +msgid "Creation date" +msgstr "Date de création" + +#: inc/case.class.php:308 +msgid "Last update" +msgstr "Dernière mise à jour" + +#: inc/case.class.php:323 +msgid "Current task(s) properties" +msgstr "Propriétés des tâches en cours" + +#: inc/case.class.php:327 +msgid "Task" +msgstr "Tâche" + +#: inc/case.class.php:328 +msgid "Task guid" +msgstr "Guid de la tâche" + +#: inc/case.class.php:329 +msgid "Current user" +msgstr "Utilisateur actuel" + +#: inc/case.class.php:330 +msgid "Task delegation date" +msgstr "Date de délégation de tâche" + +#: inc/case.class.php:338 +msgid "To be claimed" +msgstr "A réclamer" + +#: inc/case.class.php:407 +msgid "Case item" +msgstr "Item du cas" + +#: inc/case.class.php:429 +msgid "Case cancellation" +msgstr "Annulation du cas" + +#: inc/case.class.php:430 +msgid "Cancel case" +msgstr "Annuler cas" + +#: inc/case.class.php:434 +msgid "Confirm cancellation?" +msgstr "Confirmer l’annulation ?" + +#: inc/case.class.php:434 inc/profile.class.php:23 +msgid "Cancel" +msgstr "Annuler" + +#: inc/case.class.php:455 +msgid "Case deletion" +msgstr "Suppression du cas" + +#: inc/case.class.php:456 +msgid "Delete case" +msgstr "Supprimer le cas" + +#: inc/case.class.php:508 inc/case.class.php:933 +msgid "Title" +msgstr "Titre" + +#: inc/case.class.php:510 inc/case.class.php:974 +msgid "Subcase of" +msgstr "Sous-cas de" + +#: inc/case.class.php:525 +msgid "Add a new case" +msgstr "Ajouter un nouveau cas" + +#: inc/case.class.php:899 +msgctxt "case_status" +msgid "Draft" +msgstr "Brouillon" + +#: inc/case.class.php:900 +msgctxt "case_status" +msgid "To do" +msgstr "A faire" + +#: inc/case.class.php:901 +msgctxt "case_status" +msgid "Completed" +msgstr "Terminé" + +#: inc/case.class.php:902 +msgctxt "case_status" +msgid "Cancelled" +msgstr "Annulé" + +#: inc/case.class.php:926 +msgid "ID" +msgstr "ID" + +#: inc/case.class.php:953 +msgid "Item" +msgstr "Item" + +#: inc/case.class.php:960 +msgid "Item entity" +msgstr "Entité de l'item" + +#: inc/casechangelog.class.php:35 +msgid "Change log" +msgstr "Evolution" + +#: inc/casedynaform.class.php:80 +msgid "Dynaforms" +msgstr "DynaForms" + +#: inc/casehistory.class.php:35 +msgid "History" +msgstr "Historique" + +#: inc/caselink.class.php:51 +msgid "Case-links" +msgstr "Liens-cas" + +#: inc/caselink.class.php:53 +msgid "Case-link" +msgstr "Lien-cas" + +#: inc/caselink.class.php:75 inc/caselink.class.php:165 +msgid "External data" +msgstr "Données externes" + +#: inc/caselink.class.php:80 inc/caselink.class.php:171 +msgid "Self" +msgstr "Self" + +#: inc/caselink.class.php:85 inc/caselink.class.php:189 +msgid "Source task GUID" +msgstr "GUID de la tâche source" + +#: inc/caselink.class.php:93 inc/caselink.class.php:195 +msgid "Target task GUID" +msgstr "GUID de la tâche cible" + +#: inc/caselink.class.php:101 inc/caselink.class.php:207 +msgid "Target process GUID" +msgstr "GUID du Processus cible" + +#: inc/caselink.class.php:110 inc/caselink.class.php:201 +msgid "Target dynaform GUID" +msgstr "GUID du dynaform cible" + +#: inc/caselink.class.php:115 inc/caselink.class.php:213 +msgid "Source condition" +msgstr "Condition d'activation du lien" + +#: inc/caselink.class.php:121 inc/caselink.class.php:177 +msgid "Claim target task" +msgstr "Tâche cible 'à réclamer'" + +#: inc/caselink.class.php:126 inc/caselink.class.php:183 +msgid "External application JSON config" +msgstr "Configuration JSON de l'application externe" + +#: inc/casemap.class.php:43 +msgid "Map" +msgstr "Carte" + +#: inc/config.class.php:41 +msgid "ProcessMaker setup" +msgstr "Configuration du serveur ProcessMaker" + +#: inc/config.class.php:156 +msgid "Server URL (must be in same domain than GLPI)" +msgstr "URL du serveur (doit être dans le même domaine que GLPI)" + +#: inc/config.class.php:161 +msgid "Common domain with GLPI" +msgstr "Domaine commun avec GLPI" + +#: inc/config.class.php:190 +msgid "None!" +msgstr "Aucun !" + +#: inc/config.class.php:199 +msgid "Workspace Name" +msgstr "Nom du Workspace" + +#: inc/config.class.php:204 +msgid "Server administrator name" +msgstr "Non de l'administreur du server ProcessMaker" + +#: inc/config.class.php:209 +msgid "Server administrator password" +msgstr "Mot de passe de l'administrateur du serveur ProcessMaker" + +#: inc/config.class.php:215 inc/config.class.php:255 +msgid "Connection status" +msgstr "Status de la connexion" + +#: inc/config.class.php:231 +msgid "SQL server setup" +msgstr "Configuration du serveur SQL" + +#: inc/config.class.php:234 +msgid "SQL server (MariaDB or MySQL)" +msgstr "SQL server (MariaDB ou MySQL)" + +#: inc/config.class.php:239 +msgid "Database name" +msgstr "Nom de la base de données" + +#: inc/config.class.php:244 +msgid "SQL user" +msgstr "Utilisateur SQL" + +#: inc/config.class.php:249 +msgid "SQL password" +msgstr "Mot de passe SQL" + +#: inc/config.class.php:266 +msgid "Theme Name" +msgstr "Nom du thème" + +#: inc/config.class.php:272 +msgid "Main Task Category (edit to change name)" +msgstr "Catégorie principale des tâches (éditer pour changer le nom)" + +#: inc/config.class.php:279 +msgid "Task Writer (edit to change name)" +msgstr "Auteur des tâches (éditer pour changer le nom)" + +#: inc/config.class.php:299 +msgid "Group in ProcessMaker which will contain all GLPI users" +msgstr "Groupe dans ProcessMaker qui contiendra les utilisateurs de GLPI" + +#: inc/config.class.php:323 +msgid "Processmaker system information" +msgstr "Informations système du serveur ProcessMaker" + +#: inc/config.class.php:327 inc/config.class.php:337 +msgid "Version" +msgstr "Version" + +#: inc/config.class.php:328 +msgid "Web server" +msgstr "Serveur web" + +#: inc/config.class.php:329 +msgid "Server name" +msgstr "Nom du serveur" + +#: inc/config.class.php:330 +msgid "PHP version" +msgstr "Version de PHP" + +#: inc/config.class.php:331 +msgid "DB version" +msgstr "Version de la Db" + +#: inc/config.class.php:332 +msgid "DB server IP" +msgstr "IP du serveur DB" + +#: inc/config.class.php:333 +msgid "DB name" +msgstr "Nom de la BD" + +#: inc/config.class.php:334 +msgid "User browser" +msgstr "Navigateur de l’utilisateur" + +#: inc/config.class.php:335 +msgid "User IP" +msgstr "IP de l'utilisateur" + +#: inc/config.class.php:337 +msgid "Not yet!" +msgstr "Pas encore !" + +#: inc/process.class.php:350 +msgid "Synchronize Process List" +msgstr "Synchroniser la liste des processus" + +#: inc/process.class.php:427 inc/process.class.php:565 +msgid "Process GUID" +msgstr "GUID du Processus" + +#: inc/process.class.php:433 +msgid "Project type" +msgstr "Type de projet" + +#: inc/process.class.php:439 +msgid "Hide case number and title" +msgstr "Masquer numéro et titre des cas" + +#: inc/process.class.php:445 +msgid "Insert Task Category" +msgstr "Insérer la catégorie des tâches" + +#: inc/process.class.php:457 inc/process.class.php:585 +msgid "Ticket type (self-service)" +msgstr "Type de ticket (self-service)" + +#: inc/process.class.php:495 +msgctxt "process_type" +msgid "Classic" +msgstr "Classique" + +#: inc/process.class.php:496 +msgctxt "process_type" +msgid "BPMN" +msgstr "BPMN" + +#: inc/process.class.php:522 +msgid "Processes" +msgstr "Processus" + +#: inc/process.class.php:575 +msgid "Hide case number and title in task descriptions" +msgstr "Masquer numéro et titre des cas dans les descriptions des tâches" + +#: inc/process.class.php:580 +msgid "Insert Task Category comments in Task Description" +msgstr "" +"Insérer les commentaires des Catégories de Tâches dans les descriptions des " +"Tâches" + +#: inc/process.class.php:603 +msgid "ITIL Category (self-service)" +msgstr "Catégorie ITIL (self-service)" + +#: inc/process.class.php:632 +msgid "Project type (to be changed if not up-to-date)" +msgstr "Type de projet (à modifier si pas à jour)" + +#: inc/process_profile.class.php:26 inc/process_profile.class.php:45 +msgid "Authorizations" +msgstr "Autorisations" + +#: inc/process_profile.class.php:179 +msgid "Authorization not added: already existing!" +msgstr "Autorisation non ajoutée : déjà existante !" + +#: inc/processmaker.class.php:116 inc/processmaker.class.php:118 +msgctxt "errors" +msgid "Error creating case!" +msgstr "Erreur à la création du cas !" + +#: inc/processmaker.class.php:117 +msgctxt "errors" +msgid "Can't create case: no rights for it!" +msgstr "Impossible de créer le cas : pas de droits pour cela !" + +#: inc/processmaker.class.php:984 +msgid "Syncs GLPI users and groups into ProcessMaker." +msgstr "Synchronisation des utilisateurs GLPI et des groups avec ProcessMaker." + +#: inc/processmaker.class.php:986 +msgid "Cleaning of orphan cases." +msgstr "Nettoyage des cas orphelins." + +#: inc/processmaker.class.php:986 +msgid "Number of days to keep orphan cases" +msgstr "Nombre de jours avant nettoyage des cas orphelins" + +#: inc/processmaker.class.php:988 +msgid "To apply task actions between cases." +msgstr "Pour appliquer des actions de tâches entre cas." + +#: inc/processmaker.class.php:1696 +msgid "Case title: " +msgstr "Titre du cas : " + +#: inc/processmaker.class.php:2178 +msgid "A 'Case' is running!" +msgstr "Un 'Cas' est en cours !" + +#: inc/processmaker.class.php:2179 +msgid "You must manage it first (see 'Process - Case' tab)!" +msgstr "Vous devez d'abord le terminer (voir onglet 'Processus - Cas') !" + +#: inc/profile.class.php:17 +msgid "Process configuration" +msgstr "Configuration des Processus" + +#: inc/profile.class.php:21 +msgid "Cases" +msgstr "Cas" + +#: inc/task.class.php:25 +msgid "Process case task" +msgid_plural "Process case tasks" +msgstr[0] "Tâche d'un cas" +msgstr[1] "Tâches d'un cas" + +#: inc/taskcategory.class.php:21 inc/taskcategory.class.php:31 +msgid "Task List" +msgstr "Liste des tâches" + +#: inc/taskcategory.class.php:32 +msgid "Task name" +msgstr "Nom de la Tâche" + +#: inc/taskcategory.class.php:34 inc/taskcategory.class.php:60 +msgid "Start" +msgstr "Démarrer" + +#: inc/taskcategory.class.php:35 +msgid "Task GUID" +msgstr "GUID de la Tâche" + +#: inc/taskcategory.class.php:38 inc/taskcategory.class.php:78 +msgid "Sub-process" +msgstr "Sous-processus" + +#~ msgid "Plugin is under maintenance, please retry later, thank you." +#~ msgstr "Plugin is under maintenance, please retry later, thank you." diff --git a/locales/source.po b/locales/source.po new file mode 100644 index 0000000..5ccfbe0 --- /dev/null +++ b/locales/source.po @@ -0,0 +1,544 @@ +msgid "" +msgstr "" +"Project-Id-Version: Processmaker plugin 3.3.0\n" +"POT-Creation-Date: 2018-08-02 14:42+0200\n" +"PO-Revision-Date: 2018-08-02 16:56+0200\n" +"Last-Translator: tomolimo\n" +"Language-Team: en_GB\n" +"Language: en_GB\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.1.1\n" +"X-Poedit-Basepath: ..\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-KeywordsList: ;__:1,2t;_e:1,2t;_x:1c,2,3t;_n:1,2,4t;__s:1,2t;" +"_ex:1c,2,3t;_sx:1c,2,3t;_nx:1c,2,3,5t\n" +"X-Poedit-SearchPath-0: ajax\n" +"X-Poedit-SearchPath-1: front\n" +"X-Poedit-SearchPath-2: inc\n" +"X-Poedit-SearchPath-3: install\n" +"X-Poedit-SearchPath-4: js\n" +"X-Poedit-SearchPath-5: hook.php\n" +"X-Poedit-SearchPath-6: setup.php\n" + +#: ajax/task_users.php:25 +msgid "Re-assign task to" +msgstr "Re-assign task to" + +#: ajax/task_users.php:45 +msgid "Re-assign" +msgstr "Re-assign" + +#: front/case.form.php:35 +msgid "Case has been deleted!" +msgstr "Case has been deleted!" + +#: front/case.form.php:37 +msgid "Unable to delete case!" +msgstr "Unable to delete case!" + +#: front/case.form.php:50 +msgid "Case has been cancelled!" +msgstr "Case has been cancelled!" + +#: front/case.form.php:52 front/case.form.php:55 +msgid "Unable to cancel case!" +msgstr "Unable to cancel case!" + +#: front/case.form.php:76 front/case.form.php:78 inc/case.class.php:922 +msgid "Process cases" +msgstr "Process cases" + +#: front/case.php:5 front/caselink.form.php:27 front/caselink.php:5 +#: front/process.form.php:25 front/process.php:5 inc/caselink.class.php:143 +#: inc/config.class.php:50 inc/config.class.php:347 inc/process.class.php:393 +#: inc/profile.class.php:52 inc/profile.class.php:83 +msgid "ProcessMaker" +msgstr "ProcessMaker" + +#: front/case.php:14 inc/case.class.php:644 +msgid "" +"ProcessMaker plugin is under maintenance, please retry later, thank you." +msgstr "" +"ProcessMaker plugin is under maintenance, please retry later, thank you." + +#: front/processmaker.form.php:85 +msgid "Task re-assigned!" +msgstr "Task re-assigned!" + +#: front/processmaker.form.php:87 +msgid "Error re-assigning task: " +msgstr "Error re-assigning task: " + +#: front/processmaker.form.php:90 +msgid "Task already assigned to this person!" +msgstr "Task already assigned to this person!" + +#: front/processmaker.helpdesk.form.php:21 +msgid "Process - Case" +msgstr "Process - Case" + +#: front/processmaker.helpdesk.form.php:24 inc/case.class.php:528 +msgid "Select the process you want to add" +msgstr "Select the process you want to add" + +#: hook.php:31 inc/taskcategory.class.php:98 +msgid "Synchronize Task List" +msgstr "Synchronize Task List" + +#: hook.php:158 inc/case.class.php:77 +msgid "Case" +msgstr "Case" + +#: hook.php:158 inc/case.class.php:509 inc/case.class.php:966 +msgid "Status" +msgstr "Status" + +#: inc/case.class.php:23 inc/case.class.php:85 inc/case.class.php:87 +msgid "Process case" +msgid_plural "Process cases" +msgstr[0] "Process case" +msgstr[1] "Process cases" + +#: inc/case.class.php:285 +msgid "Case properties" +msgstr "Case properties" + +#: inc/case.class.php:287 inc/case.class.php:507 inc/case.class.php:940 +#: inc/process.class.php:524 +msgid "Process" +msgstr "Process" + +#: inc/case.class.php:290 +msgid "Case title" +msgstr "Case title" + +#: inc/case.class.php:293 +msgid "Case number" +msgstr "Case number" + +#: inc/case.class.php:296 +msgid "Case status" +msgstr "Case status" + +#: inc/case.class.php:299 +msgid "Case guid" +msgstr "Case guid" + +#: inc/case.class.php:302 +msgid "Creator" +msgstr "Creator" + +#: inc/case.class.php:305 +msgid "Creation date" +msgstr "Creation date" + +#: inc/case.class.php:308 +msgid "Last update" +msgstr "Last update" + +#: inc/case.class.php:323 +msgid "Current task(s) properties" +msgstr "Current task(s) properties" + +#: inc/case.class.php:327 +msgid "Task" +msgstr "Task" + +#: inc/case.class.php:328 +msgid "Task guid" +msgstr "Task guid" + +#: inc/case.class.php:329 +msgid "Current user" +msgstr "Current user" + +#: inc/case.class.php:330 +msgid "Task delegation date" +msgstr "Task delegation date" + +#: inc/case.class.php:338 +msgid "To be claimed" +msgstr "To be claimed" + +#: inc/case.class.php:407 +msgid "Case item" +msgstr "Case item" + +#: inc/case.class.php:429 +msgid "Case cancellation" +msgstr "Case cancellation" + +#: inc/case.class.php:430 +msgid "Cancel case" +msgstr "Cancel case" + +#: inc/case.class.php:434 +msgid "Confirm cancellation?" +msgstr "Confirm cancellation?" + +#: inc/case.class.php:434 inc/profile.class.php:23 +msgid "Cancel" +msgstr "Cancel" + +#: inc/case.class.php:455 +msgid "Case deletion" +msgstr "Case deletion" + +#: inc/case.class.php:456 +msgid "Delete case" +msgstr "Delete case" + +#: inc/case.class.php:508 inc/case.class.php:933 +msgid "Title" +msgstr "Title" + +#: inc/case.class.php:510 inc/case.class.php:974 +msgid "Subcase of" +msgstr "Subcase of" + +#: inc/case.class.php:525 +msgid "Add a new case" +msgstr "Add a new case" + +#: inc/case.class.php:899 +msgctxt "case_status" +msgid "Draft" +msgstr "Draft" + +#: inc/case.class.php:900 +msgctxt "case_status" +msgid "To do" +msgstr "To do" + +#: inc/case.class.php:901 +msgctxt "case_status" +msgid "Completed" +msgstr "Completed" + +#: inc/case.class.php:902 +msgctxt "case_status" +msgid "Cancelled" +msgstr "Cancelled" + +#: inc/case.class.php:926 +msgid "ID" +msgstr "ID" + +#: inc/case.class.php:953 +msgid "Item" +msgstr "Item" + +#: inc/case.class.php:960 +msgid "Item entity" +msgstr "Item entity" + +#: inc/casechangelog.class.php:35 +msgid "Change log" +msgstr "Change log" + +#: inc/casedynaform.class.php:80 +msgid "Dynaforms" +msgstr "Dynaforms" + +#: inc/casehistory.class.php:35 +msgid "History" +msgstr "History" + +#: inc/caselink.class.php:51 +msgid "Case-links" +msgstr "Case-links" + +#: inc/caselink.class.php:53 +msgid "Case-link" +msgstr "Case-link" + +#: inc/caselink.class.php:75 inc/caselink.class.php:165 +msgid "External data" +msgstr "External data" + +#: inc/caselink.class.php:80 inc/caselink.class.php:171 +msgid "Self" +msgstr "Self" + +#: inc/caselink.class.php:85 inc/caselink.class.php:189 +msgid "Source task GUID" +msgstr "Source task GUID" + +#: inc/caselink.class.php:93 inc/caselink.class.php:195 +msgid "Target task GUID" +msgstr "Target task GUID" + +#: inc/caselink.class.php:101 inc/caselink.class.php:207 +msgid "Target process GUID" +msgstr "Target process GUID" + +#: inc/caselink.class.php:110 inc/caselink.class.php:201 +msgid "Target dynaform GUID" +msgstr "Target dynaform GUID" + +#: inc/caselink.class.php:115 inc/caselink.class.php:213 +msgid "Source condition" +msgstr "Source condition" + +#: inc/caselink.class.php:121 inc/caselink.class.php:177 +msgid "Claim target task" +msgstr "Claim target task" + +#: inc/caselink.class.php:126 inc/caselink.class.php:183 +msgid "External application JSON config" +msgstr "External application JSON config" + +#: inc/casemap.class.php:43 +msgid "Map" +msgstr "Map" + +#: inc/config.class.php:41 +msgid "ProcessMaker setup" +msgstr "ProcessMaker setup" + +#: inc/config.class.php:156 +msgid "Server URL (must be in same domain than GLPI)" +msgstr "Server URL (must be in same domain than GLPI)" + +#: inc/config.class.php:161 +msgid "Common domain with GLPI" +msgstr "Common domain with GLPI" + +#: inc/config.class.php:190 +msgid "None!" +msgstr "None!" + +#: inc/config.class.php:199 +msgid "Workspace Name" +msgstr "Workspace Name" + +#: inc/config.class.php:204 +msgid "Server administrator name" +msgstr "Server administrator name" + +#: inc/config.class.php:209 +msgid "Server administrator password" +msgstr "Server administrator password" + +#: inc/config.class.php:215 inc/config.class.php:255 +msgid "Connection status" +msgstr "Connection status" + +#: inc/config.class.php:231 +msgid "SQL server setup" +msgstr "SQL server setup" + +#: inc/config.class.php:234 +msgid "SQL server (MariaDB or MySQL)" +msgstr "SQL server (MariaDB or MySQL)" + +#: inc/config.class.php:239 +msgid "Database name" +msgstr "Database name" + +#: inc/config.class.php:244 +msgid "SQL user" +msgstr "SQL user" + +#: inc/config.class.php:249 +msgid "SQL password" +msgstr "SQL password" + +#: inc/config.class.php:266 +msgid "Theme Name" +msgstr "Theme Name" + +#: inc/config.class.php:272 +msgid "Main Task Category (edit to change name)" +msgstr "Main Task Category (edit to change name)" + +#: inc/config.class.php:279 +msgid "Task Writer (edit to change name)" +msgstr "Task Writer (edit to change name)" + +#: inc/config.class.php:299 +msgid "Group in ProcessMaker which will contain all GLPI users" +msgstr "Group in ProcessMaker which will contain all GLPI users" + +#: inc/config.class.php:323 +msgid "Processmaker system information" +msgstr "Processmaker system information" + +#: inc/config.class.php:327 inc/config.class.php:337 +msgid "Version" +msgstr "Version" + +#: inc/config.class.php:328 +msgid "Web server" +msgstr "Web server" + +#: inc/config.class.php:329 +msgid "Server name" +msgstr "Server name" + +#: inc/config.class.php:330 +msgid "PHP version" +msgstr "PHP version" + +#: inc/config.class.php:331 +msgid "DB version" +msgstr "DB version" + +#: inc/config.class.php:332 +msgid "DB server IP" +msgstr "DB server IP" + +#: inc/config.class.php:333 +msgid "DB name" +msgstr "DB name" + +#: inc/config.class.php:334 +msgid "User browser" +msgstr "User browser" + +#: inc/config.class.php:335 +msgid "User IP" +msgstr "User IP" + +#: inc/config.class.php:337 +msgid "Not yet!" +msgstr "Not yet!" + +#: inc/process.class.php:350 +msgid "Synchronize Process List" +msgstr "Synchronize Process List" + +#: inc/process.class.php:427 inc/process.class.php:565 +msgid "Process GUID" +msgstr "Process GUID" + +#: inc/process.class.php:433 +msgid "Project type" +msgstr "Project type" + +#: inc/process.class.php:439 +msgid "Hide case number and title" +msgstr "Hide case number and title" + +#: inc/process.class.php:445 +msgid "Insert Task Category" +msgstr "Insert Task Category" + +#: inc/process.class.php:457 inc/process.class.php:585 +msgid "Ticket type (self-service)" +msgstr "Ticket type (self-service)" + +#: inc/process.class.php:495 +msgctxt "process_type" +msgid "Classic" +msgstr "Classic" + +#: inc/process.class.php:496 +msgctxt "process_type" +msgid "BPMN" +msgstr "BPMN" + +#: inc/process.class.php:522 +msgid "Processes" +msgstr "Processes" + +#: inc/process.class.php:575 +msgid "Hide case number and title in task descriptions" +msgstr "Hide case number and title in task descriptions" + +#: inc/process.class.php:580 +msgid "Insert Task Category comments in Task Description" +msgstr "Insert Task Category comments in Task Description" + +#: inc/process.class.php:603 +msgid "ITIL Category (self-service)" +msgstr "ITIL Category (self-service)" + +#: inc/process.class.php:632 +msgid "Project type (to be changed if not up-to-date)" +msgstr "Project type (to be changed if not up-to-date)" + +#: inc/process_profile.class.php:26 inc/process_profile.class.php:45 +msgid "Authorizations" +msgstr "Authorizations" + +#: inc/process_profile.class.php:179 +msgid "Authorization not added: already existing!" +msgstr "Authorization not added: already existing!" + +#: inc/processmaker.class.php:116 inc/processmaker.class.php:118 +msgctxt "errors" +msgid "Error creating case!" +msgstr "Error creating case!" + +#: inc/processmaker.class.php:117 +msgctxt "errors" +msgid "Can't create case: no rights for it!" +msgstr "Can't create case: no rights for it!" + +#: inc/processmaker.class.php:984 +msgid "Syncs GLPI users and groups into ProcessMaker." +msgstr "Syncs GLPI users and groups into ProcessMaker." + +#: inc/processmaker.class.php:986 +msgid "Cleaning of orphan cases." +msgstr "Cleaning of orphan cases." + +#: inc/processmaker.class.php:986 +msgid "Number of days to keep orphan cases" +msgstr "Number of days to keep orphan cases" + +#: inc/processmaker.class.php:988 +msgid "To apply task actions between cases." +msgstr "To apply task actions between cases." + +#: inc/processmaker.class.php:1696 +msgid "Case title: " +msgstr "Case title: " + +#: inc/processmaker.class.php:2178 +msgid "A 'Case' is running!" +msgstr "A 'Case' is running!" + +#: inc/processmaker.class.php:2179 +msgid "You must manage it first (see 'Process - Case' tab)!" +msgstr "You must manage it first (see 'Process - Case' tab)!" + +#: inc/profile.class.php:17 +msgid "Process configuration" +msgstr "Process configuration" + +#: inc/profile.class.php:21 +msgid "Cases" +msgstr "Cases" + +#: inc/task.class.php:25 +msgid "Process case task" +msgid_plural "Process case tasks" +msgstr[0] "Process case task" +msgstr[1] "Process case tasks" + +#: inc/taskcategory.class.php:21 inc/taskcategory.class.php:31 +msgid "Task List" +msgstr "Task List" + +#: inc/taskcategory.class.php:32 +msgid "Task name" +msgstr "Task name" + +#: inc/taskcategory.class.php:34 inc/taskcategory.class.php:60 +msgid "Start" +msgstr "Start" + +#: inc/taskcategory.class.php:35 +msgid "Task GUID" +msgstr "Task GUID" + +#: inc/taskcategory.class.php:38 inc/taskcategory.class.php:78 +msgid "Sub-process" +msgstr "Sub-process" + +#~ msgid "Plugin is under maintenance, please retry later, thank you." +#~ msgstr "Plugin is under maintenance, please retry later, thank you." diff --git a/pics/under_maintenance.png b/pics/under_maintenance.png new file mode 100644 index 0000000000000000000000000000000000000000..ba1f7f8a4db8322d8c1e5f2ea82e0ce46388f3aa GIT binary patch literal 106081 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 TJ!bfm00000NkvXXu0mjf&vdYe literal 0 HcmV?d00001 diff --git a/setup.php b/setup.php index 64677f2..bdd6255 100644 --- a/setup.php +++ b/setup.php @@ -123,8 +123,6 @@ function plugin_init_processmaker() { // Get the name and the version of the plugin - Needed function plugin_version_processmaker() { - global $LANG; - return array ('name' => 'Process Maker', 'version' => '3.3.0', 'author' => 'Olivier Moron',

".$LANG['processmaker']['title'][3]."
".$LANG['processmaker']['process']['taskcategories']['name']."".$LANG['processmaker']['process']['taskcategories']['completename']."".$LANG['processmaker']['process']['taskcategories']['is_start']."".$LANG['processmaker']['process']['taskcategories']['guid']."".$LANG['processmaker']['process']['taskcategories']['comment']."".$LANG['processmaker']['process']['taskcategories']['is_active']."".$LANG['processmaker']['process']['taskcategories']['is_subprocess']."
".__('Task List', 'processmaker')."
".__('Task name', 'processmaker')."".__('Complete name')."".__('Start', 'processmaker')."".__('Task GUID', 'processmaker')."".__('Comments')."".__('Active')."".__('Sub-process', 'processmaker')."
" . $taskCat['name']; + Toolbox::getItemTypeFormURL('TaskCategory') . "?id=" . $taskCat['taskcategories_id'] . "'>" . $taskCat['name']; if ($_SESSION["glpiis_ids_visible"]) { echo " (" . $taskCat['taskcategories_id'] . ")"; } echo "" . $taskCat['completename'] . "" . $taskCat['completename'] . ""; if ($taskCat['is_start']) { echo "\""."; + __('Start', 'processmaker')."\">"; } echo ""; if ($taskCat['is_active']) { echo "\""."; + __('Active')."\">"; } echo ""; if ($taskCat['is_subprocess']) { echo "\""."; + __('Sub-process', 'processmaker')."\">"; } echo "