diff --git a/views/pages/Photo/Ext.latte b/views/pages/Photo/Ext.latte new file mode 100644 index 0000000..e05d555 --- /dev/null +++ b/views/pages/Photo/Ext.latte @@ -0,0 +1,45 @@ +{layout '..\@layout.latte'} +{var $photo = new \App\Models\Photo($_GET['id'])} +{block content} +
+

Информация об изображении

+
347 КБ
+

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Идентификатор изображения:{$photo->i('id')}
Автор:{(new \App\Models\User($photo->i('user_id')))->i('username')}
Опубликовано:{gmdate("d.m.Y H:i:s", $photo->i('timeupload'))}
Находится на сайте, дней:{floor((time() - $photo->i('timeupload')) / 86400)}
Уникальных просмотров:{\App\Services\DB::query('SELECT COUNT(*) FROM photos_views WHERE photo_id=:id', array(':id'=>$_GET['id']))[0]['COUNT(*)']}
Комментариев:{\App\Services\DB::query('SELECT COUNT(*) FROM photos_comments WHERE photo_id=:id', array(':id'=>$_GET['id']))[0]['COUNT(*)']}

+ + + +

Динамика просмотров по датам

+ +
+ +

+ +
+ {/block} \ No newline at end of file diff --git a/views/pages/Photo/Index.latte b/views/pages/Photo/Index.latte new file mode 100644 index 0000000..9cbd435 --- /dev/null +++ b/views/pages/Photo/Index.latte @@ -0,0 +1,575 @@ +{layout '..\@layout.latte'} +{var $photo = new \App\Models\Photo($photo_id)} +{block content} +{var $id = $photo->i('id')} + {if $photo->i('moderated') === 0 && $moderated === true} +
+

Это {$extname} пока не опубликовано

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

+Здесь Вы можете увидеть, как будет выглядеть страница с фотографией после публикации.
+ + {/if} + {if $photo->i('moderated') === 2 && $moderated === true} +
+

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

+
+
' . $photo->declineReason($photo->content('declineReason')) . '
+
+ {/if} +
+ {if $photo_id != null && $moderated === true} +
+
+ + +
+
+
+ {if $photo->content('videourl') != null} + + + {else} + + {/if} + {if $photo->i('on_contest') === 2} +  Фотография участвует в голосовании + {/if} + {foreach $photo->content('contests') as $c} + {if $c['place'] === 1} + {var $img = '3'} + {/if} + {if $c['place'] === 2} + {var $img = '2'} + {/if} + {if $c['place'] === 3} + {var $img = '1'} + {/if} +  {$c['place']}-е место на фотоконкурсе + {/foreach} + {if $photo->i('priority') === 1} +
Условная публикация
+ {elseif $photo->i('priority') === 2} +
Временная публикация
+ {/if} +
+
+
+
+ {/if} + +
+ + + +
+
+
+ + + {if $photo->i('place') != null} + + {/if} + +
{$photo->i('place')}
+ {if $photo->i('gallery_id') != 0 || $photo->i('gallery_id') != null} +
' . \App\Services\DB::query('SELECT title FROM galleries WHERE id=:id', array(':id' => $photo->i('gallery_id')))[0]['title'] . '
+ {/if} +
+
+ {if $photo->i('entitydata_id') >= 1} + + + + {$entitydata['title']} +  —  маршрут {$photo->content('entityroute')} + + + {/if} +
+ {if $photo->content('comment') != null} +
{$photo->content('comment')}
+ {/if} +

+ {if $photo->i('posted_at') === 943909200 || \App\Services\Date::zmdate($photo->i('posted_at')) === '30 ноября 1999 в 00:00'} + {var $date = 'не указана'} + {else} + {var $date = \App\Services\Date::zmdate($photo->i('posted_at'))} + {/if} +
Автор: {$photouser->i('username')}          Дата: {$date}
+ + + + + + + + + {/if} +
+
+

Статистика

+
+
Лицензия: BY-NC
+ Опубликовано {\App\Services\Date::zmdate($photo->i('timeupload'))}
+ Просмотров — {\App\Services\DB::query('SELECT COUNT(*) FROM photos_views WHERE photo_id=:id', array(':id' => $photo_id))[0]['COUNT(*)']} +

+ Подробная информация +
+
+ {if $user_id > 0} +
+

Инструменты

+
+
+ {if \App\Services\DB::query('SELECT user_id FROM photos_favorite WHERE photo_id=:pid AND user_id=:uid', array(':uid' => $user_id, ':pid' => $photo_id))} + {var $fav = 1} + {var $textfav = 'Удалить фото из Избранного'} + {else} + {var $fav = 0} + {var $textfav = 'Добавить фото в Избранное'} + {/if} + {$textfav} +
+
+
+ {/if} + {if $photo->i('moderated') === 1 && $photo->content('rating') != 'disabled'} +
+

Оценка

+
+ +
Рейтинг: {\App\Models\Vote::count($id)}
+
+ {if $user_id > 0 && ($ngallery['root']['registration']['emailverify'] != true || $user->i('status') != 3)} +
+ Интересная фотография! + Мне не нравится + {if (($photo->content('video') === null && $photo->i('user_id') != $user_id) || $photo->i('on_contest') != 2)} + Красиво, на конкурс! + Неконкурсное фото + {elseif ($photo->i('user_id') === $user_id && $photo->i('on_contest') != 2)} + Выставить на конкурсНе участвовать в конкурсе
+ {/if} +
+ {/if} +
+ + {var $votespos = \App\Services\DB::query('SELECT * FROM photos_rates WHERE photo_id=:pid AND type=1 AND contest=0 ORDER BY id DESC', array(':pid' => $id))} + {foreach $votespos as $ps} + {var $uservote = new \App\Models\User($ps['user_id'])} + + {/foreach} +
{$uservote->i('username')}+1
+ + {var $votesneg = \App\Services\DB::query('SELECT * FROM photos_rates WHERE photo_id=:pid AND type=0 AND contest=0 ORDER BY id DESC', array(':pid' => $id))} + {foreach $votesneg as $ps} + {var $uservote = new \App\Models\User($ps['user_id'])} + + {/foreach} +
{$uservote->i('username')}-1
+
+
+ + {/if} + + + + + +
+ {if $photo->i('entitydata_id') >= 1} +
+
+

{$entitydata['title']}

+
+ + + + + + {var $entity = \App\Services\DB::query('SELECT * FROM entities_data WHERE id=:id', array(':id'=>$photo->i('entitydata_id')))[0]} + {var $vehiclevariables = json_decode($vehicle->i('sampledata'), true)} + {var $vehicledatavariables = json_decode($entity['content'], true)} + {var $num = 1} + {foreach $vehiclevariables as $vb} + + + + + {$num++} + {/foreach} + +
{$vb['name']}:{$vehicledatavariables[$num]['value']}
+
+
+
+ {/if} + {if ($photo->content('type') != 'none') && (json_decode($photo->i('exif'), true)['type'] != 'none') && ($photo->content('rating') != 'disabled') && ($photo->i('exif') != NULL)} +
+
+
+

Параметры съёмки

+ +
+
+ + {var $data = json_decode($photo->i('exif'), true)} + {var $exifTranslations = [ + 'FILE.FileName' => 'Имя файла', + 'FILE.FileSize' => 'Размер файла', + 'FILE.FileDateTime' => 'Дата и время файла', + 'COMPUTED.MimeType' => 'Тип MIME', + 'IFD0.Make' => 'Производитель камеры', + 'IFD0.Model' => 'Модель камеры', + 'IFD0.Orientation' => 'Ориентация', + 'IFD0.XResolution' => 'Разрешение по X', + 'IFD0.YResolution' => 'Разрешение по Y', + 'IFD0.ResolutionUnit' => 'Единица разрешения', + 'IFD0.Software' => 'Программное обеспечение', + 'IFD0.DateTime' => 'Дата и время', + 'IFD0.Artist' => 'Автор', + 'IFD0.Copyright' => 'Авторские права', + 'EXIF.ExposureTime' => 'Время экспозиции', + 'EXIF.FNumber' => 'Диафрагма', + 'EXIF.ExposureProgram' => 'Программа экспозиции', + 'EXIF.ISOSpeedRatings' => 'ISO', + 'EXIF.ExifVersion' => 'Версия EXIF', + 'EXIF.DateTimeOriginal' => 'Дата и время оригинала', + 'EXIF.DateTimeDigitized' => 'Дата и время оцифровки', + 'EXIF.ShutterSpeedValue' => 'Значение выдержки', + 'EXIF.ApertureValue' => 'Значение диафрагмы', + 'EXIF.BrightnessValue' => 'Значение яркости', + 'EXIF.ExposureBiasValue' => 'Экспокоррекция', + 'EXIF.MaxApertureValue' => 'Максимальная диафрагма', + 'EXIF.MeteringMode' => 'Режим экспозамера', + 'EXIF.LightSource' => 'Источник света', + 'EXIF.Flash' => 'Вспышка', + 'EXIF.FocalLength' => 'Фокусное расстояние', + 'EXIF.SubjectArea' => 'Область объекта', + 'EXIF.FlashpixVersion' => 'Версия Flashpix', + 'EXIF.ColorSpace' => 'Цветовое пространство', + 'EXIF.PixelXDimension' => 'Размер изображения по X', + 'EXIF.PixelYDimension' => 'Размер изображения по Y', + 'EXIF.SensingMethod' => 'Метод съёмки', + 'EXIF.SceneType' => 'Тип сцены', + 'EXIF.ExposureMode' => 'Режим экспозиции', + 'EXIF.WhiteBalance' => 'Баланс белого', + 'EXIF.FocalLengthIn35mmFilm' => 'Фокусное расстояние для 35мм плёнки', + 'EXIF.SceneCaptureType' => 'Тип съёмки', + 'EXIF.GainControl' => 'Регулировка усиления', + 'EXIF.Contrast' => 'Контрастность', + 'EXIF.Saturation' => 'Насыщенность', + 'EXIF.Sharpness' => 'Резкость', + 'GPS.GPSLatitude' => 'Широта', + 'GPS.GPSLongitude' => 'Долгота', + 'GPS.GPSAltitude' => 'Высота', + 'GPS.GPSTimeStamp' => 'Время GPS', + 'GPS.GPSDateStamp' => 'Дата GPS' + ]} + +
+ {foreach $data as $key => $value} + {if isset($exifTranslations[$key])} + + + + + {/if} + {/foreach} +
{$exifTranslations[$key]|escape}:{$value|escape}
+
+ + {/if} + {if $photo->content('lat') != null && $photo->content('lng') != null} +
+ +

Место на карте

+
+ + +
+
+
+ + + +
+
+
+ {/if} + + {if ($photo->i('moderated') === 1)} + {var = $comments = \App\Services\DB::query('SELECT * FROM photos_comments WHERE photo_id=:pid ORDER BY CASE WHEN id = :pinnedid THEN 0 ELSE 1 END, id ASC', array(':pid' => $id, ':pinnedid' => $photo->i('pinnedcomment_id')))} + {var = $commcount = 0} + {foreach $comments as $c} + {if json_decode($c['content'], true)['deleted'] != 'true'} + {var $commcount = $commcount+1} + {/if} + {/foreach} + {if ($photo->content('comments') != 'disabled')} +
+ {if ($commcount > 0)} +

Комментарии ·{$commcount}

+ {/if} +
+ {var $number = 1} + {foreach $comments as $c} + {var $comm = new \App\Models\Comment($c)} + {if $comm->content('deleted') != 'true'} + {if $number % 2 == 0} + {var $class = 's11'} + {else} + {var $class = 's1'} + {/if} + {$comm->class($class)} + {var $number = $number+1} + {$comm->i()} + {/if} + {/foreach} +
+
+

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

+ +
+ {if $user_id > 0} + {if ($ngallery['root']['registration']['emailverify'] != true || $user->i('status') != 3)} +
+ +
+
+ +
+ +
+ +
+ + {else} + {'Комментарии могут оставлять только пользователи с подтверждённой почтой.'} + {/if} + {else} + {'Комментарии могут оставлять только зарегистрированные пользователи.'} + {/if} +
+ + +
+
+ + + {else} +
+ +
+

Комментарии отключены пользователем или по усмотрению Администрации.

+
+
+ + + + +
+ {/if} + {/block} + +