Source of file InsiteContentManager.php
Size: 6,564 Bytes - Last Modified: 2021-12-24T05:18:05+00:00
/var/www/docs.ssmods.com/process/src/src/controllers/InsiteContentManager.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 | <?php /* use SilverStripe\CMS\Model\SiteTree; use SilverStripe\View\Requirements; use SilverStripe\Core\Convert; use SilverStripe\ORM\FieldType\DBField; */ class InsiteContentManager extends Page_Controller { private static $allowed_actions = array( 'view', ); function Link($action = null) { return "fullcontent/$action"; } static function find_link($action = false) { return self::create()->Link($action); } function view() { $id = Convert::raw2sql($this->urlParamsID()); if ($id) { $page = SiteTree::get()->byID($id); Requirements::clear(); Requirements::css(PLUGIN_DIR . '/owl-carousel/owl.carousel.css'); Requirements::css(PLUGIN_DIR . '/owl-carousel/owl.theme.css'); Requirements::css(PLUGIN_DIR . '/owl-carousel/owl.theme.css'); Requirements::css(PROJECT . '/css/typography.css'); Requirements::javascript(PLUGIN_DIR . '/owl-carousel/owl.carousel.min.js'); Requirements::javascript(PROJECT . '/js/SiteManager.js'); Requirements::javascript(PROJECT . '/js/owl.carousel.init.js'); return $page->renderWith(array("ContentPopup")); } } static public function AddProtocol($url) { if (strtolower(substr($url, 0, 8)) !== 'https://' && strtolower(substr($url, 0, 7)) !== 'http://') { return 'http://' . $url; } return $url; } /** * * @param array $request * @param array $Unset * @return array */ public static function cleanREQUEST(array $request, array $Unset = array()) { $request = Convert::raw2sql($request); $aUnset = array('url', 'SecurityID'); $arrUnset = array_merge($aUnset, $Unset); foreach ($arrUnset as $value) { unset($request[$value]); } return $request; } public static function truncate($text, $length = "50", $ending = '...', $exact = false, $considerHtml = true) { if ($considerHtml) { // if the plain text is shorter than the maximum length, return the whole text if (strlen(preg_replace('/<.*?>/', '', $text)) <= $length) { return $text; } // splits all html-tags to scanable lines preg_match_all('/(<.+?>)?([^<>]*)/s', $text, $lines, PREG_SET_ORDER); $total_length = strlen($ending); $open_tags = array(); $truncate = ''; foreach ($lines as $line_matchings) { // if there is any html-tag in this line, handle it and add it (uncounted) to the output if (!empty($line_matchings[1])) { // if it's an "empty element" with or without xhtml-conform closing slash if (preg_match('/^<(\s*.+?\/\s*|\s*(img|br|input|hr|area|base|basefont|col|frame|isindex|link|meta|param)(\s.+?)?)>$/is', $line_matchings[1])) { // do nothing // if tag is a closing tag } else if (preg_match('/^<\s*\/([^\s]+?)\s*>$/s', $line_matchings[1], $tag_matchings)) { // delete tag from $open_tags list $pos = array_search($tag_matchings[1], $open_tags); if ($pos !== false) { unset($open_tags[$pos]); } // if tag is an opening tag } else if (preg_match('/^<\s*([^\s>!]+).*?>$/s', $line_matchings[1], $tag_matchings)) { // add tag to the beginning of $open_tags list array_unshift($open_tags, strtolower($tag_matchings[1])); } // add html-tag to $truncate'd text $truncate .= $line_matchings[1]; } // calculate the length of the plain text part of the line; handle entities as one character $content_length = strlen(preg_replace('/&[0-9a-z]{2,8};|&#[0-9]{1,7};|[0-9a-f]{1,6};/i', ' ', $line_matchings[2])); if ($total_length + $content_length > $length) { // the number of characters which are left $left = $length - $total_length; $entities_length = 0; // search for html entities if (preg_match_all('/&[0-9a-z]{2,8};|&#[0-9]{1,7};|[0-9a-f]{1,6};/i', $line_matchings[2], $entities, PREG_OFFSET_CAPTURE)) { // calculate the real length of all entities in the legal range foreach ($entities[0] as $entity) { if ($entity[1] + 1 - $entities_length <= $left) { $left--; $entities_length += strlen($entity[0]); } else { // no more characters left break; } } } $truncate .= substr($line_matchings[2], 0, $left + $entities_length); // maximum lenght is reached, so get off the loop break; } else { $truncate .= $line_matchings[2]; $total_length += $content_length; } // if the maximum length is reached, get off the loop if ($total_length >= $length) { break; } } } else { if (strlen($text) <= $length) { return $text; } else { $truncate = substr($text, 0, $length - strlen($ending)); } } // if the words shouldn't be cut in the middle... if (!$exact) { // ...search the last occurance of a space... $spacepos = strrpos($truncate, ' '); if (isset($spacepos)) { // ...and cut the text in this position $truncate = substr($truncate, 0, $spacepos); } } // add the defined ending to the text $truncate .= $ending; if ($considerHtml) { // close all unclosed html-tags foreach ($open_tags as $tag) { $truncate .= '</' . $tag . '>'; } } return DBField::create_field('HTMLText', $truncate); } } |