diff --git a/app/Controllers/Api/Images/Favorite.php b/app/Controllers/Api/Images/Favorite.php new file mode 100644 index 0000000..0f28140 --- /dev/null +++ b/app/Controllers/Api/Images/Favorite.php @@ -0,0 +1,25 @@ + $postId, ':uid'=>Auth::userid()])) { + DB::query('DELETE FROM photos_favorite WHERE photo_id = :id AND user_id=:uid', ['id' => $postId, ':uid'=>Auth::userid()]); + echo 0; + } else { + DB::query('INSERT INTO photos_favorite (photo_id, user_id) VALUES (:id, :uid)', ['id' => $postId, ':uid'=>Auth::userid()]); + echo 1; + } + + } +} diff --git a/app/Controllers/ApiController.php b/app/Controllers/ApiController.php index 1e2acef..99870c8 100644 --- a/app/Controllers/ApiController.php +++ b/app/Controllers/ApiController.php @@ -11,6 +11,7 @@ use \App\Controllers\Api\Images\Rate as PhotoVote; use \App\Controllers\Api\Images\Compress as PhotoCompress; use \App\Controllers\Api\Images\CheckAll as PhotoCheckAll; use \App\Controllers\Api\Images\LoadRecent as PhotoLoadRecent; +use \App\Controllers\Api\Images\Favorite as PhotoFavorite; use \App\Controllers\Api\Images\Stats as PhotoStats; use \App\Controllers\Api\Images\Comments\Create as PhotoComment; use \App\Controllers\Api\Images\Comments\Edit as PhotoCommentEdit; @@ -37,6 +38,9 @@ class ApiController public static function photovote() { return new PhotoVote(); } + public static function photofavorite() { + return new PhotoFavorite(); + } public static function photocomment() { return new PhotoComment(); } diff --git a/app/Controllers/MainController.php b/app/Controllers/MainController.php index 01979ee..18ccb5f 100644 --- a/app/Controllers/MainController.php +++ b/app/Controllers/MainController.php @@ -57,6 +57,11 @@ class MainController { Page::set('Feed'); + } + public static function fav() + { + Page::set('Fav'); + } public static function favauthors() { diff --git a/app/Core/Routes.php b/app/Core/Routes.php index 026b6f5..1e7c09c 100644 --- a/app/Core/Routes.php +++ b/app/Core/Routes.php @@ -46,9 +46,12 @@ class Routes Router::get('/search', 'SearchController@i'); + Router::get('/fav', 'MainController@fav'); + Router::post('/api/upload', 'ApiController@upload'); Router::post('/api/profile/update', 'ApiController@updateprofile'); Router::post('/api/photo/comment', 'ApiController@photocomment'); + Router::get('/api/photo/$id/favorite', 'ApiController@photofavorite'); Router::get('/api/subscribe', 'ApiController@subscribeuser'); Router::post('/api/photo/getcomments/$id', 'ApiController@photocommentload'); Router::get('/api/photo/vote', 'ApiController@photovote'); diff --git a/static/js/photo.js b/static/js/photo.js index 6820b17..f1697d3 100644 --- a/static/js/photo.js +++ b/static/js/photo.js @@ -209,11 +209,14 @@ $(document).ready(function() // Избранное $('#favLink').click(function() { + const url = window.location.pathname; + const segments = url.split('/'); + const id = segments[segments.length - 1]; var faved = parseInt($(this).attr('faved')); - $(this).html(_text[faved ? 'P_ADDFAV' : 'P_DELFAV']).attr('faved', faved ? 0 : 1); - if (!faved && subscr_fav) $('.toggle').attr('class', 'toggle on'); + $(this).html(faved ? 'Добавить фото в Избранное' : 'Удалить фото из Избранного').attr('faved', faved ? 0 : 1); + if (!faved) $('.toggle').attr('class', 'toggle on'); - $.get('/api.php', { action: 'fav-photo', pid : pid }, function (r) { if (r != 0 && r != 1) alert(r); }).fail(function(jx) { if (jx.responseText != '') alert(jx.responseText); }); + $.get('/api/photo/'+id+'/favorite', function (r) { if (r != 0 && r != 1) alert(r); }).fail(function(jx) { if (jx.responseText != '') alert(jx.responseText); }); return false; }); diff --git a/views/components/Navbar.php b/views/components/Navbar.php index 13e715b..6172f2e 100644 --- a/views/components/Navbar.php +++ b/views/components/Navbar.php @@ -108,7 +108,7 @@ if ($noncheckedimgs > 0) {
  • Мои заявки
  • Настройки профиля
  • Мои фотографии
  • -
  • Избранные снимки
  • +
  • Избранные снимки
  • Выход
  • diff --git a/views/pages/Fav.php b/views/pages/Fav.php new file mode 100644 index 0000000..95950c6 --- /dev/null +++ b/views/pages/Fav.php @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + +
    +

    Избранные фотографии

    + + + Auth::userid())); + foreach ($photos as $p) { + $photo = new Photo($p['photo_id']); + $user = new User($p['user_id']); + echo '
    + + + + + + +
    598 КБ +
    +
    '.DB::query('SELECT COUNT(*) FROM photos_views WHERE photo_id=:id', array(':id'=>$photo->i('id')))[0]['COUNT(*)'].'
    +
    +
    +

    '.htmlspecialchars($photo->i('postbody')).'

    +

    '.htmlspecialchars($photo->i('place')).'

    +

    '.Date::zmdate($photo->i('posted_at')).'
    Автор: '.$user->i('username').'

    +
    +

    '; + } + ?> + + + +
    +
    + + + + \ No newline at end of file diff --git a/views/pages/Photo.php b/views/pages/Photo.php index aebc909..94177ac 100644 --- a/views/pages/Photo.php +++ b/views/pages/Photo.php @@ -21,13 +21,12 @@ if ($photo->i('id') !== null) { } else { $moderated = false; } - } else if ($photo->i('moderated') === 1) { + } else if ($photo->i('moderated') === 1) { $moderated = true; if (DB::query('SELECT * FROM photos_views WHERE user_id=:uid AND photo_id=:pid ORDER BY id DESC LIMIT 1', array(':uid' => Auth::userid(), ':pid' => $id))[0]['time'] <= time() - 86400) { DB::query('INSERT INTO photos_views VALUES (\'0\', :uid, :pid, :time)', array(':uid' => Auth::userid(), ':pid' => $id, ':time' => time())); } } - } ?> @@ -43,7 +42,7 @@ if ($photo->i('id') !== null) { - + @@ -85,8 +84,8 @@ if ($photo->i('id') !== null) { i('moderated') === 0 && $moderated === true) { echo '
    -

    Это '.$extname.' пока не опубликовано

    -
    Сейчас '.$extnamef.' рассматривается модераторами и пока не видна другим пользователям. Это может занять определённое время, иногда до нескольких дней.

    +

    Это ' . $extname . ' пока не опубликовано

    +
    Сейчас ' . $extnamef . ' рассматривается модераторами и пока не видна другим пользователям. Это может занять определённое время, иногда до нескольких дней.

    Здесь Вы можете увидеть, как будет выглядеть страница с фотографией после публикации.
    '; } @@ -94,7 +93,7 @@ if ($photo->i('id') !== null) { echo '

    Фотография не принята к публикации

    -
    '.$photo->declineReason($photo->content('declineReason')).'
    +
    ' . $photo->declineReason($photo->content('declineReason')) . '
    '; } ?> @@ -114,12 +113,12 @@ if ($photo->i('id') !== null) {
    content('videourl') != null) { ?> - - + + - + i('priority') === 1) { ?> @@ -168,9 +167,9 @@ if ($photo->i('id') !== null) {
    - i('postbody') != null) { ?> - + i('postbody') != null) { ?> + @@ -179,8 +178,8 @@ if ($photo->i('id') !== null) {
    content('comment') != null) { ?> -
    content('comment')) ?>
    + if ($photo->content('comment') != null) { ?> +
    content('comment')) ?>

    i('id') !== null) {
    Лицензия: BY-NC
    Опубликовано i('timeupload')) ?>
    - Просмотров — $id))[0]['COUNT(*)']?> + Просмотров — $id))[0]['COUNT(*)'] ?>

    - Подробная информация + Подробная информация
    - - i('moderated') === 1) { ?> -
    -

    Оценка

    -
    - -
    Рейтинг:
    -
    - 0) { ?> - - -
    -
    i('postbody')) ?>i('postbody')) ?>
    - $id)); - foreach ($votespos as $ps) { - $uservote = new User($ps['user_id']); - echo ' - - - '; - } - ?> - -
    ' . htmlspecialchars($uservote->i('username')) . '+1
    - - $id)); - foreach ($votespos as $ps) { - $uservote = new User($ps['user_id']); - echo ' - - - '; - } - ?> - -
    ' . htmlspecialchars($uservote->i('username')) . '-1
    +
    +

    Инструменты

    +
    +
    + Auth::userid(), ':pid'=>$id))) { + $fav = 1; + $textfav = 'Удалить фото из Избранного'; + } else { + $fav = 0; + $textfav = 'Добавить фото в Избранное'; + } + ?> +
    + i('moderated') === 1) { ?> +
    +

    Оценка

    +
    + +
    Рейтинг:
    +
    + 0) { ?> + + +
    + + $id)); + foreach ($votespos as $ps) { + $uservote = new User($ps['user_id']); + echo ' + + + '; + } + ?> + +
    ' . htmlspecialchars($uservote->i('username')) . '+1
    + + $id)); + foreach ($votespos as $ps) { + $uservote = new User($ps['user_id']); + echo ' + + + '; + } + ?> + +
    ' . htmlspecialchars($uservote->i('username')) . '-1
    +
    +
    +
    @@ -342,44 +357,44 @@ if ($photo->i('id') !== null) { i('moderated') === 1) { - $comments = DB::query('SELECT * FROM photos_comments WHERE photo_id=:pid', array(':pid' => $id)); + $comments = DB::query('SELECT * FROM photos_comments WHERE photo_id=:pid', array(':pid' => $id)); ?> -
    -

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

    -
    - class($class); - $number++; - $comm->i(); - } - ?> -
    -
    -

    Ваш комментарий

    -
    -
    - - - - -
    - -
      Ctrl + Enter -
    -
    -
    +
    +

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

    +
    + class($class); + $number++; + $comm->i(); + } + ?> +
    +
    +

    Ваш комментарий

    +
    +
    + + + + +
    + +
      Ctrl + Enter +
    +
    +
    + +
    -
    @@ -412,12 +427,18 @@ if ($photo->i('id') !== null) { success: function(response) { var jsonData = JSON.parse(response); if (jsonData.errorcode == "1") { - $('#statusSend').css({display: 'block', color: 'red'}); + $('#statusSend').css({ + display: 'block', + color: 'red' + }); $('#statusSend').text('Комментарий некорректен'); //Notify.noty('danger', 'Комментарий неккоректен'); //$("#result").html(""); } else if (jsonData.errorcode == "2") { - $('#statusSend').css({display: 'block', color: 'yellow'}); + $('#statusSend').css({ + display: 'block', + color: 'yellow' + }); $('#statusSend').text('Пожалуйста, подождите...'); //Notify.noty('warning', 'Пожалуйста, подождите...'); setTimeout(function() { @@ -425,7 +446,10 @@ if ($photo->i('id') !== null) { }, 1000); } else if (jsonData.errorcode == "0") { $('#wtext').val(''); - $('#statusSend').css({display: 'block', color: 'green'}); + $('#statusSend').css({ + display: 'block', + color: 'green' + }); $('#statusSend').text('Комментарий отправлен!'); //Notify.noty('success', 'Комментарий отправлен!'); //$("#result").html(""); @@ -456,22 +480,21 @@ if ($photo->i('id') !== null) { }); function errimg() { - const content = `
    + const content = `
    `; - $('#err').html(content); - $('#err .p20').slideDown(500); -} - + $('#err').html(content); + $('#err .p20').slideDown(500); + }
    - + \ No newline at end of file