From 7ff83424592cd5a3c58fe2e6d7e67aeef5144caf Mon Sep 17 00:00:00 2001 From: horus Date: Sat, 27 Jun 2026 05:40:45 +0200 Subject: merge --- ssh/app/Libraries/Helper.php | 303 ------------------------------------------- 1 file changed, 303 deletions(-) delete mode 100644 ssh/app/Libraries/Helper.php (limited to 'ssh/app/Libraries/Helper.php') 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 @@ -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 = "
"; - foreach( $post->getCategories()->get() as $cat ) { - $categories .= "name) ."'>". $cat->name . " | "; - } - $categories = rtrim($categories, " | "); - $desc .= "
Topics:"; - $desc .= $categories; - } - - $discussions = "
"; - foreach( $post->getDiscussions()->orderBy('comments', 'desc')->get() as $dis ) { - $discussions .= "" . $dis->title . " | "; - $discussions .= Helper::formatTimestamp($dis->posted_on) . " | " . $dis->upvotes . " Upvotes | " . $dis->comments . " Comments
"; - } - $desc .= "

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 "
";
-		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 "
";
-		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;
-	}
-}
-- 
cgit v1.2.3