Bonjour,
J'utilise Cakephp 2.4.5 et je fais un traitement lié à un outil de ticketing.
J'ai une fonction dans mon controlleur qui me permet de faire une action automatiquement.
Personnelement je trouve que ce n'est pas optimisé et de plus quand il y a beaucoup de ticket à traiter la page met énormement de temps à s'afficher.
Ma volonté est de permettre un meilleur traitement mais aussi un meilleur rendu utilisateur mais à forc e de regarder le code je vois pas comment faire.
Voici le code de ma fontion présent dans mon controlleur :
public function omico(){
$phase2 = $nbPhase2 = array();
require_once Configure::read('appVendor') . "rt-queries.php";
$ticket = rtQuery("Status = 'new' AND Queue = '34' AND Subject LIKE 'phase' AND Requestor.EmailAddress = 'root@bouh.gsi.giprecia.net'", "id,subject,lastupdated", "id");
$nbTicket = count($ticket);
$this->loadModel('Omico');
$conditions = array('Omico.created >' => date('Y-m-d'));
$lastOmico = $this->Omico->find('all',array('conditions'=>$conditions));
$nbLastOmico = count($lastOmico);
$cacheOmico = Cache::read('Execution', 'ExecuteOmico');
if (!empty($this->request->data)) {
if (!$cacheOmico) {
$cacheOmico = $this->request->data;
Cache::write('Execution', $cacheOmico, 'ExecuteOmico');
}
if ($nbTicket > 0) {
foreach ($ticket as $key => $value) {
$subject = explode("-", $value['Subject']);
preg_match("^\[(.*?)\]^",$subject[0],$fields);
$rne = $fields[1];
if ($subject[1] == " Phase 2 effectuée AVEC rejets") {
$phase2['rejets'][$key]['id'] = $value['id'];
$phase2['rejets'][$key]['Requestors'] = rtPerson($rne);
$phase2['rejets'][$key]['Etablissement'] = $rne;
$phase2['rejets'][$key]['Type'] = "TPNP";
$phase2['rejets'][$key]['Queue'] = "6";
}
if ($subject[1] == " Phase 2 effectuée AVEC erreurs") {
$phase2['erreurs'][$key]['id'] = $value['id'];
$phase2['erreurs'][$key]['Requestors'] = rtPerson($rne);
$phase2['erreurs'][$key]['Etablissement'] = $rne;
$phase2['erreurs'][$key]['Type'] = "TPNP";
$phase2['erreurs'][$key]['Queue'] = "6";
}
if ($subject[1] == " Phase 2 interrompue") {
$phase2['interrompue'][$key]['id'] = $value['id'];
$phase2['interrompue'][$key]['Requestors'] = rtPerson($rne);
$phase2['interrompue'][$key]['Etablissement'] = $rne;
$phase2['interrompue'][$key]['Type'] = "TPNP";
$phase2['interrompue'][$key]['Queue'] = "6";
}
if ($subject[1] == " Phase 2 effectuée sans erreur \o/") {
$phase2['ok'][$key]['id'] = $value['id'];
$phase2['ok'][$key]['Requestors'] = rtPerson($rne);
$phase2['ok'][$key]['Etablissement'] = $rne;
$phase2['ok'][$key]['Type'] = "TPNP";
$phase2['ok'][$key]['Queue'] = "6";
}
}
$nbPhase2['rejets']['total'] = (array_key_exists("rejets", $phase2)) ? count($phase2['rejets']) : 0;
$nbPhase2['erreurs']['total'] = (array_key_exists("erreurs", $phase2)) ? count($phase2['erreurs']) : 0;
$nbPhase2['interrompue']['total'] = (array_key_exists("interrompue", $phase2)) ? count($phase2['interrompue']) : 0;
$nbPhase2['ok']['total'] = (array_key_exists("ok", $phase2)) ? count($phase2['ok']) : 0;
if ($nbPhase2['rejets']['total'] > 0) {
foreach ($phase2['rejets'] as $key => $value) {
if (!is_null($value['Requestors'])) {
$editTicketrejets = rtTicket("edit", $value);
if ($editTicketrejets) {
$nbPhase2['rejets']['traitements_ok'][] = $value['id'];
}else{
$nbPhase2['rejets']['traitements_ko'][] = $value['id'];
}
}else{
$nbPhase2['rejets']['demandeurs_ko'][] = $value['id'];
}
}
}
if ($nbPhase2['erreurs']['total'] > 0) {
foreach ($phase2['erreurs'] as $key => $value) {
if (!is_null($value['Requestors'])) {
$editTicketerreurs = rtTicket("edit", $value);
if ($editTicketerreurs) {
$nbPhase2['erreurs']['traitements_ok'][] = $value['id'];
}else{
$nbPhase2['erreurs']['traitements_ko'][] = $value['id'];
}
}else{
$nbPhase2['erreurs']['demandeurs_ko'][] = $value['id'];
}
}
}
if ($nbPhase2['interrompue']['total'] > 0) {
foreach ($phase2['interrompue'] as $key => $value) {
if (!is_null($value['Requestors'])) {
$editTicketinterrompue = rtTicket("edit", $value);
if ($editTicketinterrompue) {
$nbPhase2['interrompue']['traitements_ok'][] = $value['id'];
}else{
$nbPhase2['interrompue']['traitements_ko'][] = $value['id'];
}
}else{
$nbPhase2['interrompue']['demandeurs_ko'][] = $value['id'];
}
}
}
if ($nbPhase2['ok']['total'] > 0) {
foreach ($phase2['ok'] as $key => $value) {
if (!is_null($value['Requestors'])) {
$editTicketok = rtTicket("edit", $value);
if ($editTicketok) {
$nbPhase2['ok']['traitements_ok'][] = $value['id'];
}else{
$nbPhase2['ok']['traitements_ko'][] = $value['id'];
}
}else{
$nbPhase2['ok']['demandeurs_ko'][] = $value['id'];
}
}
}
$this->loadModel('Omico');
$data = array(
'Omico' => array(
'rejets_total' => $nbPhase2['rejets']['total'],
'rejets_traitements_ok' => (isset($nbPhase2['rejets']['traitements_ok'])) ? serialize($nbPhase2['rejets']['traitements_ok']) : 0,
'rejets_traitements_ko' => (isset($nbPhase2['rejets']['traitements_ko'])) ? serialize($nbPhase2['rejets']['traitements_ko']) : 0,
'rejets_demandeurs_ko' => (isset($nbPhase2['rejets']['demandeurs_ko'])) ? serialize($nbPhase2['rejets']['demandeurs_ko']) : 0,
'erreurs_total' => $nbPhase2['erreurs']['total'],
'erreurs_traitements_ok' => (isset($nbPhase2['erreurs']['traitements_ok'])) ? serialize($nbPhase2['erreurs']['traitements_ok']) : 0,
'erreurs_traitements_ko' => (isset($nbPhase2['erreurs']['traitements_ko'])) ? serialize($nbPhase2['erreurs']['traitements_ko']) : 0,
'erreurs_demandeurs_ko' => (isset($nbPhase2['erreurs']['demandeurs_ko'])) ? serialize($nbPhase2['erreurs']['demandeurs_ko']) : 0,
'interrompue_total' => $nbPhase2['interrompue']['total'],
'interrompue_traitements_ok' => (isset($nbPhase2['interrompue']['traitements_ok'])) ? serialize($nbPhase2['interrompue']['traitements_ok']) : 0,
'interrompue_traitements_ko' => (isset($nbPhase2['interrompue']['traitements_ko'])) ? serialize($nbPhase2['interrompue']['traitements_ko']) : 0,
'interrompue_demandeurs_ko' => (isset($nbPhase2['interrompue']['demandeurs_ko'])) ? serialize($nbPhase2['interrompue']['demandeurs_ko']) : 0,
'ok_total' => $nbPhase2['ok']['total'],
'ok_traitements_ok' => (isset($nbPhase2['ok']['traitements_ok'])) ? serialize($nbPhase2['ok']['traitements_ok']) : 0,
'ok_traitements_ko' => (isset($nbPhase2['ok']['traitements_ko'])) ? serialize($nbPhase2['ok']['traitements_ko']) : 0,
'ok_demandeurs_ko' => (isset($nbPhase2['ok']['demandeurs_ko'])) ? serialize($nbPhase2['ok']['demandeurs_ko']) : 0,
'users' => $this->Auth->user('username')
)
);
if ($this->Omico->save($data)) {
$this->Session->setFlash("Le rapport d'execution a bien été sauvegardé","alert", array(
'plugin' => 'BoostCake',
'class' => 'alert-success autoclose'
));
return $this->redirect($this->referer());
}else {
$this->Session->setFlash("Le rapport d'execution n'a pas été sauvegardé","alert", array(
'plugin' => 'BoostCake',
'class' => 'alert-danger autoclose'
));
}
}else{
$this->Session->setFlash('Pas de Traitement à faire',"alert", array(
'plugin' => 'BoostCake',
'class' => 'alert-danger autoclose'
));
}
}
$this->set(compact('nbTicket','lastOmico','nbLastOmico','cacheOmico'));
}
}
Dans un premier temps, je pensais passer par de l'ajax mais je me dit qu'il faut que j'améliore avant.
Ce code est juste fonctionnel mais n'est clairement pas optimiser et vous coment feriez vous pour ameliorer tous ça ?