mirror of
https://github.com/Mibew/tray.git
synced 2025-01-22 18:10:34 +03:00
Add 'threadChanged' event
This commit is contained in:
parent
58fd82ca36
commit
441316b9f5
@ -4,6 +4,7 @@ require_once dirname(__FILE__) . '/../../../../../webim/libs/classes/thread.php'
|
|||||||
require_once dirname(__FILE__) . '/../../../../../webim/libs/classes/database.php';
|
require_once dirname(__FILE__) . '/../../../../../webim/libs/classes/database.php';
|
||||||
require_once dirname(__FILE__) . '/thread_processor_mock.php';
|
require_once dirname(__FILE__) . '/thread_processor_mock.php';
|
||||||
require_once dirname(__FILE__) . '/../../../../../webim/libs/classes/settings.php';
|
require_once dirname(__FILE__) . '/../../../../../webim/libs/classes/settings.php';
|
||||||
|
require_once dirname(__FILE__) . '/../../../../../webim/libs/classes/event_dispatcher.php';
|
||||||
require_once dirname(__FILE__) . '/../../../../../webim/libs/common/locale.php';
|
require_once dirname(__FILE__) . '/../../../../../webim/libs/common/locale.php';
|
||||||
require_once dirname(__FILE__) . '/../config.php';
|
require_once dirname(__FILE__) . '/../config.php';
|
||||||
|
|
||||||
@ -434,6 +435,11 @@ class ThreadTest extends PHPUnit_Framework_TestCase {
|
|||||||
unset($another_thread);
|
unset($another_thread);
|
||||||
|
|
||||||
|
|
||||||
|
// Reload thread because values in database was changed
|
||||||
|
// in Thread::reopen method called above, but values in $thread object
|
||||||
|
// are still the same
|
||||||
|
$thread = Thread::load($thread->id);
|
||||||
|
|
||||||
// Try to reopen thread with Thread::STATE_QUEUE state
|
// Try to reopen thread with Thread::STATE_QUEUE state
|
||||||
$thread->nextAgent = 2;
|
$thread->nextAgent = 2;
|
||||||
$thread->state = Thread::STATE_QUEUE;
|
$thread->state = Thread::STATE_QUEUE;
|
||||||
|
@ -162,7 +162,7 @@ Class Thread {
|
|||||||
* Do not use this property manually!
|
* Do not use this property manually!
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $updatedFields = array();
|
protected $changedFields = array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Forbid create instance from outside of the class
|
* Forbid create instance from outside of the class
|
||||||
@ -412,8 +412,11 @@ Class Thread {
|
|||||||
/**
|
/**
|
||||||
* Implementation of the magic __set method
|
* Implementation of the magic __set method
|
||||||
*
|
*
|
||||||
* Check if variable with name $name exists in the Thread::$propertyMap array before setting.
|
* Check if variable with name $name exists in the Thread::$propertyMap
|
||||||
* If it does not exist triggers an error with E_USER_NOTICE level and value will NOT set.
|
* array before setting. If it does not exist triggers an error
|
||||||
|
* with E_USER_NOTICE level and value will NOT set. If previous value is
|
||||||
|
* equal to new value the property will NOT be update and NOT update in
|
||||||
|
* database when Thread::save method call.
|
||||||
*
|
*
|
||||||
* @param string $name Property name
|
* @param string $name Property name
|
||||||
* @param mixed $value Property value
|
* @param mixed $value Property value
|
||||||
@ -427,10 +430,16 @@ Class Thread {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$field_name = $this->propertyMap[$name];
|
$field_name = $this->propertyMap[$name];
|
||||||
|
|
||||||
|
if (array_key_exists($field_name, $this->threadInfo)
|
||||||
|
&& ($this->threadInfo[$field_name] === $value)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
$this->threadInfo[$field_name] = $value;
|
$this->threadInfo[$field_name] = $value;
|
||||||
|
|
||||||
if (! in_array($field_name, $this->updatedFields)) {
|
if (! in_array($name, $this->changedFields)) {
|
||||||
$this->updatedFields[] = $field_name;
|
$this->changedFields[] = $name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -550,16 +559,33 @@ Class Thread {
|
|||||||
$this->modified = time();
|
$this->modified = time();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Do not save thread if nothing changed
|
||||||
|
if (empty($this->changedFields)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
$values = array();
|
$values = array();
|
||||||
$set_clause = array();
|
$set_clause = array();
|
||||||
foreach ($this->updatedFields as $field_name) {
|
foreach ($this->changedFields as $field_name) {
|
||||||
$set_clause[] = "{$field_name} = ?";
|
$field_db_name = $this->propertyMap[$field_name];
|
||||||
$values[] = $this->threadInfo[$field_name];
|
$set_clause[] = "{$field_db_name} = ?";
|
||||||
|
$values[] = $this->threadInfo[$field_db_name];
|
||||||
}
|
}
|
||||||
|
|
||||||
$query = "update {chatthread} t set " . implode(', ', $set_clause) . " where threadid = ?";
|
$query = "update {chatthread} t set " . implode(', ', $set_clause) . " where threadid = ?";
|
||||||
$values[] = $this->id;
|
$values[] = $this->id;
|
||||||
$db->query($query, $values);
|
$db->query($query, $values);
|
||||||
|
|
||||||
|
// Trigger thread changed event
|
||||||
|
$args = array(
|
||||||
|
'thread' => $this,
|
||||||
|
'changed_fields' => $this->changedFields
|
||||||
|
);
|
||||||
|
$dispatcher = EventDispatcher::getInstance();
|
||||||
|
$dispatcher->triggerEvent('threadChanged', $args);
|
||||||
|
|
||||||
|
// Clear updated fields
|
||||||
|
$this->changedFields = array();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user