X-Git-Url: https://git.mxchange.org/?p=friendica-addons.git;a=blobdiff_plain;f=showmore%2Fshowmore.php;h=f6e5028c68bd70d1027a49acf234cf3566d93796;hp=2b4d5d0fcce8337670120eb0e0ae5ae9633bf831;hb=c71f7b0e1a7bb5ca88347b295dd3a4cc3106c5a9;hpb=c42807e2eff2aa41a28676d4bdaacb82e537a9f0 diff --git a/showmore/showmore.php b/showmore/showmore.php old mode 100755 new mode 100644 index 2b4d5d0f..f6e5028c --- a/showmore/showmore.php +++ b/showmore/showmore.php @@ -7,17 +7,19 @@ * based upon NSFW from Mike Macgirvin * */ +use Friendica\Core\Addon; +use Friendica\Core\PConfig; function showmore_install() { - register_hook('prepare_body', 'addon/showmore/showmore.php', 'showmore_prepare_body'); - register_hook('plugin_settings', 'addon/showmore/showmore.php', 'showmore_addon_settings'); - register_hook('plugin_settings_post', 'addon/showmore/showmore.php', 'showmore_addon_settings_post'); + Addon::registerHook('prepare_body', 'addon/showmore/showmore.php', 'showmore_prepare_body'); + Addon::registerHook('addon_settings', 'addon/showmore/showmore.php', 'showmore_addon_settings'); + Addon::registerHook('addon_settings_post', 'addon/showmore/showmore.php', 'showmore_addon_settings_post'); } function showmore_uninstall() { - unregister_hook('prepare_body', 'addon/showmore/showmore.php', 'showmore_prepare_body'); - unregister_hook('plugin_settings', 'addon/showmore/showmore.php', 'showmore_addon_settings'); - unregister_hook('plugin_settings_post', 'addon/showmore/showmore.php', 'showmore_addon_settings_post'); + Addon::unregisterHook('prepare_body', 'addon/showmore/showmore.php', 'showmore_prepare_body'); + Addon::unregisterHook('addon_settings', 'addon/showmore/showmore.php', 'showmore_addon_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/showmore/showmore.php', 'showmore_addon_settings_post'); } function showmore_addon_settings(&$a,&$s) { @@ -29,13 +31,19 @@ function showmore_addon_settings(&$a,&$s) { $a->page['htmlhead'] .= ''."\r\n"; - $enable_checked = (intval(get_pconfig(local_user(),'showmore','disable')) ? '' : ' checked="checked"'); - $chars = get_pconfig(local_user(),'showmore','chars'); + $enable_checked = (intval(PConfig::get(local_user(),'showmore','disable')) ? '' : ' checked="checked"'); + $chars = PConfig::get(local_user(),'showmore','chars'); if(!$chars) $chars = '1100'; - $s .= '
'; + $s .= ''; $s .= '

' . t('"Show more" Settings').'

'; + $s .= '
'; + $s .= ''; @@ -58,34 +66,66 @@ function showmore_addon_settings_post(&$a,&$b) { return; if($_POST['showmore-submit']) { - set_pconfig(local_user(),'showmore','chars',trim($_POST['showmore-chars'])); + PConfig::set(local_user(),'showmore','chars',trim($_POST['showmore-chars'])); $enable = ((x($_POST,'showmore-enable')) ? intval($_POST['showmore-enable']) : 0); $disable = 1-$enable; - set_pconfig(local_user(),'showmore','disable', $disable); + PConfig::set(local_user(),'showmore','disable', $disable); info( t('Show More Settings saved.') . EOL); } } +function get_body_length($body) { + $string = trim($body); + + // DomDocument doesn't like empty strings + if(! strlen($string)) { + return 0; + } + + // We need to get rid of hidden tags (display: none) + + // Get rid of the warning. It would be better to have some valid html as input + $dom = @DomDocument::loadHTML($body); + $xpath = new DOMXPath($dom); + + /* + * Checking any possible syntax of the style attribute with xpath is impossible + * So we just get any element with a style attribute, and check them with a regexp + */ + $xr = $xpath->query('//*[@style]'); + foreach($xr as $node) { + if(preg_match('/.*display: *none *;.*/',$node->getAttribute('style'))) { + // Hidden, remove it from its parent + $node->parentNode->removeChild($node); + } + } + // Now we can get the body of our HTML DomDocument, it contains only what is visible + $string = $dom->saveHTML(); + + $string = strip_tags($string); + return strlen($string); +} + function showmore_prepare_body(&$a,&$b) { $words = null; - if(get_pconfig(local_user(),'showmore','disable')) + if(PConfig::get(local_user(),'showmore','disable')) return; - $chars = (int)get_pconfig(local_user(),'showmore','chars'); + $chars = (int)PConfig::get(local_user(),'showmore','chars'); if(!$chars) $chars = 1100; - if (strlen(strip_tags(trim($b['html']))) > $chars) { + if (get_body_length($b['html']) > $chars) { $found = true; $shortened = trim(showmore_cutitem($b['html'], $chars))."..."; } if($found) { $rnd = random_string(8); - $b['html'] = ''.$shortened." ". - ''.sprintf(t('show more')).''. - ''; + $b['html'] = ''.$shortened." ". + ''.sprintf(t('show more')).''. + ''; } } @@ -116,7 +156,7 @@ function showmore_cutitem($text, $limit) { @$doc->loadHTML($doctype."".$text.""); $text = $doc->saveHTML(); - $text = str_replace(array("", "", $doctype), array("", "", ""), $text); + $text = str_replace(["", "", $doctype], ["", "", ""], $text); return($text); }