X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=showmore%2Fshowmore.php;h=af158a55a3006aa9410df296d6d175acf8f5e4e0;hb=c3e93f1ed9a487f823bcc75ddd43024334c25bfc;hp=2b4d5d0fcce8337670120eb0e0ae5ae9633bf831;hpb=c42807e2eff2aa41a28676d4bdaacb82e537a9f0;p=friendica-addons.git diff --git a/showmore/showmore.php b/showmore/showmore.php index 2b4d5d0f..af158a55 100755 --- a/showmore/showmore.php +++ b/showmore/showmore.php @@ -8,6 +8,8 @@ * */ +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'); @@ -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')).''. + ''; } }