From 7868c21fd6b310869f5d3eece6a635ddd3d6d9ae Mon Sep 17 00:00:00 2001 From: Krivchikov Dmitry Date: Fri, 2 Oct 2015 14:50:38 +0300 Subject: [PATCH] ADD COMMENTS --- ground/classes/Markdown.php | 12 ++++++++ ground/controllers/ArticleController.php | 31 +++++++++++++++++++ ground/models/Comment.php | 18 +++++++++++ ground/views/article.php | 6 ++++ ground/views/comments/all.php | 22 +++++++++++++ ground/views/comments/comment.php | 12 ++++++++ ground/views/comments/deny.php | 3 ++ ground/views/comments/form.php | 12 ++++++++ public/css/comments.css | 39 ++++++++++++++++++++++++ 9 files changed, 155 insertions(+) create mode 100644 ground/models/Comment.php create mode 100644 ground/views/comments/all.php create mode 100644 ground/views/comments/comment.php create mode 100644 ground/views/comments/deny.php create mode 100644 ground/views/comments/form.php create mode 100644 public/css/comments.css diff --git a/ground/classes/Markdown.php b/ground/classes/Markdown.php index 2f5b5cb..16aafb9 100644 --- a/ground/classes/Markdown.php +++ b/ground/classes/Markdown.php @@ -15,6 +15,18 @@ class Markdown return $string; } + static function liteProcessing($string) + { +// $string = self::replaceHeaders($string); + $string = self::replaceBold($string); + $string = self::replaceItalic($string); + $string = self::replaceUnderline($string); + $string = self::replaceChars($string); + $string = self::replaceUrls($string); + + return $string; + } + static private function replaceHeaders($string) { $pr = '(### (.{1,}))'; diff --git a/ground/controllers/ArticleController.php b/ground/controllers/ArticleController.php index 8fde5fe..8ee2c91 100644 --- a/ground/controllers/ArticleController.php +++ b/ground/controllers/ArticleController.php @@ -190,6 +190,37 @@ class ArticleController extends Controller App::redirect('/user/'); } + static function actionAddComment() + { + if (!App::$user || + !isset($_POST['parentType']) || + !isset($_POST['parentId']) || + !isset($_POST['answerTo']) || + !isset($_POST['text'])) + { + App::error404(); + } + + $text = str_replace(array('<','>'), array('<','>'), $_POST['text']); + + $html = strip_tags($_POST['text']); + $html = str_replace(array('<','>',"'"), array('<','>','′'), $html); + $html = Markdown::liteProcessing($html); + $html = nl2br($html); + + $comment = new Comment(array( + 'userId' => App::$user->id, + 'parentType' => ($_POST['parentType'] == 'article') ? 'article' : 'point', + 'parentId' => (int)$_POST['parentId'], + 'answerTo' => (int)$_POST['answerTo'], + 'addDate' => time(), + 'text' => $text, + 'html' => $html, + )); + $comment->save(); + App::redirect('/'.$_POST['parentType'].'/'.$_POST['parentId'].'#comment'.$comment->id); + } + static function actionMarkdown() { if (isset($_POST['text']) ){ diff --git a/ground/models/Comment.php b/ground/models/Comment.php new file mode 100644 index 0000000..dd6476a --- /dev/null +++ b/ground/models/Comment.php @@ -0,0 +1,18 @@ +_tableName_ = 'comments'; + parent::__construct($fromArray); + $this->setRelation('refUser', 'userId', 'User', 'id', self::TO_ONE); + } + + static function model() + { + return new self(); + } + +} diff --git a/ground/views/article.php b/ground/views/article.php index 7a1d20b..00883da 100644 --- a/ground/views/article.php +++ b/ground/views/article.php @@ -16,6 +16,12 @@
+
+
+ $article->id, 'parentType' => 'article'],TRUE); ?> +
+
+
diff --git a/ground/views/comments/all.php b/ground/views/comments/all.php new file mode 100644 index 0000000..41decd4 --- /dev/null +++ b/ground/views/comments/all.php @@ -0,0 +1,22 @@ +

Комментарии:

+getAll(array('where'=>'`parentType`="'.$parentType.'" AND `parentId`="'.$parentId.'"')); + +if($comments) { + foreach ($comments as $comment) { + self::renderPartial('comments/comment.php',['comment'=>$comment]); + } +} else { + print 'Ваш комментарий может стать первым!'; +} + +if (App::$user) { + self::renderPartial('comments/form.php',['parentId'=>$parentId, 'parentType' => $parentType]); +} else { + self::renderPartial('comments/deny.php'); + + self::addScript('//ulogin.ru/js/ulogin.js'); + self::renderPartial('modals/login.php'); +} diff --git a/ground/views/comments/comment.php b/ground/views/comments/comment.php new file mode 100644 index 0000000..78aa378 --- /dev/null +++ b/ground/views/comments/comment.php @@ -0,0 +1,12 @@ +
+ + +
+ refUser->nick ?>  + addDate) ?> + # +
+
+ html, 'html') ?>
+
+
diff --git a/ground/views/comments/deny.php b/ground/views/comments/deny.php new file mode 100644 index 0000000..2a2120d --- /dev/null +++ b/ground/views/comments/deny.php @@ -0,0 +1,3 @@ +
+ Чтобы написать комментарий, вам необходимо авторизоваться. +
\ No newline at end of file diff --git a/ground/views/comments/form.php b/ground/views/comments/form.php new file mode 100644 index 0000000..d6cafa2 --- /dev/null +++ b/ground/views/comments/form.php @@ -0,0 +1,12 @@ +
+
+ + + + +
+
+ +
+
+
diff --git a/public/css/comments.css b/public/css/comments.css new file mode 100644 index 0000000..28b3269 --- /dev/null +++ b/public/css/comments.css @@ -0,0 +1,39 @@ +.singleComment { + border: solid 1px #ddd; + border-radius: 3px; + padding: 8px; + margin-bottom: 5px; + background-color: rgba(255,255,255, 0.8); +} + +.singleComment .info { + background-color: #eee; + color: #777; + height: 50px; + padding: 15px 10px 15px 60px; + +} + +.singleComment .info .anchor{ + float: right; +} + +.singleComment .avatar { + width: 50px; + height: 50px; + float: left; +} + +div.commentForm { + margin-top: 20px; +} + +div.commentForm .buttons { + text-align: center; +} + +div.deny { + padding: 10px 20px; + border-radius: 3px; + border: solid 1px #ea4444; +}