/** * Saves comment * * @param int $id * @param Comments $stream * @param UserTable $user * @param UserTable $viewer */ private function saveComment( $id, $stream, $user, $viewer ) { global $_CB_framework, $_PLUGINS; $cbModerator = CBActivity::isModerator( (int) $viewer->get( 'id' ) ); CBActivity::getTemplate( 'comments', false, false ); $row = new CommentTable(); $row->load( (int) $id ); $canAccess = false; if ( ! $row->get( 'id' ) ) { if ( CBActivity::canCreate( $user, $viewer, $stream ) ) { $canAccess = true; } } elseif ( $cbModerator || ( $viewer->get( 'id' ) == $row->get( 'user_id' ) ) ) { $canAccess = true; } if ( ! $canAccess ) { header( 'HTTP/1.0 404 Not Found' ); exit(); } $messageLimit = ( $cbModerator ? 0 : (int) $stream->get( 'message_limit', 400 ) ); $message = trim( $this->input( 'message', $row->get( 'message', null, GetterInterface::HTML ), GetterInterface::HTML ) ); // Remove duplicate spaces: $message = preg_replace( '/ {2,}/i', ' ', $message ); // Remove duplicate tabs: $message = preg_replace( '/\t{2,}/i', "\t", $message ); // Remove duplicate linebreaks: $message = preg_replace( '/(\r\n|\r|\n){2,}/i', '$1', $message ); $row->set( 'user_id', $row->get( 'user_id', $viewer->get( 'id' ) ) ); $row->set( 'type', $row->get( 'type', $stream->get( 'type' ) ) ); $row->set( 'subtype', $row->get( 'subtype', $stream->get( 'subtype' ) ) ); $row->set( 'item', $row->get( 'item', $stream->get( 'item' ) ) ); $row->set( 'parent', $row->get( 'parent', $stream->get( 'parent' ) ) ); if ( $messageLimit && ( cbutf8_strlen( $message ) > $messageLimit ) ) { $message = cbutf8_substr( $message, 0, $messageLimit ); } $row->set( 'message', $message ); if ( $row->get( 'id' ) ) { $row->params()->set( 'modified', $_CB_framework->getUTCDate() ); } $row->set( 'params', $row->params()->asJson() ); if ( $row->getError() || ( ! $row->check() ) ) { header( 'HTTP/1.0 500 Internal Server Error' ); exit(); } if ( $row->getError() || ( ! $row->store() ) ) { header( 'HTTP/1.0 500 Internal Server Error' ); exit(); } $rows = array( &$row ); if ( $stream->get( 'replies' ) ) { CBActivity::preFetchComments( $rows, 'comment' ); } CBActivity::preFetchUsers( $rows ); $_PLUGINS->trigger( 'activity_onPushComments', array( $stream, $row ) ); echo HTML_cbactivityComments::showComments( $rows, $stream, 4, $user, $viewer, $this ); header( 'HTTP/1.0 200 OK' ); exit(); }