cleanup (license, help, dc2.19, PSR2, short array, php7.3+, php8.0.x)

This commit is contained in:
Jean-Christian Paul Denis 2021-08-26 00:51:55 +02:00
parent 140706e705
commit 50f881d512
9 changed files with 531 additions and 546 deletions

View File

@ -1,71 +1,59 @@
lastpostsExtend 2021.08.25
* cleanup (license, help, dc2.19, PSR2, short array, php7.3+, php8.0.x)
lastpostsExtend 2016.10.24 lastpostsExtend 2016.10.24
===========================================================
* oops missed 2015 update * oops missed 2015 update
lastpostsExtend 2016.10.23 lastpostsExtend 2016.10.23
===========================================================
* Used new widget rendering method * Used new widget rendering method
* Updated year * Updated year
lastpostsExtend 2015.01.13 Pierre Van Glabeke lastpostsExtend 2015.01.13 Pierre Van Glabeke
===========================================================
* Compatibilité dotclear 2.7 * Compatibilité dotclear 2.7
* Ajout options widget et compatibilité currywurst * Ajout options widget et compatibilité currywurst
* Modifications locales * Modifications locales
lastpostsExtend 2013.12.01 lastpostsExtend 2013.12.01
===========================================================
* Fix XHTML validation on widget * Fix XHTML validation on widget
* Fix category id from wrong table. thx BG * Fix category id from wrong table. thx BG
lastpostsExtend 2013.11.12 lastpostsExtend 2013.11.12
===========================================================
* Switch to Dotclear 2.6 * Switch to Dotclear 2.6
* Add widget options * Add widget options
lastpostsExtend 2013.06.30 lastpostsExtend 2013.06.30
===========================================================
* Used new 'homeonly' style for widgets * Used new 'homeonly' style for widgets
lastpostsExtend 2011.08.01 lastpostsExtend 2011.08.01
===========================================================
* Added support of plugin muppet (post types) * Added support of plugin muppet (post types)
* Try to fix date compare on sql request * Try to fix date compare on sql request
lastpostsExtend 0.10 - 2010-08-19 lastpostsExtend 0.10 - 2010-08-19
===========================================================
* Sort by comments (annso) * Sort by comments (annso)
lastpostsExtend 0.9 - 2010-06-09 lastpostsExtend 0.9 - 2010-06-09
===========================================================
* Writed now for DC 2.2 or higher * Writed now for DC 2.2 or higher
lastpostsExtend 0.8.2 - 2010-03-29 lastpostsExtend 0.8.2 - 2010-03-29
===========================================================
* Fixed getPosts by using sudo * Fixed getPosts by using sudo
* Fixed entryFirstImage on non-pushided post * Fixed entryFirstImage on non-pushided post
lastpostsExtend 0.8.1 - 2009-12-31 lastpostsExtend 0.8.1 - 2009-12-31
===========================================================
* Happy new year! * Happy new year!
* Fixed multiple bugs and crashes * Fixed multiple bugs and crashes
lastpostsExtend 0.8 - 2009-12-30 lastpostsExtend 0.8 - 2009-12-30
===========================================================
* Added post words limit * Added post words limit
* Added post status limit * Added post status limit
* Added post password limit (closes #385) * Added post password limit (closes #385)
* Changed blog->getPosts to internal getPosts * Changed blog->getPosts to internal getPosts
lastpostsExtend 0.7 2009-12-10 lastpostsExtend 0.7 2009-12-10
===========================================================
* Added entryFirstimage * Added entryFirstimage
* Fixed typo * Fixed typo
lastpostsExtend 0.6 - 2009-08-23 lastpostsExtend 0.6 - 2009-08-23
===========================================================
* Added ''pluginsPage'' support * Added ''pluginsPage'' support
lastpostsExtend 0.5 - 2009-08-16 lastpostsExtend 0.5 - 2009-08-16
===========================================================
* Fixed php 5.3 compatibility * Fixed php 5.3 compatibility

View File

@ -20,3 +20,9 @@ First install lastpostsExtend, manualy from a zip package or from
Dotaddict repository. (See Dotclear's documentation to know how do this) Dotaddict repository. (See Dotclear's documentation to know how do this)
Add and configure "Last entries (Extended)" from widgets manager. Add and configure "Last entries (Extended)" from widgets manager.
## MORE
* License : GNU GPL v2
* Source & contribution : [GitHub Page](https://github.com/JcDenis/lastpostsExtend)
* Packages & details: [Dotaddict Page](https://plugins.dotaddict.org/dc2/details/lastpostsExtend)

View File

@ -3,8 +3,7 @@
# #
# This file is part of lastpostsExtend, a plugin for Dotclear 2. # This file is part of lastpostsExtend, a plugin for Dotclear 2.
# #
# Copyright (c) 2009-2016 Jean-Christian Denis and contributors # Copyright (c) 2009-2021 Jean-Christian Denis and contributors
# contact@jcdenis.fr http://jcdenis.net
# #
# Licensed under the GPL version 2.0 license. # Licensed under the GPL version 2.0 license.
# A copy of this license is available in LICENSE file or at # A copy of this license is available in LICENSE file or at
@ -13,8 +12,7 @@
# -- END LICENSE BLOCK ------------------------------------ # -- END LICENSE BLOCK ------------------------------------
if (!defined('DC_CONTEXT_ADMIN')) { if (!defined('DC_CONTEXT_ADMIN')) {
return null;
return null;
} }
require dirname(__FILE__).'/_widgets.php'; require dirname(__FILE__) . '/_widgets.php';

View File

@ -3,8 +3,7 @@
# #
# This file is part of lastpostsExtend, a plugin for Dotclear 2. # This file is part of lastpostsExtend, a plugin for Dotclear 2.
# #
# Copyright (c) 2009-2016 Jean-Christian Denis and contributors # Copyright (c) 2009-2021 Jean-Christian Denis and contributors
# contact@jcdenis.fr http://jcdenis.net
# #
# Licensed under the GPL version 2.0 license. # Licensed under the GPL version 2.0 license.
# A copy of this license is available in LICENSE file or at # A copy of this license is available in LICENSE file or at
@ -13,24 +12,20 @@
# -- END LICENSE BLOCK ------------------------------------ # -- END LICENSE BLOCK ------------------------------------
if (!defined('DC_RC_PATH')) { if (!defined('DC_RC_PATH')) {
return null;
return null;
} }
$this->registerModule( $this->registerModule(
/* Name */ 'Last entries (Extended)',
"Last entries (Extended)", 'Extended list of entries',
/* Description*/ 'Jean-Christian Denis and contributors',
"Extended list of entries", '2021.08.25',
/* Author */ [
"Jean-Christian Denis", 'permissions' => 'admin',
/* Version */ 'type' => 'plugin',
'2016.10.24', 'dc_min' => '2.19',
array( 'support' => 'https://github.com/JcDenis/lastpostsExtend',
'permissions' => 'admin', 'details' => 'http://plugins.dotaddict.org/dc2/details/lastpostsExtend',
'type' => 'plugin', 'repository' => 'https://raw.githubusercontent.com/JcDenis/lastpostsExtend/master/repository.xml'
'dc_min' => '2.10', ]
'support' => 'http://lab.dotclear.org/wiki/plugin/lastpostsExtend',
'details' => 'http://plugins.dotaddict.org/dc2/details/lastpostsExtend'
)
); );

View File

@ -3,8 +3,7 @@
# #
# This file is part of lastpostsExtend, a plugin for Dotclear 2. # This file is part of lastpostsExtend, a plugin for Dotclear 2.
# #
# Copyright (c) 2009-2016 Jean-Christian Denis and contributors # Copyright (c) 2009-2021 Jean-Christian Denis and contributors
# contact@jcdenis.fr http://jcdenis.net
# #
# Licensed under the GPL version 2.0 license. # Licensed under the GPL version 2.0 license.
# A copy of this license is available in LICENSE file or at # A copy of this license is available in LICENSE file or at
@ -13,8 +12,7 @@
# -- END LICENSE BLOCK ------------------------------------ # -- END LICENSE BLOCK ------------------------------------
if (!defined('DC_RC_PATH')) { if (!defined('DC_RC_PATH')) {
return null;
return null;
} }
require dirname(__FILE__).'/_widgets.php'; require dirname(__FILE__) . '/_widgets.php';

View File

@ -3,8 +3,7 @@
# #
# This file is part of lastpostsExtend, a plugin for Dotclear 2. # This file is part of lastpostsExtend, a plugin for Dotclear 2.
# #
# Copyright (c) 2009-2016 Jean-Christian Denis and contributors # Copyright (c) 2009-2021 Jean-Christian Denis and contributors
# contact@jcdenis.fr http://jcdenis.net
# #
# Licensed under the GPL version 2.0 license. # Licensed under the GPL version 2.0 license.
# A copy of this license is available in LICENSE file or at # A copy of this license is available in LICENSE file or at
@ -13,507 +12,495 @@
# -- END LICENSE BLOCK ------------------------------------ # -- END LICENSE BLOCK ------------------------------------
if (!defined('DC_RC_PATH')) { if (!defined('DC_RC_PATH')) {
return null;
return null;
} }
$core->addBehavior( $core->addBehavior(
'initWidgets', 'initWidgets',
array('lastpostsextendWidget', 'initWidget') ['lastpostsextendWidget', 'initWidget']
); );
class lastpostsextendWidget class lastpostsextendWidget
{ {
public static function initWidget($w) public static function initWidget($w)
{ {
global $core; global $core;
# Create widget # Create widget
$w->create( $w->create(
'lastpostsextend', 'lastpostsextend',
__('Last entries (Extended)'), __('Last entries (Extended)'),
array('lastpostsextendWidget', 'parseWidget'), ['lastpostsextendWidget', 'parseWidget'],
null, null,
__('Extended list of entries') __('Extended list of entries')
); );
# Title # Title
$w->lastpostsextend->setting( $w->lastpostsextend->setting(
'title', 'title',
__('Title:'), __('Title:'),
__('Last entries'), __('Last entries'),
'text' 'text'
); );
# type # type
$posttypes = array( $posttypes = [
__('Post') => 'post', __('Post') => 'post',
__('Page') => 'page', __('Page') => 'page',
__('Gallery') => 'galitem' __('Gallery') => 'galitem'
); ];
# plugin muppet types # plugin muppet types
if ($core->plugins->moduleExists('muppet')) { if ($core->plugins->moduleExists('muppet')) {
$muppet_types = muppet::getPostTypes(); $muppet_types = muppet::getPostTypes();
if(is_array($muppet_types) && !empty($muppet_types)) { if(is_array($muppet_types) && !empty($muppet_types)) {
foreach($muppet_types as $k => $v) {
$posttypes[$v['name']] = $k;
}
}
}
$w->lastpostsextend->setting(
'posttype',
__('Type:'),
'post',
'combo',
$posttypes
);
# Category (post and page have same category)
$rs = $core->blog->getCategories(array(
'post_type' => 'post'
));
$categories = array(
'' => '',
__('Uncategorized') => 'null'
);
while ($rs->fetch()) {
$categories[str_repeat(
'  ',
$rs->level-1
).'• '.html::escapeHTML($rs->cat_title)] =
$rs->cat_id;
}
$w->lastpostsextend->setting(
'category',
__('Category:'),
'',
'combo',
$categories
);
unset($rs,$categories);
# Pasworded
$w->lastpostsextend->setting(
'passworded',
__('Protection:'),
'no',
'combo',
array(
__('all') => 'all',
__('only without password') => 'no',
__('only with password') => 'yes'
)
);
# Status
$w->lastpostsextend->setting(
'status',
__('Status:'),
'1',
'combo',
array(
__('all') => 'all',
__('pending') => '-2',
__('scheduled') => '-1',
__('unpublished') => '0',
__('published') => '1'
)
);
# Selected entries only
$w->lastpostsextend->setting(
'selectedonly',
__('Selected entries only'),
0,
'check'
);
# Updated entries only
$w->lastpostsextend->setting(
'updatedonly',
__('Updated entries only'),
0,
'check'
);
# Tag
if ($core->plugins->moduleExists('tags'))
{
$w->lastpostsextend->setting(
'tag',
__('Limit to tags:'),
'',
'text'
);
}
# Search
$w->lastpostsextend->setting(
'search',
__('Limit to words:'),
'',
'text'
);
# Entries limit
$w->lastpostsextend->setting(
'limit',
__('Entries limit:'),
10,
'text'
);
# Sort type
$w->lastpostsextend->setting(
'sortby',
__('Order by:'),
'date',
'combo',
array(
__('Date') => 'date',
__('Title') => 'post_title',
__('Comments') => 'nb_comment'
)
);
# Sort order
$w->lastpostsextend->setting(
'sort',
__('Sort:'),
'desc',
'combo',
array(
__('Ascending') => 'asc',
__('Descending') => 'desc'
)
);
# First image
$w->lastpostsextend->setting(
'firstimage',
__('Show entries first image:'),
'',
'combo',
array(
__('no') => '',
__('square') => 'sq',
__('thumbnail') => 't',
__('small') => 's',
__('medium') => 'm',
__('original') => 'o'
)
);
# With excerpt
$w->lastpostsextend->setting(
'excerpt',
__('Show entries excerpt'),
0,
'check'
);
# Excerpt length
$w->lastpostsextend->setting(
'excerptlen',
__('Excerpt length:'),
100,
'text'
);
# Comment count
$w->lastpostsextend->setting(
'commentscount',
__('Show comments count'),
0,
'check'
);
# Home only
$w->lastpostsextend->setting(
'homeonly',
__('Display on:'),
0,
'combo',
array(
__('All pages') => 0,
__('Home page only') => 1,
__('Except on home page') => 2
)
);
# widget option - content only
$w->lastpostsextend->setting(
'content_only',
__('Content only'),
0,
'check'
);
# widget option - additionnal CSS
$w->lastpostsextend->setting(
'class',
__('CSS class:'),
''
);
# widget option - put offline
$w->lastpostsextend->setting(
'offline',
__('Offline'),
0,
'check'
);
}
public static function parseWidget($w)
{
global $core;
$params = array(
'sql' => '',
'columns' => array(),
'from' => ''
);
# Widget is offline foreach($muppet_types as $k => $v) {
if ($w->offline) $posttypes[$v['name']] = $k;
return; }
}
}
$w->lastpostsextend->setting(
'posttype',
__('Type:'),
'post',
'combo',
$posttypes
);
# Category (post and page have same category)
$rs = $core->blog->getCategories([
'post_type' => 'post'
]);
$categories = [
'' => '',
__('Uncategorized') => 'null'
];
while ($rs->fetch()) {
$categories[str_repeat(
'  ',
$rs->level-1
) . '• ' . html::escapeHTML($rs->cat_title)] =
$rs->cat_id;
}
$w->lastpostsextend->setting(
'category',
__('Category:'),
'',
'combo',
$categories
);
unset($rs, $categories);
# Pasworded
$w->lastpostsextend->setting(
'passworded',
__('Protection:'),
'no',
'combo',
[
__('all') => 'all',
__('only without password') => 'no',
__('only with password') => 'yes'
]
);
# Status
$w->lastpostsextend->setting(
'status',
__('Status:'),
'1',
'combo',
[
__('all') => 'all',
__('pending') => '-2',
__('scheduled') => '-1',
__('unpublished') => '0',
__('published') => '1'
]
);
# Selected entries only
$w->lastpostsextend->setting(
'selectedonly',
__('Selected entries only'),
0,
'check'
);
# Updated entries only
$w->lastpostsextend->setting(
'updatedonly',
__('Updated entries only'),
0,
'check'
);
# Tag
if ($core->plugins->moduleExists('tags')) {
$w->lastpostsextend->setting(
'tag',
__('Limit to tags:'),
'',
'text'
);
}
# Search
$w->lastpostsextend->setting(
'search',
__('Limit to words:'),
'',
'text'
);
# Entries limit
$w->lastpostsextend->setting(
'limit',
__('Entries limit:'),
10,
'text'
);
# Sort type
$w->lastpostsextend->setting(
'sortby',
__('Order by:'),
'date',
'combo',
[
__('Date') => 'date',
__('Title') => 'post_title',
__('Comments') => 'nb_comment'
]
);
# Sort order
$w->lastpostsextend->setting(
'sort',
__('Sort:'),
'desc',
'combo',
[
__('Ascending') => 'asc',
__('Descending') => 'desc'
]
);
# First image
$w->lastpostsextend->setting(
'firstimage',
__('Show entries first image:'),
'',
'combo',
[
__('no') => '',
__('square') => 'sq',
__('thumbnail') => 't',
__('small') => 's',
__('medium') => 'm',
__('original') => 'o'
]
);
# With excerpt
$w->lastpostsextend->setting(
'excerpt',
__('Show entries excerpt'),
0,
'check'
);
# Excerpt length
$w->lastpostsextend->setting(
'excerptlen',
__('Excerpt length:'),
100,
'text'
);
# Comment count
$w->lastpostsextend->setting(
'commentscount',
__('Show comments count'),
0,
'check'
);
# Home only
$w->lastpostsextend->setting(
'homeonly',
__('Display on:'),
0,
'combo',
[
__('All pages') => 0,
__('Home page only') => 1,
__('Except on home page') => 2
]
);
# widget option - content only
$w->lastpostsextend->setting(
'content_only',
__('Content only'),
0,
'check'
);
# widget option - additionnal CSS
$w->lastpostsextend->setting(
'class',
__('CSS class:'),
''
);
# widget option - put offline
$w->lastpostsextend->setting(
'offline',
__('Offline'),
0,
'check'
);
}
public static function parseWidget($w)
{
global $core;
$params = [
'sql' => '',
'columns' => [],
'from' => ''
];
# Home page only # Widget is offline
if ($w->homeonly == 1 && $core->url->type != 'default' if ($w->offline) {
|| $w->homeonly == 2 && $core->url->type == 'default' return;
) { }
return null;
}
# Need posts excerpt # Home page only
if ($w->excerpt) { if ($w->homeonly == 1 && $core->url->type != 'default'
$params['columns'][] = 'post_excerpt'; || $w->homeonly == 2 && $core->url->type == 'default') {
} return null;
}
# Passworded # Need posts excerpt
if ($w->passworded == 'yes') { if ($w->excerpt) {
$params['sql'] .= 'AND post_password IS NOT NULL '; $params['columns'][] = 'post_excerpt';
} }
elseif ($w->passworded == 'no') {
$params['sql'] .= 'AND post_password IS NULL ';
}
# Status # Passworded
if ($w->status != 'all') { if ($w->passworded == 'yes') {
$params['post_status'] = $w->status; $params['sql'] .= 'AND post_password IS NOT NULL ';
} }
elseif ($w->passworded == 'no') {
$params['sql'] .= 'AND post_password IS NULL ';
}
# Search words # Status
if ('' != $w->search) { if ($w->status != 'all') {
$params['search'] = $w->search; $params['post_status'] = $w->status;
} }
# Updated posts only # Search words
if ($w->updatedonly) { if ('' != $w->search) {
$params['sql'] .= $params['search'] = $w->search;
"AND post_creadt < post_upddt ". }
"AND post_dt < post_upddt ";
# Updated posts only
if ($w->updatedonly) {
$params['sql'] .=
"AND post_creadt < post_upddt " .
"AND post_dt < post_upddt ";
/* /*
$params['sql'] .= $params['sql'] .=
"AND TIMESTAMP(post_creadt ,'DD-MM-YYYY HH24:MI:SS') < TIMESTAMP(post_upddt ,'DD-MM-YYYY HH24:MI:SS') ". "AND TIMESTAMP(post_creadt ,'DD-MM-YYYY HH24:MI:SS') < TIMESTAMP(post_upddt ,'DD-MM-YYYY HH24:MI:SS') ".
"AND TIMESTAMP(post_dt ,'DD-MM-YYYY HH24:MI:SS') < TIMESTAMP(post_upddt ,'DD-MM-YYYY HH24:MI:SS') "; "AND TIMESTAMP(post_dt ,'DD-MM-YYYY HH24:MI:SS') < TIMESTAMP(post_upddt ,'DD-MM-YYYY HH24:MI:SS') ";
//*/ //*/
$params['order'] = $w->sortby == 'date' ? $params['order'] = $w->sortby == 'date' ?
'post_upddt ' : $w->sortby.' '; 'post_upddt ' : $w->sortby . ' ';
} }
else { else {
$params['order'] = $w->sortby == 'date' ? $params['order'] = $w->sortby == 'date' ?
'post_dt ' : $w->sortby.' '; 'post_dt ' : $w->sortby . ' ';
} }
$params['order'] .= $w->sort == 'asc' ? 'asc' : 'desc'; $params['order'] .= $w->sort == 'asc' ? 'asc' : 'desc';
$params['limit'] = abs((integer) $w->limit); $params['limit'] = abs((integer) $w->limit);
$params['no_content'] = true; $params['no_content'] = true;
# Selected posts only # Selected posts only
if ($w->selectedonly) { if ($w->selectedonly) {
$params['post_selected'] = 1; $params['post_selected'] = 1;
} }
# Type # Type
$params['post_type'] = $w->posttype; $params['post_type'] = $w->posttype;
# Category # Category
if ($w->category) { if ($w->category) {
if ($w->category == 'null') { if ($w->category == 'null') {
$params['sql'] .= ' AND P.cat_id IS NULL '; $params['sql'] .= ' AND P.cat_id IS NULL ';
} } elseif (is_numeric($w->category)) {
elseif (is_numeric($w->category)) { $params['cat_id'] = (integer) $w->category;
$params['cat_id'] = (integer) $w->category; } else {
} $params['cat_url'] = $w->category;
else { }
$params['cat_url'] = $w->category; }
}
}
# Tags # Tags
if ($core->plugins->moduleExists('tags') && $w->tag) { if ($core->plugins->moduleExists('tags') && $w->tag) {
$tags = explode(',', $w->tag); $tags = explode(',', $w->tag);
foreach($tags as $i => $tag) { foreach($tags as $i => $tag) {
$tags[$i] = trim($tag); $tags[$i] = trim($tag);
} }
$params['from'] .= ', '.$core->prefix.'meta META '; $params['from'] .= ', ' . $core->prefix . 'meta META ';
$params['sql'] .= 'AND META.post_id = P.post_id '; $params['sql'] .= 'AND META.post_id = P.post_id ';
$params['sql'] .= "AND META.meta_id ".$core->con->in($tags)." "; $params['sql'] .= "AND META.meta_id " . $core->con->in($tags) . " ";
$params['sql'] .= "AND META.meta_type = 'tag' "; $params['sql'] .= "AND META.meta_type = 'tag' ";
} }
$rs = $core->auth->sudo( $rs = $core->auth->sudo(
array($core->blog, 'getPosts'), [$core->blog, 'getPosts'],
$params, $params,
false false
); );
# No result # No result
if ($rs->isEmpty()) { if ($rs->isEmpty()) {
return null;
}
return null; # Return
} $res = $w->title ? $w->renderTitle(html::escapeHTML($w->title)) : '';
# Return while ($rs->fetch()) {
$res = $w->title ? $w->renderTitle(html::escapeHTML($w->title)) : ''; $res .= '<li>' .
'<' . ($rs->post_status == 1 ? 'a href="' . $rs->getURL() . '"' : 'span') .
' title="' .
dt::dt2str(
$core->blog->settings->system->date_format,
$rs->post_upddt
) . ', ' .
dt::dt2str(
$core->blog->settings->system->time_format,
$rs->post_upddt
) . '">' .
html::escapeHTML($rs->post_title) .
'</' . ($rs->post_status == 1 ? 'a' : 'span') . '>';
while ($rs->fetch()) { # Nb comments
$res .= '<li>'. if ($w->commentscount && $rs->post_status == 1) {
'<'.($rs->post_status == 1 ? 'a href="'.$rs->getURL().'"' : 'span'). $res .= ' (' . $rs->nb_comment . ')';
' title="'. }
dt::dt2str(
$core->blog->settings->system->date_format,
$rs->post_upddt
).', '.
dt::dt2str(
$core->blog->settings->system->time_format,
$rs->post_upddt
).'">'.
html::escapeHTML($rs->post_title).
'</'.($rs->post_status == 1 ? 'a' : 'span').'>';
# Nb comments # First image
if ($w->commentscount && $rs->post_status == 1) { if ($w->firstimage != '') {
$res .= ' ('.$rs->nb_comment.')'; $res .= self::entryFirstImage(
} $core,
$rs->post_type,
$rs->post_id,
$w->firstimage
);
}
# First image # Excerpt
if ($w->firstimage != '') { if ($w->excerpt) {
$res .= self::entryFirstImage( $excerpt = $rs->post_excerpt;
$core, if ($rs->post_format == 'wiki') {
$rs->post_type, $core->initWikiComment();
$rs->post_id, $excerpt = $core->wikiTransform($excerpt);
$w->firstimage $excerpt = $core->HTMLfilter($excerpt);
); }
} if (strlen($excerpt) > 0) {
$cut = text::cutString(
$excerpt,
abs((integer) $w->excerptlen)
);
$res .= ' : ' . $cut . (strlen($cut) < strlen($excerpt) ? '...' : '');
# Excerpt unset($cut);
if ($w->excerpt) { }
$excerpt = $rs->post_excerpt; }
if ($rs->post_format == 'wiki') { $res .= '</li>';
$core->initWikiComment(); }
$excerpt = $core->wikiTransform($excerpt);
$excerpt = $core->HTMLfilter($excerpt);
}
if (strlen($excerpt) > 0) {
$cut = text::cutString(
$excerpt,
abs((integer) $w->excerptlen)
);
$res .= ' : '.$cut.(strlen($cut) < strlen($excerpt) ?
'...' : '');
unset($cut); return $w->renderDiv(
} $w->content_only,
} 'lastpostsextend ' . $w->class,
$res .= '</li>'; '',
} '<ul>' . $res . '</ul>'
);
}
private static function entryFirstImage($core, $type, $id, $size = 's')
{
if (!in_array($type, ['post', 'page', 'galitem'])) {
return $w->renderDiv( return '';
$w->content_only, }
'lastpostsextend '.$w->class,
'',
'<ul>'.$res.'</ul>'
);
}
private static function entryFirstImage($core, $type, $id, $size='s')
{
if (!in_array($type, array('post', 'page', 'galitem'))) {
return ''; $rs = $core->auth->sudo(
} [$core->blog, 'getPosts'],
['post_id' => $id, 'post_type' => $type],
false
);
$rs = $core->auth->sudo( if ($rs->isEmpty()) {
array($core->blog, 'getPosts'), return '';
array('post_id' => $id, 'post_type' => $type), }
false
);
if ($rs->isEmpty()) { if (!preg_match('/^sq|t|s|m|o$/', $size)) {
$size = 's';
}
return ''; $p_url = $core->blog->settings->system->public_url;
} $p_site = preg_replace(
'#^(.+?//.+?)/(.*)$#',
'$1',
$core->blog->url
);
$p_root = $core->blog->public_path;
if (!preg_match('/^sq|t|s|m|o$/',$size)) { $pattern = '(?:' . preg_quote($p_site, '/') . ')?' . preg_quote($p_url, '/');
$size = 's'; $pattern = sprintf('/<img.+?src="%s(.*?\.(?:jpg|gif|png))"[^>]+/msu', $pattern);
}
$p_url = $core->blog->settings->system->public_url; $src = '';
$p_site = preg_replace( $alt = '';
'#^(.+?//.+?)/(.*)$#',
'$1',
$core->blog->url
);
$p_root = $core->blog->public_path;
$pattern = '(?:'.preg_quote($p_site, '/').')?'.preg_quote($p_url, '/'); $subject = $rs->post_excerpt_xhtml . $rs->post_content_xhtml . $rs->cat_desc;
$pattern = sprintf('/<img.+?src="%s(.*?\.(?:jpg|gif|png))"[^>]+/msu', $pattern); if (preg_match_all($pattern, $subject, $m) > 0) {
$src = ''; foreach ($m[1] as $i => $img) {
$alt = ''; if (($src = self::ContentFirstImageLookup($p_root, $img, $size)) !== false) {
$subject = $rs->post_excerpt_xhtml.$rs->post_content_xhtml.$rs->cat_desc; $src = $p_url . (dirname($img) != '/' ? dirname($img) : '') . '/' . $src;
if (preg_match_all($pattern, $subject, $m) > 0) { if (preg_match('/alt="([^"]+)"/', $m[0][$i], $malt)) {
$alt = $malt[1];
}
break;
}
}
}
foreach ($m[1] as $i => $img) { if (!$src) {
if (($src = self::ContentFirstImageLookup($p_root, $img, $size)) !== false) { return '';
}
$src = $p_url.(dirname($img) != '/' ? dirname($img) : '').'/'.$src; return
if (preg_match('/alt="([^"]+)"/', $m[0][$i], $malt)) { '<div class="img-box">' .
$alt = $malt[1]; '<div class="img-thumbnail">' .
} '<a title="' . html::escapeHTML($rs->post_title) . '" href="' . $rs->getURL() . '">' .
break; '<img alt="' . $alt . '" src="' . stripslashes($src) . '" />' .
} '</a></div>' .
} "</div>\n";
} }
if (!$src) { private static function ContentFirstImageLookup($root, $img, $size)
{
# Get base name and extension
$info = path::info($img);
$base = $info['base'];
if (preg_match('/^\.(.+)_(sq|t|s|m)$/', $base, $m)) {
$base = $m[1];
}
$res = false;
if ($size != 'o' && file_exists($root . '/' . $info['dirname'] . '/.' . $base . '_' . $size . '.jpg')) {
$res = '.' . $base . '_' . $size . '.jpg';
} else {
$f = $root . '/' . $info['dirname'] . '/' . $base;
if (file_exists($f . '.' . $info['extension'])) {
$res = $base . '.' . $info['extension'];
} elseif (file_exists($f . '.jpg')) {
$res = $base . '.jpg';
} elseif (file_exists($f . '.png')) {
$res = $base . '.png';
} elseif (file_exists($f . '.gif')) {
$res = $base . '.gif';
}
}
return ''; return $res ? $res : false;
} }
return
'<div class="img-box">'.
'<div class="img-thumbnail">'.
'<a title="'.html::escapeHTML($rs->post_title).'" href="'.$rs->getURL().'">'.
'<img alt="'.$alt.'" src="'.stripslashes($src).'" />'.
'</a></div>'.
"</div>\n";
}
private static function ContentFirstImageLookup($root,$img,$size)
{
# Get base name and extension
$info = path::info($img);
$base = $info['base'];
if (preg_match('/^\.(.+)_(sq|t|s|m)$/',$base,$m)) {
$base = $m[1];
}
$res = false;
if ($size != 'o' && file_exists($root.'/'.$info['dirname'].'/.'.$base.'_'.$size.'.jpg')) {
$res = '.'.$base.'_'.$size.'.jpg';
}
else {
$f = $root.'/'.$info['dirname'].'/'.$base;
if (file_exists($f.'.'.$info['extension'])) {
$res = $base.'.'.$info['extension'];
}
elseif (file_exists($f.'.jpg')) {
$res = $base.'.jpg';
}
elseif (file_exists($f.'.png')) {
$res = $base.'.png';
}
elseif (file_exists($f.'.gif')) {
$res = $base.'.gif';
}
}
return $res ? $res : false;
}
} }

View File

@ -1,52 +1,51 @@
<?php <?php
// Language: Français // Language: Français
// Module: lastpostsExtend - 2013.11.12 // Module: lastpostsExtend - 2021.08.25
// Date: 2013-11-13 07:22:55 // Date: 2021-08-25 22:43:47
// Translated with dcTranslater - 2013.05.11 // Translated with dcTranslater - 2021.08.18
#_widgets.php:34 #_widgets.php:33
$GLOBALS['__l10n']['Last entries (Extended)'] = 'Derniers billets (étendu)'; $GLOBALS['__l10n']['Last entries (Extended)'] = 'Derniers billets (étendu)';
#_widgets.php:37 #_widgets.php:36
$GLOBALS['__l10n']['Extended list of entries'] = 'Liste étendue de billets'; $GLOBALS['__l10n']['Extended list of entries'] = 'Liste étendue de billets';
#_widgets.php:48 #_widgets.php:47
$GLOBALS['__l10n']['Post'] = 'Billet'; $GLOBALS['__l10n']['Post'] = 'Billet';
#_widgets.php:50 #_widgets.php:49
$GLOBALS['__l10n']['Gallery'] = 'Galerie'; $GLOBALS['__l10n']['Gallery'] = 'Galerie';
#_widgets.php:95 #_widgets.php:94
$GLOBALS['__l10n']['Protection:'] = 'Protection :'; $GLOBALS['__l10n']['Protection:'] = 'Protection :';
#_widgets.php:100 #_widgets.php:99
$GLOBALS['__l10n']['only without password'] = 'seulement sans mot de passe'; $GLOBALS['__l10n']['only without password'] = 'seulement sans mot de passe';
#_widgets.php:101 #_widgets.php:100
$GLOBALS['__l10n']['only with password'] = 'seulement avec mot de passe'; $GLOBALS['__l10n']['only with password'] = 'seulement avec mot de passe';
#_widgets.php:121 #_widgets.php:120
$GLOBALS['__l10n']['Selected entries only'] = 'Billets sélectionnés seulement'; $GLOBALS['__l10n']['Selected entries only'] = 'Billets sélectionnés seulement';
#_widgets.php:128 #_widgets.php:127
$GLOBALS['__l10n']['Updated entries only'] = 'Billets mis à jour seulement'; $GLOBALS['__l10n']['Updated entries only'] = 'Billets mis à jour seulement';
#_widgets.php:137 #_widgets.php:135
$GLOBALS['__l10n']['Limit to tags:'] = 'Limiter aux mots-clés :'; $GLOBALS['__l10n']['Limit to tags:'] = 'Limiter aux mots-clés :';
#_widgets.php:145 #_widgets.php:143
$GLOBALS['__l10n']['Limit to words:'] = 'Limiter aux mots :'; $GLOBALS['__l10n']['Limit to words:'] = 'Limiter aux mots :';
#_widgets.php:182 #_widgets.php:180
$GLOBALS['__l10n']['Show entries first image:'] = 'Afficher la première image du billet :'; $GLOBALS['__l10n']['Show entries first image:'] = 'Afficher la première image du billet :';
#_widgets.php:197 #_widgets.php:195
$GLOBALS['__l10n']['Show entries excerpt'] = "Afficher l'extrait"; $GLOBALS['__l10n']['Show entries excerpt'] = 'Afficher l\'extrait';
#_widgets.php:204 #_widgets.php:202
$GLOBALS['__l10n']['Excerpt length:'] = "Taille de l'extrait :"; $GLOBALS['__l10n']['Excerpt length:'] = 'Taille de l\'extrait :';
#_widgets.php:211 #_widgets.php:209
$GLOBALS['__l10n']['Show comments count'] = 'Afficher le nombre de commentaires'; $GLOBALS['__l10n']['Show comments count'] = 'Afficher le nombre de commentaires';
?>

View File

@ -1,76 +1,77 @@
# Language: Français # Language: Français
# Module: lastpostsExtend - 2013.11.12 # Module: lastpostsExtend - 2021.08.25
# Date: 2013-11-13 07:22:55 # Date: 2021-08-25 22:43:47
# Translated with translater 2013.05.11 # Translated with translater 2021.08.18
msgid "" msgid ""
msgstr "" msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: lastpostsExtend 2013.11.12\n" "Project-Id-Version: lastpostsExtend 2021.08.25\n"
"POT-Creation-Date: \n" "POT-Creation-Date: \n"
"PO-Revision-Date: 2013-11-13T07:22:55+00:00\n" "PO-Revision-Date: 2021-08-25T22:43:47+00:00\n"
"Last-Translator: Jean-Christian Denis\n" "Last-Translator: Jean-Christian Denis\n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: _widgets.php:34 #: _widgets.php:33
msgid "Last entries (Extended)" msgid "Last entries (Extended)"
msgstr "Derniers billets (étendu)" msgstr "Derniers billets (étendu)"
#: _widgets.php:37 #: _widgets.php:36
msgid "Extended list of entries" msgid "Extended list of entries"
msgstr "Liste étendue de billets" msgstr "Liste étendue de billets"
#: _widgets.php:48 #: _widgets.php:47
msgid "Post" msgid "Post"
msgstr "Billet" msgstr "Billet"
#: _widgets.php:50 #: _widgets.php:49
msgid "Gallery" msgid "Gallery"
msgstr "Galerie" msgstr "Galerie"
#: _widgets.php:95 #: _widgets.php:94
msgid "Protection:" msgid "Protection:"
msgstr "Protection :" msgstr "Protection :"
#: _widgets.php:100 #: _widgets.php:99
msgid "only without password" msgid "only without password"
msgstr "seulement sans mot de passe" msgstr "seulement sans mot de passe"
#: _widgets.php:101 #: _widgets.php:100
msgid "only with password" msgid "only with password"
msgstr "seulement avec mot de passe" msgstr "seulement avec mot de passe"
#: _widgets.php:121 #: _widgets.php:120
msgid "Selected entries only" msgid "Selected entries only"
msgstr "Billets sélectionnés seulement" msgstr "Billets sélectionnés seulement"
#: _widgets.php:128 #: _widgets.php:127
msgid "Updated entries only" msgid "Updated entries only"
msgstr "Billets mis à jour seulement" msgstr "Billets mis à jour seulement"
#: _widgets.php:137 #: _widgets.php:135
msgid "Limit to tags:" msgid "Limit to tags:"
msgstr "Limiter aux mots-clés :" msgstr "Limiter aux mots-clés :"
#: _widgets.php:145 #: _widgets.php:143
msgid "Limit to words:" msgid "Limit to words:"
msgstr "Limiter aux mots :" msgstr "Limiter aux mots :"
#: _widgets.php:182 #: _widgets.php:180
msgid "Show entries first image:" msgid "Show entries first image:"
msgstr "Afficher la première image du billet :" msgstr "Afficher la première image du billet :"
#: _widgets.php:197 #: _widgets.php:195
msgid "Show entries excerpt" msgid "Show entries excerpt"
msgstr "Afficher l'extrait" msgstr "Afficher l'extrait"
#: _widgets.php:204 #: _widgets.php:202
msgid "Excerpt length:" msgid "Excerpt length:"
msgstr "Taille de l'extrait :" msgstr "Taille de l'extrait :"
#: _widgets.php:211 #: _widgets.php:209
msgid "Show comments count" msgid "Show comments count"
msgstr "Afficher le nombre de commentaires" msgstr "Afficher le nombre de commentaires"

13
repository.xml Normal file
View File

@ -0,0 +1,13 @@
<modules xmlns:da="http://dotaddict.org/da/">
<module id="lastpostsExtend">
<name>Last entries (Extended)</name>
<version>2021.08.25</version>
<author>Jean-Christian Denis and contributors</author>
<desc>Extended list of entries</desc>
<file>https://github.com/JcDenis/lastpostsExtend/releases/download/v2021.08.25/plugin-lastpostsExtend.zip</file>
<da:dcmin>2.19</da:dcmin>
<da:details>https://plugins.dotaddict.org/dc2/details/lastpostsExtend</da:details>
<da:section></da:section>
<da:support>https://github.com/JcDenis/lastpostsExtend</da:support>
</module>
</modules>