Skip to content

Commit

Permalink
Fix: [ bug #1506, #1507 ] ECM trigger error problem
Browse files Browse the repository at this point in the history
  • Loading branch information
KreizIT committed Jul 4, 2014
1 parent c70bdab commit e4ad082
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 23 deletions.
2 changes: 2 additions & 0 deletions ChangeLog
Expand Up @@ -23,6 +23,8 @@ For users:
- Fix: [ bug #1465, #1466 ] Product triggers problem
- Fix: [ bug #1508 ] STOCK_MOVEMENT does not show trigger error message
- Fix: [ bug #1501 ] DEPLACEMENT_CREATE trigger do not intercept trigger action
- Fix: [ bug #1506, #1507 ] ECM trigger error problem



For translators:
Expand Down
14 changes: 14 additions & 0 deletions htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN
Expand Up @@ -232,6 +232,20 @@ class InterfaceDemo

//Stock mouvement
elseif ($action == 'STOCK_MOVEMENT')
{
dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
}

//MYECMDIR
elseif ($action == 'MYECMDIR_DELETE')
{
dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
}
elseif ($action == 'MYECMDIR_CREATE')
{
dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
}
elseif ($action == 'MYECMDIR_MODIFY')
{
dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
}
Expand Down
76 changes: 53 additions & 23 deletions htdocs/ecm/class/ecmdirectory.class.php
Expand Up @@ -152,12 +152,10 @@ function create($user)
$result=dol_mkdir($dir);
if ($result < 0) { $error++; $this->error="ErrorFailedToCreateDir"; }

// Appel des triggers
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
$interface=new Interfaces($this->db);
$result=$interface->run_triggers('MYECMDIR_CREATE',$this,$user,$langs,$conf);
if ($result < 0) { $error++; $this->errors=$interface->errors; }
// Fin appel triggers
// Call trigger
$result=$this->call_trigger('MYECMDIR_CREATE',$user);
if ($result < 0) { $error++; }
// End call triggers

if (! $error)
{
Expand Down Expand Up @@ -219,12 +217,10 @@ function update($user=0, $notrigger=0)

if (! $error && ! $notrigger)
{
// Appel des triggers
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
$interface=new Interfaces($this->db);
$result=$interface->run_triggers('MYECMDIR_MODIFY',$this,$user,$langs,$conf);
if ($result < 0) { $error++; $this->errors=$interface->errors; }
// Fin appel triggers
// Call trigger
$result=$this->call_trigger('MYECMDIR_MODIFY',$user);
if ($result < 0) { $error++; }
// End call triggers
}

if (! $error)
Expand Down Expand Up @@ -352,7 +348,18 @@ function delete($user, $mode='all')
$this->error="Error ".$this->db->lasterror();
return -2;
}

else
{
// Call trigger
$result=$this->call_trigger('MYECMDIR_DELETE',$user);
if ($result < 0)
{
$this->db->rollback();
return -2;
}
// End call triggers
}

if ($mode != 'databaseonly')
{
$file = $conf->ecm->dir_output . "/" . $relativepath;
Expand All @@ -371,16 +378,6 @@ function delete($user, $mode='all')
$error++;
}

if (! $error)
{
// Appel des triggers
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
$interface=new Interfaces($this->db);
$result=$interface->run_triggers('MYECMDIR_DELETE',$this,$user,$langs,$conf);
if ($result < 0) { $error++; $this->errors=$interface->errors; }
// Fin appel triggers
}

if (! $error) return 1;
else return -1;
}
Expand Down Expand Up @@ -696,5 +693,38 @@ function refreshcachenboffile($all=0)
return -1;
}
}

/**
* Call trigger based on this instance
*
* NB: Error from trigger are stacked in errors
* NB2: if trigger fail, action should be canceled.
* NB3: Should be deleted if EcmDirectory extend CommonObject
*
* @param string $trigger_name trigger's name to execute
* @param User $user Object user
* @return int Result of run_triggers
*/
function call_trigger($trigger_name, $user)
{
global $langs,$conf;

include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
$interface=new Interfaces($this->db);
$result=$interface->run_triggers($trigger_name,$this,$user,$langs,$conf);
if ($result < 0) {
if (!empty($this->errors))
{
$this->errors=array_merge($this->errors,$interface->errors);
}
else
{
$this->errors=$interface->errors;
}
}
return $result;

}


}

0 comments on commit e4ad082

Please sign in to comment.