0)) { $this->wait_time = (int)$config['wait_time']; } } /** * Defines necessary event listener. */ public function run() { $dispatcher = EventDispatcher::getInstance(); $dispatcher->attachListener('threadUpdate', $this, 'autoReply'); } /** * Returns verision of the plugin. * * @return string Plugin's version. */ public static function getVersion() { return '0.1.2'; } /** * Automatically sends a system message to a visitor in a chat in queue after some time * of awaiting. * * @param array $args Event data */ public function autoReply($args) { // Get the thread $thread = $args['thread']; // Get the old thread $original_thread = $args['original_thread']; // Check whether a visitor is waiting in the queue if ($thread->state == Thread::STATE_QUEUE) { // Check whether a visitor is in the queue for too long if (time() - $thread->modified > $this->wait_time) { // Check the auto reply is already sent $result = Database::getInstance()->query( "SELECT COUNT(*) AS replied FROM {mibew_autoreply} WHERE threadid = :threadid", array(':threadid' => $thread->id), array('return_rows' => Database::RETURN_ONE_ROW) ); if (!$result || !isset($result['replied']) || !($result['replied'] > 0)) { // Send auto reply $thread->postMessage( Thread::KIND_INFO, getlocal( 'All our operators are currently busy, please hold. Sorry for keeping you waiting.', null, $thread->locale, false ) ); // Mark thread as replied in the database Database::getInstance()->query( 'INSERT INTO {mibew_autoreply} (threadid) VALUES (:threadid)', array(':threadid' => $thread->id) ); } } } // Check whether a visitor is not in the queue anymore elseif ($thread->state != $original_thread->state) { // Remove the garbage from the database Database::getInstance()->query( 'DELETE FROM {mibew_autoreply} WHERE threadid = :threadid', array(':threadid' => $thread->id) ); } } /** * {@inheritdoc} */ public static function install() { // Initialize localization constant getlocal('All our operators are currently busy, please hold. Sorry for keeping you waiting.'); return Database::getInstance()->query( 'CREATE TABLE {mibew_autoreply} ( ' . 'threadid INT NOT NULL PRIMARY KEY' . ') charset utf8 ENGINE=InnoDb' ); } /** * {@inheritdoc} */ public static function uninstall() { return Database::getInstance()->query('DROP TABLE {mibew_autoreply}'); } }