public function replies($index = null)
 {
     global $DB;
     if (empty($this->_replies)) {
         // only all replies in an open or close state, a reply should never be automated
         // and drafts are no in the line of published conversation.
         $items = array(dialogue::STATE_OPEN, dialogue::STATE_CLOSED);
         list($insql, $inparams) = $DB->get_in_or_equal($items, SQL_PARAMS_NAMED, 'viewstate');
         $sql = "SELECT dm.*\n                      FROM {dialogue_messages} dm\n                     WHERE dm.conversationindex > 1\n                       AND dm.state {$insql}\n                       AND dm.conversationid = :conversationid\n                  ORDER BY dm.conversationindex ASC";
         $params = array('conversationid' => $this->conversationid) + $inparams;
         $records = $DB->get_records_sql($sql, $params);
         foreach ($records as $record) {
             $reply = new reply($this->_dialogue, $this);
             $reply->load($record);
             $this->_replies[$record->id] = $reply;
         }
     }
     if ($index) {
         if (!isset($this->_replies[$index])) {
             throw new \coding_exception('index not defined');
         }
         return $this->_replies[$index];
     }
     return $this->_replies;
 }