-
Notifications
You must be signed in to change notification settings - Fork 12
Course Article Page #452
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Course Article Page #452
Changes from 39 commits
20753c6
578bf7e
46661bc
92c35fe
0e5dede
fd57fef
4d58954
f783cce
2451ed5
f60140b
d9af702
87a0e3c
2211d65
708cb68
9958547
2663249
c449a33
401bd89
d232315
1bf58ab
4a5c9ea
d7f564f
dc38095
6be9908
8cc8386
10dc77d
f23f0c9
7e4fc4a
a8a10fc
2272aa7
d61d17d
153c10b
fb2d980
dfda9e6
4bf9c66
063eafa
17c0120
b855948
467b686
6f52ee6
5220317
6970f5c
79a2d78
a59e526
a145f9e
182c628
203e52c
8c92086
2bbc4df
a6d5552
bf263dc
e978608
c1dac14
97541c3
fbe70cb
0faa975
a884934
ebe6c03
a48651b
c6be3fd
67bf79a
e356bf3
379d502
13455e8
c4c16e5
1246c08
38c2a1f
b9f0cbe
2512f24
2160f5e
fa2159d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -15,6 +15,8 @@ class Model_Courses extends Model | |
| public $description; | ||
| public $cover; | ||
| public $is_big_cover; | ||
| public $course_articles = []; | ||
| public $course_authors = []; | ||
| public $dt_publish; | ||
| public $dt_create; | ||
| public $dt_update; | ||
|
|
@@ -73,14 +75,22 @@ public function insert() | |
| */ | ||
| private function fillByRow($course_row) | ||
| { | ||
| if (empty($course_row['id'])) { | ||
| return $this; | ||
| } | ||
|
|
||
| foreach ($course_row as $fieldname => $value) { | ||
| if (property_exists($this, $fieldname)) { | ||
| $this->$fieldname = $value; | ||
| } | ||
| if (!empty($course_row['id'])) { | ||
| $this->id = Arr::get($course_row, 'id'); | ||
| $this->uri = Arr::get($course_row, 'uri'); | ||
| $this->title = Arr::get($course_row, 'title'); | ||
| $this->text = Arr::get($course_row, 'text'); | ||
| $this->description = Arr::get($course_row, 'description'); | ||
| $this->cover = Arr::get($course_row, 'cover'); | ||
| $this->is_big_cover = Arr::get($course_row, 'is_big_cover'); | ||
| $this->marked = Arr::get($course_row, 'marked'); | ||
| $this->dt_publish = Arr::get($course_row, 'dt_publish'); | ||
| $this->dt_create = Arr::get($course_row, 'dt_create'); | ||
| $this->dt_update = Arr::get($course_row, 'dt_update'); | ||
| $this->is_removed = Arr::get($course_row, 'is_removed'); | ||
| $this->is_published = Arr::get($course_row, 'is_published'); | ||
| $this->course_articles = self::getArticlesFromCourseWithCoauthors($this->id); | ||
| $this->course_authors = self::getUniqueCourseAuthors($this->course_articles); | ||
| } | ||
|
|
||
| return $this; | ||
|
|
@@ -222,6 +232,24 @@ public static function getActiveCourses($clearCache = false) | |
| return Model_Courses::getCourses(false, false, !$clearCache ? Date::MINUTE * 5 : null); | ||
| } | ||
|
|
||
| /** | ||
| * Получить все опубликованные курсы, которые содержат хотя бы одну статью | ||
| * | ||
| * @return Model_Courses[] - экземпляр модели с указанным идентификатором и заполненными полями | ||
| */ | ||
| public static function getActiveCoursesWithArticles($clearCache = false) | ||
| { | ||
| $courses = Model_Courses::getCourses(false, false, !$clearCache ? Date::MINUTE * 5 : null); | ||
| $courses_with_articles = array(); | ||
|
|
||
| foreach ($courses as $course) { | ||
| if (self::getArticles($course->id)) { | ||
| $courses_with_articles[] = $course; | ||
| } | ||
| } | ||
|
|
||
| return $courses_with_articles; | ||
| } | ||
|
|
||
| /** | ||
| * Получить все неудалённые курсы в порядке убывания ID. | ||
|
|
@@ -297,4 +325,63 @@ public static function getArticles($course_id) | |
|
|
||
| return Dao_CoursesArticles::select('article_id')->where('course_id', '=', $course_id)->execute(); | ||
| } | ||
|
|
||
| /** | ||
| * Get Articles from Course | ||
| * @param [int] $courseId - ID of Course | ||
| * @return Model_Article[] - Array of Articles | ||
| */ | ||
| public static function getArticlesFromCourse($courseId) | ||
|
||
| { | ||
| /** getting all articles from course */ | ||
| $course_articles = self::getArticles($courseId); | ||
|
|
||
| /** $articleList - empty array. Needs to fill by article ids */ | ||
| $articleList = array(); | ||
|
|
||
| if ($course_articles) { | ||
| foreach ($course_articles as $articles) { | ||
| $articleList[] = Model_Article::get($articles['article_id']); | ||
| } | ||
| } | ||
|
|
||
| return $articleList; | ||
| } | ||
|
|
||
| /** | ||
| * Get articles from course with coauthors | ||
| * @return Model_Article[] | ||
| */ | ||
| public function getArticlesFromCourseWithCoauthors($courseId) | ||
| { | ||
| $course_articles = self::getArticlesFromCourse($courseId); | ||
|
|
||
| foreach ($course_articles as $course_article) { | ||
| $coauthorship = new Model_Coauthors($course_article->id); | ||
| $course_article->coauthor = Model_User::get($coauthorship->user_id); | ||
| } | ||
| return $course_articles; | ||
| } | ||
|
|
||
| /** | ||
| * Return unique article authors from the Course | ||
| * @param Model_Article[] - Articles included in specific Course | ||
| * @return Model_User[] - Array of unique Course authors | ||
| */ | ||
| public static function getUniqueCourseAuthors($course_articles) | ||
| { | ||
| $course_authors_ids = array(); | ||
| $course_authors = array(); | ||
|
|
||
| foreach ($course_articles as $article) { | ||
| $author_id = $article->author->id; | ||
|
|
||
| if (!in_array($author_id, $course_authors_ids)) | ||
| { | ||
| $course_authors_ids[] = $author_id; | ||
| $course_authors[] = Model_User::get($author_id); | ||
| } | ||
| } | ||
| return $course_authors; | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,34 +1,14 @@ | ||
| <div class="center_side clear"> | ||
| <div class="center_side clear course-menu--top"> | ||
|
||
| <? if (isset($articlesFromCourse)): ?> | ||
| <?= View::factory('templates/articles/course_list') | ||
| ->set('articles', $articlesFromCourse) | ||
| ->set('mobileToggleClass', 'course-menu__title--toggle js-course-menu__title--toggle') | ||
|
||
| ->set('currentArticle', $article) | ||
| ->set('course', $course) | ||
| ?> | ||
| <? endif; ?> | ||
| </div> | ||
|
|
||
| <? if (isset($previousArticle)): ?> | ||
| <div class="course-navigation-wrapper course-navigation-wrapper--previous" name="js-course-navigation"> | ||
| <a class="course-navigation course-navigation--previous" href="<?= URL::site($previousArticle->uri ?: '/article/' . $previousArticle->id) ?>"> | ||
| <div class="course-navigation__icon course-navigation__icon--previous"></div> | ||
| <div class="course-navigation__title"><?= HTML::chars($previousArticle->title) ?></div> | ||
| <img class="course-navigation__avatar" src="<?= $previousArticle->author->photo ?>" itemprop="image"> | ||
| <div class="course-navigation__author"><?= HTML::chars($previousArticle->author->name) ?></div> | ||
| </a> | ||
| </div> | ||
| <? endif; ?> | ||
|
|
||
| <? if (isset($nextArticle)): ?> | ||
| <div class="course-navigation-wrapper course-navigation-wrapper--next" name="js-course-navigation"> | ||
| <a class="course-navigation course-navigation--next" href="<?=URL::site($nextArticle->uri ?: '/article/' . $nextArticle->id); ?>"> | ||
| <div class="course-navigation__icon course-navigation__icon--next"></div> | ||
| <div class="course-navigation__title"><?= HTML::chars($nextArticle->title) ?></div> | ||
| <img class="course-navigation__avatar" src="<?= $nextArticle->author->photo ?>" itemprop="image"> | ||
| <div class="course-navigation__author"><?= HTML::chars($nextArticle->author->name) ?></div> | ||
| </a> | ||
| </div> | ||
| <? endif; ?> | ||
|
|
||
| <article class="article" itemscope itemtype="http://schema.org/Article"> | ||
|
|
||
| <script type="application/ld+json"> | ||
|
|
@@ -174,6 +154,35 @@ | |
|
|
||
| </div> | ||
|
|
||
| <? if (isset($previousArticle) || isset($nextArticle)): ?> | ||
|
||
| <div class="center_side clear course-navigation-wrapper"> | ||
| <div class="course-navigation" name="js-course-navigation"> | ||
| <? if (isset($previousArticle)): ?> | ||
| <a class="course-navigation__item course-navigation__item--previous" href="<?= URL::site($previousArticle->uri ?: '/article/' . $previousArticle->id) ?>"> | ||
| <?= HTML::chars($previousArticle->title) ?> | ||
| </a> | ||
| <? endif; ?> | ||
|
|
||
| <? if (isset($nextArticle)): ?> | ||
| <a class="course-navigation__item course-navigation__item--next" href="<?=URL::site($nextArticle->uri ?: '/article/' . $nextArticle->id); ?>"> | ||
| <?= HTML::chars($nextArticle->title) ?> | ||
| </a> | ||
| <? endif; ?> | ||
| </div> | ||
| </div> | ||
| <? endif; ?> | ||
|
|
||
| <div class="center_side clear"> | ||
| <? if (isset($articlesFromCourse)) : ?> | ||
| <?=View::factory('templates/articles/course_list') | ||
| ->set('articles', $articlesFromCourse) | ||
| ->set('mobileToggleClass', '') | ||
| ->set('currentArticle', $article) | ||
| ->set('course', $course) | ||
| ?> | ||
| <? endif; ?> | ||
| </div> | ||
|
|
||
| <? if(!empty($quiz)): ?> | ||
| <?= View::factory('templates/quizzes/quiz', array('quizData' => $quiz->quiz_data)); ?> | ||
| <? endif ?> | ||
|
|
@@ -200,12 +209,12 @@ | |
|
|
||
| </article> | ||
|
|
||
| <script> | ||
|
|
||
| <div class="center_side clear"> | ||
| <? if (isset($articlesFromCourse)) : ?> | ||
| <?=View::factory('templates/articles/course_list') | ||
| ->set('articles', $articlesFromCourse) | ||
| ->set('course', $course) | ||
| ?> | ||
| <? endif; ?> | ||
| </div> | ||
| codex.docReady(function () { | ||
|
|
||
| codex.courses.toggleCourse(); | ||
|
||
|
|
||
| }); | ||
|
|
||
| </script> | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,14 @@ | ||
| <? if ($articlesFromCourse) : ?> | ||
|
|
||
| <ul class="course-menu-list"> | ||
| <? foreach ($articlesFromCourse as $article) : ?> | ||
| <li class="course-menu-list__item"> | ||
| <a href="<?=URL::site( '/article/ ' . $article->id ); ?>" class="course-menu-list__link course-menu-list__link--black"> | ||
| <?= $article->title; ?> | ||
| <div class="course-menu-list__item-label"></div> | ||
| </a> | ||
| </li> | ||
| <? endforeach; ?> | ||
| </ul> | ||
|
|
||
| <? endif; ?> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,12 +1,22 @@ | ||
| <section class="course"> | ||
| <section class="course-menu"> | ||
|
|
||
| <h2 class="course__title"><?=$course->title; ?></h2> | ||
| <h2 class="course-menu__title <?= $mobileToggleClass ?>"> | ||
|
||
| <a href="<?= "/course/" . $course->id ?>"> | ||
| <?=$course->title; ?> | ||
| </a> | ||
| </h2> | ||
|
|
||
| <? if (!empty($articles)) : ?> | ||
| <ul class="courses-list"> | ||
| <ul class="course-menu-list js-course-menu-list"> | ||
| <? foreach ($articles as $article) : ?> | ||
| <li class="courses-list__item"> | ||
| <a href="<?=URL::site($article->uri ?: '/article/ ' . $article->id ); ?>" class="courses-list__link" href=""><?=$article->title; ?></a> | ||
| <? | ||
| $isCurrent = $article->id == $currentArticle->id; | ||
| ?> | ||
| <li class="course-menu-list__item <?= $isCurrent ? 'course-menu-list__item--current' : '' ?>"> | ||
| <a href="<?=URL::site($article->uri ?: '/article/ ' . $article->id ); ?>" class="course-menu-list__link"> | ||
| <?= $article->title; ?> | ||
| <div class="course-menu-list__item-label"></div> | ||
|
||
| </a> | ||
| </li> | ||
| <? endforeach; ?> | ||
| </ul> | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,69 @@ | ||
| <article class="feed-item clearfix <?= $item->marked ? 'feed-item--big' : ''?> <?= $item->cover ? 'feed-item--with-cover' : '' ?><?= $item->is_big_cover ? ' feed-item--with-big-cover' : ''?>" data-type="<?= $item::FEED_PREFIX; ?>" data-id="<?= HTML::chars($item->id); ?>"> | ||
|
|
||
| <? | ||
| $url = $item->uri ?: 'article/' . $item->id; | ||
| ?> | ||
|
|
||
| <? if ($item::FEED_PREFIX == 'course'): ?> | ||
| <? | ||
| $articlesFromCourse = $item->course_articles; | ||
| $courseAuthors = $item->course_authors; | ||
|
|
||
| if ($articlesFromCourse) { | ||
| $item->author = $courseAuthors[0]; | ||
| } | ||
|
|
||
| if (count($courseAuthors) > 1) { | ||
| $item->coauthor = $courseAuthors[count($courseAuthors) - 1]; | ||
| } | ||
| ?> | ||
| <? endif; ?> | ||
|
|
||
| <? if ($item->cover): ?> | ||
| <a class="feed-item__cover" href="<?= HTML::chars($url) ?>"> | ||
| <img src="<?= HTML::chars($item->cover) ?>"> | ||
| </a> | ||
| <? endif; ?> | ||
|
|
||
| <a class="feed-item__title js-emoji-included" href="/<?= HTML::chars($url) ?>"> | ||
| <?= HTML::chars($item->title) ?> | ||
| </a> | ||
|
|
||
| <? if ($item::FEED_PREFIX == 'article'): ?> | ||
|
|
||
| <div class="feed-item__description"> | ||
|
||
| <?= HTML::chars($item->description) ?> | ||
| </div> | ||
|
|
||
| <? elseif ($item::FEED_PREFIX == 'course'): ?> | ||
|
||
|
|
||
| <?= View::factory('templates/articles/course_articles', array( 'articlesFromCourse' => $articlesFromCourse)); ?> | ||
|
|
||
| <? endif; ?> | ||
|
|
||
| <div class="feed-item__info"> | ||
| <time class="feed-item__time"> | ||
| <?= date_format(date_create($item->dt_publish), 'd M Y'); ?> | ||
| </time> | ||
|
|
||
| <a class="feed-item__author-photo" href="/user/<?= HTML::chars($item->author->id) ?>"> | ||
| <img src="<?= HTML::chars($item->author->photo) ?>" alt="<?= HTML::chars($item->author->name) ?>"> | ||
| </a> | ||
| <? if ($item->coauthor->id): ?> | ||
| <a class="feed-item__author-photo" href="/user/<?= HTML::chars($item->coauthor->id) ?>"> | ||
| <img src="<?= HTML::chars($item->coauthor->photo) ?>" alt="<?= HTML::chars($item->coauthor->name) ?>"> | ||
| </a> | ||
| <? endif; ?> | ||
|
|
||
| <a class="feed-item__author-name" href="/user/<?= HTML::chars($item->author->id) ?>"> | ||
| <?= HTML::chars($item->author->name) ?> | ||
| </a> | ||
| <? if ($item->coauthor->id): ?> | ||
| and <a class="feed-item__author-name" href="/user/<?= HTML::chars($item->coauthor->id) ?>"> | ||
| <?= HTML::chars($item->coauthor->name) ?> | ||
| </a> | ||
| <? endif; ?> | ||
|
|
||
| </div> | ||
|
|
||
| </article> | ||
Uh oh!
There was an error while loading. Please reload this page.