summaryrefslogtreecommitdiff
path: root/ssh/app/Libraries
diff options
context:
space:
mode:
authorhorus2026-06-27 05:40:45 +0200
committerhorus2026-06-27 05:40:45 +0200
commit7ff83424592cd5a3c58fe2e6d7e67aeef5144caf (patch)
treedafafa6f83c80c8bb2ee3c0b58961197a3f2a73c /ssh/app/Libraries
parentb608ced142cd0527906b554e04376292f718f084 (diff)
downloadcurious-7ff83424592cd5a3c58fe2e6d7e67aeef5144caf.tar.gz
merge
Diffstat (limited to 'ssh/app/Libraries')
-rw-r--r--ssh/app/Libraries/Helper.php303
1 files changed, 0 insertions, 303 deletions
diff --git a/ssh/app/Libraries/Helper.php b/ssh/app/Libraries/Helper.php
deleted file mode 100644
index 5029a1c..0000000
--- a/ssh/app/Libraries/Helper.php
+++ /dev/null
@@ -1,303 +0,0 @@
-<?php
-namespace App\Libraries;
-use App\Libraries\Helper;
-use Carbon\Carbon;
-use Rumenx\Feed\FeedFactory;
-
-class Helper {
- public static function escapeLike($string){
- $search = array('%', '_');
- $replace = array('\%', '\_');
- $string = str_replace($search, $replace, $string);
- $string = explode(" ", $string);
- return implode("%", $string);
- }
-
- public static function formatTimestamp($timestamp) {
- return Carbon::createFromTimestamp($timestamp)->format("Y-m-d");
- }
-
- public static function makeFeed($model, $title, $cache = 60) {
-
- switch($title) {
- case("new"):
- $feed_title = 'Newest Articles';
- $feed_description = 'Newest interesting articles from Wikipedia. Keep exploring.';
- break;
- case( "popular"):
- $feed_title = 'Popular Articles';
- $feed_description = 'The most popular articles. Keep exploring.';
- break;
- case( "mastodon"):
- $feed_title = 'Feed for Mastodon';
- $feed_description = 'New articles are published automatically to Mastodon.';
- break;
- default:
- $feed_title = 'Search for: ' . $title;
- $feed_description = 'All articles for "' . $title . '".';
- break;
- }
- $feed_title .= " | mostdiscussed.com";
-
- // create new feed
- $feed = FeedFactory::create();
-
- // multiple feeds are supported
- // if you are using caching you should set different cache keys for your feeds
-
- // cache the feed for $cache minutes (second parameter is optional)
- $feed->setCache($cache, 'feed_' . $title);
-
- // check if there is cached feed and build new only if is not
- if (!$feed->isCached())
- {
-
- // set your feed's title, description, link, pubdate and language
- $feed->setTitle($feed_title);
- $feed->setDescription($feed_description);
- $feed->setSubtitle($feed_description);
- #$feed->setLogo('http://yoursite.tld/logo.jpg');
- $feed->setLink(url('feed/' . $title));
- $feed->setDateFormat('datetime'); // 'datetime', 'timestamp' or 'carbon'
- $feed->setPubdate($model[0]->created_at);
- $feed->setLang('en');
- $feed->setShortening(false); // true or false
-
- if ( "mastodon" == $title || "mastodon_test" == $title ) {
- $feed->setTextLimit(500); // maximum length of description text
- } else {
- $feed->setTextLimit(100); // maximum length of description text
- }
-
- foreach ($model as $post)
- {
-
- $desc = ($post->excerpt_html);
- $categories = null;
-
- if ( "mastodon" == $title || "mastodon_test" == $title ) {
-
- $cat_len= 0;
-
- if ( ! $post->getCategories()->get()->isEmpty() ) {
-
- $categories_ar = array("#MostDiscussed");
-
- foreach( $post->getCategories()->get() as $cat ) {
-
- // uppercase for every word in a possible multi worded hashtag
- $tmp_cat = ucwords($cat->name);
-
- // strip everything after / for brevity
- if ( false !== strpos($tmp_cat, "/") )
- $tmp_cat = substr($tmp_cat, 0, strpos($tmp_cat, "/"));
-
- // replace any non-alphanumeric character except underscore, because
- // it's not allowed to be used in a hashtag
- $tmp_cat = preg_replace("/[^A-Za-z0-9_]/", '', $tmp_cat);
-
- // trim just in case
- $tmp_cat = trim($tmp_cat);
-
- // if it's not empty, add it to the hashtag array
- if ( "" != $tmp_cat )
- $categories_ar[] = "#". $tmp_cat;
- }
-
- // remove possible duplicates (because stripping after "/")
- $categories_ar = array_unique($categories_ar);
-
- // join to one string
- $categories = implode(" ", $categories_ar);
-
- $cat_counter = $post->getCategories()->get()->count();
- $cat_len = mb_strlen($categories, "UTF-8");
- }
-
- $link = env('APP_URL') . "/article/" . $post->id;
-
- // max desc length is 500 - 23 (Link) - $cat_len - 2 (white spaces)
- $max_len = 500 - 23 - $cat_len - 2;
-
- if ( "mastodon_test" == $title ) {
- $desc = Helper::mastodon_summary($desc, $max_len);
- }else {
- $desc = Helper::first_sentence($desc, $max_len);
- #$desc = Helper::mastodon_summary($desc, $max_len);
- }
-
- $desc .= " " . $categories;# . $discussions;
-
- // set item's title, author, url, pubdate, description, content, enclosure (optional)*
- $feed->addItem([
- 'title' => $desc, // mastofeed.org seems to ignore the description field
- 'author' => env('APP_NAME'),
- 'url' => $link,
- 'link' => $link,
- 'pubdate' => $post->created_at,
- 'description' => $desc,
- 'content' => $desc
- ]);
-
- } else {
- if ( ! $post->getCategories()->get()->isEmpty() ) {
- $categories = "<br>";
- foreach( $post->getCategories()->get() as $cat ) {
- $categories .= "<a href='". \URL::to('/topic/' . $cat->name) ."'>". $cat->name . "</a> | ";
- }
- $categories = rtrim($categories, " | ");
- $desc .= "<br>Topics:";
- $desc .= $categories;
- }
-
- $discussions = "<br>";
- foreach( $post->getDiscussions()->orderBy('comments', 'desc')->get() as $dis ) {
- $discussions .= "<a href='" . $dis->source_url . "'>" . $dis->title . "</a> | ";
- $discussions .= Helper::formatTimestamp($dis->posted_on) . " | " . $dis->upvotes . " Upvotes | " . $dis->comments . " Comments<br>";
- }
- $desc .= "<br><br>Discussions:";
- $desc .= $discussions;
-
- // set item's title, author, url, pubdate, description, content, enclosure (optional)*
- $feed->addItem([
- 'title' => $post->title,
- 'author' => env('APP_NAME'),
- 'url' => \URL::to($post->url),
- 'link' => \URL::to($post->url),
- 'pubdate' => $post->created_at,
- 'description' => $desc,
- 'content' => $desc
- ]);
- }
- }
-
- }
-
- // first param is the feed format
- // optional: second param is cache duration (value of 0 turns off caching)
- // optional: you can set custom cache key with 3rd param as string
- $xml = $feed->render('atom', $cache, 'feed_' . $title);
- return response($xml, 200, [
- 'Content-Type' => 'application/xml'
- ]);
- }
-
- public static function first_sentence($content, $max_len = NULL) {
-
- $content = html_entity_decode(strip_tags($content));
- $content = ltrim($content);
- $pos = strpos($content, '.');
-
- if($pos === false) {
- if ( is_null($max_len) ) {
- return $content;
- } else {
- return substr($content, 0, $max_len);
- }
- }
- else {
- return substr($content, 0, $pos+1);
- }
-
- }
-
- private static function next_sentence($content, $max_len = NULL) {
-
- $content = ltrim($content);
- $pos = strpos($content, '.');
-
- if($pos === false) {
- if ( is_null($max_len) ) {
- return $content;
- } else {
- return substr($content, 0, $max_len);
- }
- } else {
- return substr($content, 0, $pos+1);
- }
-
- }
-
- /**
- * Make sure to toot as much text as possible while still staying below the limit of 500 chars -link (23 chars) - 2 (white spaces) - possible hashtags
- */
- public static function mastodon_summary($excerpt, $max_len = 475){
-
- /**
- * Strip HTML from Wikipedia excerpt
- */
- $excerpt = ltrim(html_entity_decode(strip_tags($excerpt)));
-
- /**
- * The toot to be returned
- */
- $content = "";
-
- /**
- * https://stackoverflow.com/questions/16377437/split-a-text-into-sentences
- */
- $sentences = preg_split('/(?<=[.?!])\s+(?=[a-z])/i', $excerpt);
- echo "<pre>";
- echo "-----------------------";
- var_dump($excerpt);
- var_dump($sentences);
-
- for ( $i = 0; $i < count($sentences); $i++ ) {
- #if ( mb_strlen($content) < $max_len && (mb_strlen($content) + mb_strlen($sentences) ) {
- if ( mb_strlen($content) < $max_len && (mb_strlen($content) + mb_strlen($sentences) ) < $max_len ){
-
- //var_dump(rtrim(ltrim($sentences[$i])));
- $content .= rtrim(ltrim($sentences[$i]));
- var_dump("ok", $max_len);
-
- $max_len = $max_len - mb_strlen($sentences[$i]);
- var_dump("ok", $max_len);
-
- } else {
- var_dump("fail", mb_strlen($content), $max_len);
- break;
- }
- }
- return $content;
-
- echo "<pre>";
- while ( mb_strlen($content) < $max_len ) {
-
- /**
- * Get next sentence
- */
- $next_sentence = Helper::next_sentence($excerpt, $max_len);
- var_dump($next_sentence);
-
- if ( "" == $next_sentence ) {
- break;
- }
-
- /**
- * Check if $content + $next_sentence is still under $max_len
- */
- if ( (mb_strlen($content) + mb_strlen($next_sentence)) < $max_len ) {
-
- /**
- * add text
- */
- $content .= $next_sentence;
-
- /**
- * Recalc $max_len
- */
- $max_len = $max_len - mb_strlen($next_sentence);
-
- /**
- * Remove sentence from excerpt
- */
- $excerpt = substr($excerpt, mb_strlen($next_sentence));
-
- } else {
- break;
- }
- }
-
- return $content;
- }
-}