diff --git a/admin/ajax_pastes.php b/admin/ajax_pastes.php index db0b2b2..ec9c26a 100644 --- a/admin/ajax_pastes.php +++ b/admin/ajax_pastes.php @@ -1,9 +1,7 @@ $row['id'], + 'title' => $row['title'], + 'member' => $row['member'], + 'time' => $row['created_at'], + 'friendly_time' => friendlyDateDifference(new DateTime($row['created_at']), new DateTime()), + 'tags' => $row['tagsys'] + ]; +} + +$popular_pastes = array_map('transformPasteRow', getpopular($conn, 10)); +$monthly_popular_pastes = array_map('transformPasteRow', monthpop($conn, 10)); +$recent_pastes = array_map('transformPasteRow', getRecent($conn, 10)); +$updated_pastes = array_map('transformPasteRow', recentupdate($conn, 10)); +$random_pastes = array_map('transformPasteRow', getrandom($conn, 10)); + // Theme $p_title = $lang['archive']; // "Pastes Archive"; require_once('theme/' . $default_theme . '/header.php'); require_once('theme/' . $default_theme . '/discover.php'); require_once('theme/' . $default_theme . '/footer.php'); -?> \ No newline at end of file diff --git a/includes/common.php b/includes/common.php index cddbe3f..d73c8ba 100644 --- a/includes/common.php +++ b/includes/common.php @@ -6,7 +6,27 @@ if (!defined('IN_PONEPASTE')) { require_once('config.php'); require_once('includes/functions.php'); +/* View functions */ +function urlForPaste($paste_id) : string { + global $mod_rewrite; + if ($mod_rewrite === '1') { + return "/${paste_id}"; + } + + return "/paste.php?id=${paste_id}"; +} + +function urlForMember(string $member_name) : string { + global $mod_rewrite; + + if ($mod_rewrite === '1') { + return '/user/' . urlencode($member_name); + } + + return '/user.php?name=' . urlencode($member_name); +} +/* Database functions */ function getSiteInfo() : array { return require('config/site.php'); } diff --git a/includes/functions.php b/includes/functions.php index 8698596..69df6b3 100644 --- a/includes/functions.php +++ b/includes/functions.php @@ -147,17 +147,23 @@ LIMIT 0 , 5"); } function recentupdate($conn, $count) { - $query = $conn->prepare("SELECT id, visible, title, date, timeedit, now_time, member, tagsys FROM pastes WHERE visible='0' ORDER BY timeedit DESC - LIMIT 10 , ?"); + $query = $conn->prepare( + "SELECT pastes.id AS id, visible, title, created_at, users.username AS member, tagsys + FROM pastes + INNER JOIN users ON users.id = pastes.user_id + WHERE visible = '0' ORDER BY timeedit DESC + LIMIT ?"); $query->execute([$count]); return $query->fetchAll(); } -//Cannot get this to work. function monthpop($conn, $count) { - $p_month = date('F'); - $query = $conn->prepare("SELECT s_date, views, title, id, now_time, visible, tagsys, member FROM pastes WHERE s_date LIKE ? AND visible = '0' ORDER BY views + 0 DESC LIMIT 10, ?"); - $query->execute([$p_month, $count]); + $query = $conn->prepare( + "SELECT pastes.id AS id, views, title, created_at, visible, tagsys, users.username AS member + FROM pastes + INNER JOIN users ON users.id = pastes.user_id + WHERE MONTH(created_at) = MONTH(NOW()) AND visible = '0' ORDER BY views DESC LIMIT ?"); + $query->execute([$count]); return $query->fetchAll(); } @@ -202,10 +208,13 @@ function deleteMyPaste($conn, $paste_id) { function getRecent($conn, $count) { - $query = $conn->prepare("SELECT id, visible, title, date, now_time, member, tagsys -FROM pastes where visible='0' -ORDER BY id DESC -LIMIT ?"); + $query = $conn->prepare(" + SELECT pastes.id, visible, title, created_at, users.username AS member, tagsys + FROM pastes + INNER JOIN users ON pastes.user_id = users.id + WHERE visible = '0' + ORDER BY created_at DESC + LIMIT ?"); $query->execute([$count]); return $query->fetchAll(); } @@ -218,19 +227,25 @@ function getRecentadmin($conn, $count = 5) { } function getpopular($conn, $count) { - $query = $conn->prepare("SELECT id, visible, title, date, now_time, views, member, tagsys -FROM pastes WHERE visible='0' -ORDER BY views + 0 DESC -LIMIT 0, ?"); + $query = $conn->prepare(" + SELECT pastes.id AS id, visible, title, pastes.created_at AS created_at, views, users.username AS member, tagsys + FROM pastes INNER JOIN users ON users.id = pastes.user_id + WHERE visible = '0' + ORDER BY views DESC + LIMIT ? + "); $query->execute([$count]); return $query->fetchAll(); } function getrandom($conn, $count) { - $query = $conn->prepare("SELECT id, visible, title, date, now_time, views, member, tagsys -FROM pastes where visible='0' -ORDER BY RAND() -LIMIT ?"); + $query = $conn->prepare(" + SELECT pastes.id, visible, title, created_at, views, users.username AS member, tagsys + FROM pastes + INNER JOIN users ON users.id = pastes.user_id + WHERE visible = '0' + ORDER BY RAND() + LIMIT ?"); $query->execute([$count]); return $query->fetchAll(); } @@ -289,6 +304,30 @@ function updateMyView(PDO $conn, $paste_id) { $query->execute([$paste_id]); } +function friendlyDateDifference(DateTime $lesser, DateTime $greater) : string { + $delta = $greater->diff($lesser, true); + + $parts = [ + 'year' => $delta->y, + 'month' => $delta->m, + 'day' => $delta->d, + 'hour' => $delta->h, + 'min' => $delta->i, + 'sec' => $delta->s + ]; + + $friendly = ''; + + foreach ($parts as $part => $value) { + if ($value !== 0) { + $pluralizer = ($value === 1 ? '' : 's'); + $friendly .= "${value} ${part}${pluralizer} "; + } + } + + return trim($friendly) . ' ago'; +} + function conTime($secs) { // round up to 1 seconnd if ($secs == 0) { diff --git a/theme/bulma/discover.php b/theme/bulma/discover.php index b5aef82..3cc8041 100644 --- a/theme/bulma/discover.php +++ b/theme/bulma/discover.php @@ -6,7 +6,7 @@ * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -37,267 +37,190 @@
-

-

-
- $row) { - $title = Trim($row['title']); - $p_member = Trim($row['member']); - $titlehov = ($row['title']); - $p_id = Trim($row['id']); - $p_date = Trim($row['date']); - $p_time = Trim($row['now_time']); - $nowtime = time(); - $oldtime = $p_time; - $p_time = conTime($nowtime - $oldtime); - $p_tagsys = Trim($row['tagsys']); - $tags = htmlentities($p_tagsys, ENT_QUOTES, 'UTF-8'); - $tagui = sandwitch($tags); - ?> - -
-
-
-
-

' . $title . '

-

' . $p_member . '

'; - if (strlen($p_tagsys) > 0) { - echo $tagui; - } else { - echo ' No tags'; - } - echo '
-
-
-

-
'; +

+
+ +
+
+
+
+
+

+ +

+

+ +
+ +

+ No tags'; + } + ?> - } else { - echo '' . ucfirst($title) . ''; - } - } - ?> +
+
+
+

+ +
-

-

-
- $row) { - $title = Trim($row['title']); - $p_member = Trim($row['member']); - $titlehov = ($row['title']); - $p_id = Trim($row['id']); - $p_date = Trim($row['date']); - $p_time = Trim($row['now_time']); - $nowtime = time(); - $oldtime = $p_time; - $p_time = conTime($nowtime - $oldtime); - $p_tagsys = Trim($row['tagsys']); - $tags = htmlentities($p_tagsys, ENT_QUOTES, 'UTF-8'); - $tagui = sandwitch($tags); - ?> - -
-
-
-
-

' . $title . '

-

' . $p_member . '

'; - if (strlen($p_tagsys) > 0) { - echo $tagui; - } else { - echo ' No tags'; - } - echo '
-
-
-

-
'; +

+
+ +
+
+
+
+
+

+ +

+

+ +
+ +

+ No tags'; + } + ?> - } else { - echo '' . ucfirst($title) . ''; - } - } - ?> +
+
+
+

+ +
-

-

-
- $row) { - $title = Trim($row['title']); - $p_member = Trim($row['member']); - $titlehov = ($row['title']); - $p_id = Trim($row['id']); - $p_date = Trim($row['date']); - $p_time = Trim($row['now_time']); - $nowtime = time(); - $oldtime = $p_time; - $p_time = conTime($nowtime - $oldtime); - $p_tagsys = Trim($row['tagsys']); - $tags = htmlentities($p_tagsys, ENT_QUOTES, 'UTF-8'); - $tagui = sandwitch($tags); - ?> - -
-
-
-
-

' . $title . '

-

' . $p_member . '

'; - if (strlen($p_tagsys) > 0) { - echo $tagui; - } else { - echo ' No tags'; - } - echo '
-
-
-

-
'; +

+
+ +
+
+
+
+
+

+ +

+

+ +
+ +

+ No tags'; + } + ?> - } else { - echo '' . ucfirst($title) . ''; - } - } - ?> +
+
+
+

+ +
-

-

-
- $row) { - $title = Trim($row['title']); - $p_member = Trim($row['member']); - $titlehov = ($row['title']); - $p_id = Trim($row['id']); - $p_date = Trim($row['date']); - $p_time = Trim($row['now_time']); - $nowtime = time(); - $oldtime = $p_time; - $p_time = conTime($nowtime - $oldtime); - $p_tagsys = Trim($row['tagsys']); - $tags = htmlentities($p_tagsys, ENT_QUOTES, 'UTF-8'); - $tagui = sandwitch($tags); - ?> - -
-
-
-
-

' . $title . '

-

' . $p_member . '

'; - if (strlen($p_tagsys) > 0) { - echo $tagui; - } else { - echo ' No tags'; - } - echo '
+

+
+ +
+
+
+
+
+

+ +

+

+ +
+ +

+ No tags'; + } + ?> + +
+
+
+

+
+
-

-
'; - - } else { - echo '' . ucfirst($title) . ''; - } - } - ?> -
-

- + +
-

-

-
- $row) { - $title = Trim($row['title']); - $p_member = Trim($row['member']); - $titlehov = ($row['title']); - $p_id = Trim($row['id']); - $p_date = Trim($row['date']); - $p_time = Trim($row['now_time']); - $nowtime = time(); - $oldtime = $p_time; - $p_time = conTime($nowtime - $oldtime); - $p_tagsys = Trim($row['tagsys']); - $tags = htmlentities($p_tagsys, ENT_QUOTES, 'UTF-8'); - $tagui = sandwitch($tags); - ?> - -
-
-
-
-

' . $title . '

-

' . $p_member . '

'; - if (strlen($p_tagsys) > 0) { - echo $tagui; - } else { - echo ' No tags'; - } - echo '
+

+
+ +
+
+
+
+
+

+ +

+

+ +
+ +

+ No tags'; + } + ?> + +
+
+
+

+
+
-

-
'; - - } else { - echo '' . ucfirst($title) . ''; - } - } - ?> -
-

- - - - +