cleanup (license, help, dc2.19, PSR2, short array, php7.3+, php8.0.x)
This commit is contained in:
parent
140706e705
commit
50f881d512
9 changed files with 531 additions and 546 deletions
|
@ -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
|
||||
===========================================================
|
||||
* oops missed 2015 update
|
||||
|
||||
lastpostsExtend 2016.10.23
|
||||
===========================================================
|
||||
* Used new widget rendering method
|
||||
* Updated year
|
||||
|
||||
lastpostsExtend 2015.01.13 Pierre Van Glabeke
|
||||
===========================================================
|
||||
* Compatibilité dotclear 2.7
|
||||
* Ajout options widget et compatibilité currywurst
|
||||
* Modifications locales
|
||||
|
||||
lastpostsExtend 2013.12.01
|
||||
===========================================================
|
||||
* Fix XHTML validation on widget
|
||||
* Fix category id from wrong table. thx BG
|
||||
|
||||
lastpostsExtend 2013.11.12
|
||||
===========================================================
|
||||
* Switch to Dotclear 2.6
|
||||
* Add widget options
|
||||
|
||||
lastpostsExtend 2013.06.30
|
||||
===========================================================
|
||||
* Used new 'homeonly' style for widgets
|
||||
|
||||
lastpostsExtend 2011.08.01
|
||||
===========================================================
|
||||
* Added support of plugin muppet (post types)
|
||||
* Try to fix date compare on sql request
|
||||
|
||||
lastpostsExtend 0.10 - 2010-08-19
|
||||
===========================================================
|
||||
* Sort by comments (annso)
|
||||
|
||||
lastpostsExtend 0.9 - 2010-06-09
|
||||
===========================================================
|
||||
* Writed now for DC 2.2 or higher
|
||||
|
||||
lastpostsExtend 0.8.2 - 2010-03-29
|
||||
===========================================================
|
||||
* Fixed getPosts by using sudo
|
||||
* Fixed entryFirstImage on non-pushided post
|
||||
|
||||
lastpostsExtend 0.8.1 - 2009-12-31
|
||||
===========================================================
|
||||
* Happy new year!
|
||||
* Fixed multiple bugs and crashes
|
||||
|
||||
lastpostsExtend 0.8 - 2009-12-30
|
||||
===========================================================
|
||||
* Added post words limit
|
||||
* Added post status limit
|
||||
* Added post password limit (closes #385)
|
||||
* Changed blog->getPosts to internal getPosts
|
||||
|
||||
lastpostsExtend 0.7 2009-12-10
|
||||
===========================================================
|
||||
* Added entryFirstimage
|
||||
* Fixed typo
|
||||
|
||||
lastpostsExtend 0.6 - 2009-08-23
|
||||
===========================================================
|
||||
* Added ''pluginsPage'' support
|
||||
|
||||
lastpostsExtend 0.5 - 2009-08-16
|
||||
===========================================================
|
||||
* Fixed php 5.3 compatibility
|
|
@ -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)
|
||||
|
||||
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)
|
|
@ -3,8 +3,7 @@
|
|||
#
|
||||
# This file is part of lastpostsExtend, a plugin for Dotclear 2.
|
||||
#
|
||||
# Copyright (c) 2009-2016 Jean-Christian Denis and contributors
|
||||
# contact@jcdenis.fr http://jcdenis.net
|
||||
# Copyright (c) 2009-2021 Jean-Christian Denis and contributors
|
||||
#
|
||||
# Licensed under the GPL version 2.0 license.
|
||||
# A copy of this license is available in LICENSE file or at
|
||||
|
@ -13,8 +12,7 @@
|
|||
# -- END LICENSE BLOCK ------------------------------------
|
||||
|
||||
if (!defined('DC_CONTEXT_ADMIN')) {
|
||||
|
||||
return null;
|
||||
return null;
|
||||
}
|
||||
|
||||
require dirname(__FILE__).'/_widgets.php';
|
||||
require dirname(__FILE__) . '/_widgets.php';
|
33
_define.php
33
_define.php
|
@ -3,8 +3,7 @@
|
|||
#
|
||||
# This file is part of lastpostsExtend, a plugin for Dotclear 2.
|
||||
#
|
||||
# Copyright (c) 2009-2016 Jean-Christian Denis and contributors
|
||||
# contact@jcdenis.fr http://jcdenis.net
|
||||
# Copyright (c) 2009-2021 Jean-Christian Denis and contributors
|
||||
#
|
||||
# Licensed under the GPL version 2.0 license.
|
||||
# A copy of this license is available in LICENSE file or at
|
||||
|
@ -13,24 +12,20 @@
|
|||
# -- END LICENSE BLOCK ------------------------------------
|
||||
|
||||
if (!defined('DC_RC_PATH')) {
|
||||
|
||||
return null;
|
||||
return null;
|
||||
}
|
||||
|
||||
$this->registerModule(
|
||||
/* Name */
|
||||
"Last entries (Extended)",
|
||||
/* Description*/
|
||||
"Extended list of entries",
|
||||
/* Author */
|
||||
"Jean-Christian Denis",
|
||||
/* Version */
|
||||
'2016.10.24',
|
||||
array(
|
||||
'permissions' => 'admin',
|
||||
'type' => 'plugin',
|
||||
'dc_min' => '2.10',
|
||||
'support' => 'http://lab.dotclear.org/wiki/plugin/lastpostsExtend',
|
||||
'details' => 'http://plugins.dotaddict.org/dc2/details/lastpostsExtend'
|
||||
)
|
||||
'Last entries (Extended)',
|
||||
'Extended list of entries',
|
||||
'Jean-Christian Denis and contributors',
|
||||
'2021.08.25',
|
||||
[
|
||||
'permissions' => 'admin',
|
||||
'type' => 'plugin',
|
||||
'dc_min' => '2.19',
|
||||
'support' => 'https://github.com/JcDenis/lastpostsExtend',
|
||||
'details' => 'http://plugins.dotaddict.org/dc2/details/lastpostsExtend',
|
||||
'repository' => 'https://raw.githubusercontent.com/JcDenis/lastpostsExtend/master/repository.xml'
|
||||
]
|
||||
);
|
|
@ -3,8 +3,7 @@
|
|||
#
|
||||
# This file is part of lastpostsExtend, a plugin for Dotclear 2.
|
||||
#
|
||||
# Copyright (c) 2009-2016 Jean-Christian Denis and contributors
|
||||
# contact@jcdenis.fr http://jcdenis.net
|
||||
# Copyright (c) 2009-2021 Jean-Christian Denis and contributors
|
||||
#
|
||||
# Licensed under the GPL version 2.0 license.
|
||||
# A copy of this license is available in LICENSE file or at
|
||||
|
@ -13,8 +12,7 @@
|
|||
# -- END LICENSE BLOCK ------------------------------------
|
||||
|
||||
if (!defined('DC_RC_PATH')) {
|
||||
|
||||
return null;
|
||||
return null;
|
||||
}
|
||||
|
||||
require dirname(__FILE__).'/_widgets.php';
|
||||
require dirname(__FILE__) . '/_widgets.php';
|
909
_widgets.php
909
_widgets.php
|
@ -3,8 +3,7 @@
|
|||
#
|
||||
# This file is part of lastpostsExtend, a plugin for Dotclear 2.
|
||||
#
|
||||
# Copyright (c) 2009-2016 Jean-Christian Denis and contributors
|
||||
# contact@jcdenis.fr http://jcdenis.net
|
||||
# Copyright (c) 2009-2021 Jean-Christian Denis and contributors
|
||||
#
|
||||
# Licensed under the GPL version 2.0 license.
|
||||
# A copy of this license is available in LICENSE file or at
|
||||
|
@ -13,507 +12,495 @@
|
|||
# -- END LICENSE BLOCK ------------------------------------
|
||||
|
||||
if (!defined('DC_RC_PATH')) {
|
||||
|
||||
return null;
|
||||
return null;
|
||||
}
|
||||
|
||||
$core->addBehavior(
|
||||
'initWidgets',
|
||||
array('lastpostsextendWidget', 'initWidget')
|
||||
'initWidgets',
|
||||
['lastpostsextendWidget', 'initWidget']
|
||||
);
|
||||
|
||||
class lastpostsextendWidget
|
||||
{
|
||||
public static function initWidget($w)
|
||||
{
|
||||
global $core;
|
||||
public static function initWidget($w)
|
||||
{
|
||||
global $core;
|
||||
|
||||
# Create widget
|
||||
$w->create(
|
||||
'lastpostsextend',
|
||||
__('Last entries (Extended)'),
|
||||
array('lastpostsextendWidget', 'parseWidget'),
|
||||
null,
|
||||
__('Extended list of entries')
|
||||
);
|
||||
# Title
|
||||
$w->lastpostsextend->setting(
|
||||
'title',
|
||||
__('Title:'),
|
||||
__('Last entries'),
|
||||
'text'
|
||||
);
|
||||
# type
|
||||
$posttypes = array(
|
||||
__('Post') => 'post',
|
||||
__('Page') => 'page',
|
||||
__('Gallery') => 'galitem'
|
||||
);
|
||||
# plugin muppet types
|
||||
if ($core->plugins->moduleExists('muppet')) {
|
||||
$muppet_types = muppet::getPostTypes();
|
||||
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' => ''
|
||||
);
|
||||
# Create widget
|
||||
$w->create(
|
||||
'lastpostsextend',
|
||||
__('Last entries (Extended)'),
|
||||
['lastpostsextendWidget', 'parseWidget'],
|
||||
null,
|
||||
__('Extended list of entries')
|
||||
);
|
||||
# Title
|
||||
$w->lastpostsextend->setting(
|
||||
'title',
|
||||
__('Title:'),
|
||||
__('Last entries'),
|
||||
'text'
|
||||
);
|
||||
# type
|
||||
$posttypes = [
|
||||
__('Post') => 'post',
|
||||
__('Page') => 'page',
|
||||
__('Gallery') => 'galitem'
|
||||
];
|
||||
# plugin muppet types
|
||||
if ($core->plugins->moduleExists('muppet')) {
|
||||
$muppet_types = muppet::getPostTypes();
|
||||
if(is_array($muppet_types) && !empty($muppet_types)) {
|
||||
|
||||
# Widget is offline
|
||||
if ($w->offline)
|
||||
return;
|
||||
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([
|
||||
'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
|
||||
if ($w->homeonly == 1 && $core->url->type != 'default'
|
||||
|| $w->homeonly == 2 && $core->url->type == 'default'
|
||||
) {
|
||||
return null;
|
||||
}
|
||||
# Widget is offline
|
||||
if ($w->offline) {
|
||||
return;
|
||||
}
|
||||
|
||||
# Need posts excerpt
|
||||
if ($w->excerpt) {
|
||||
$params['columns'][] = 'post_excerpt';
|
||||
}
|
||||
# Home page only
|
||||
if ($w->homeonly == 1 && $core->url->type != 'default'
|
||||
|| $w->homeonly == 2 && $core->url->type == 'default') {
|
||||
return null;
|
||||
}
|
||||
|
||||
# Passworded
|
||||
if ($w->passworded == 'yes') {
|
||||
$params['sql'] .= 'AND post_password IS NOT NULL ';
|
||||
}
|
||||
elseif ($w->passworded == 'no') {
|
||||
$params['sql'] .= 'AND post_password IS NULL ';
|
||||
}
|
||||
# Need posts excerpt
|
||||
if ($w->excerpt) {
|
||||
$params['columns'][] = 'post_excerpt';
|
||||
}
|
||||
|
||||
# Status
|
||||
if ($w->status != 'all') {
|
||||
$params['post_status'] = $w->status;
|
||||
}
|
||||
# Passworded
|
||||
if ($w->passworded == 'yes') {
|
||||
$params['sql'] .= 'AND post_password IS NOT NULL ';
|
||||
}
|
||||
elseif ($w->passworded == 'no') {
|
||||
$params['sql'] .= 'AND post_password IS NULL ';
|
||||
}
|
||||
|
||||
# Search words
|
||||
if ('' != $w->search) {
|
||||
$params['search'] = $w->search;
|
||||
}
|
||||
# Status
|
||||
if ($w->status != 'all') {
|
||||
$params['post_status'] = $w->status;
|
||||
}
|
||||
|
||||
# Updated posts only
|
||||
if ($w->updatedonly) {
|
||||
$params['sql'] .=
|
||||
"AND post_creadt < post_upddt ".
|
||||
"AND post_dt < post_upddt ";
|
||||
# Search words
|
||||
if ('' != $w->search) {
|
||||
$params['search'] = $w->search;
|
||||
}
|
||||
|
||||
# Updated posts only
|
||||
if ($w->updatedonly) {
|
||||
$params['sql'] .=
|
||||
"AND post_creadt < post_upddt " .
|
||||
"AND post_dt < post_upddt ";
|
||||
/*
|
||||
$params['sql'] .=
|
||||
"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') ";
|
||||
$params['sql'] .=
|
||||
"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') ";
|
||||
//*/
|
||||
$params['order'] = $w->sortby == 'date' ?
|
||||
'post_upddt ' : $w->sortby.' ';
|
||||
}
|
||||
else {
|
||||
$params['order'] = $w->sortby == 'date' ?
|
||||
'post_dt ' : $w->sortby.' ';
|
||||
}
|
||||
$params['order'] .= $w->sort == 'asc' ? 'asc' : 'desc';
|
||||
$params['limit'] = abs((integer) $w->limit);
|
||||
$params['no_content'] = true;
|
||||
$params['order'] = $w->sortby == 'date' ?
|
||||
'post_upddt ' : $w->sortby . ' ';
|
||||
}
|
||||
else {
|
||||
$params['order'] = $w->sortby == 'date' ?
|
||||
'post_dt ' : $w->sortby . ' ';
|
||||
}
|
||||
$params['order'] .= $w->sort == 'asc' ? 'asc' : 'desc';
|
||||
$params['limit'] = abs((integer) $w->limit);
|
||||
$params['no_content'] = true;
|
||||
|
||||
# Selected posts only
|
||||
if ($w->selectedonly) {
|
||||
$params['post_selected'] = 1;
|
||||
}
|
||||
# Selected posts only
|
||||
if ($w->selectedonly) {
|
||||
$params['post_selected'] = 1;
|
||||
}
|
||||
|
||||
# Type
|
||||
$params['post_type'] = $w->posttype;
|
||||
# Type
|
||||
$params['post_type'] = $w->posttype;
|
||||
|
||||
# Category
|
||||
if ($w->category) {
|
||||
if ($w->category == 'null') {
|
||||
$params['sql'] .= ' AND P.cat_id IS NULL ';
|
||||
}
|
||||
elseif (is_numeric($w->category)) {
|
||||
$params['cat_id'] = (integer) $w->category;
|
||||
}
|
||||
else {
|
||||
$params['cat_url'] = $w->category;
|
||||
}
|
||||
}
|
||||
# Category
|
||||
if ($w->category) {
|
||||
if ($w->category == 'null') {
|
||||
$params['sql'] .= ' AND P.cat_id IS NULL ';
|
||||
} elseif (is_numeric($w->category)) {
|
||||
$params['cat_id'] = (integer) $w->category;
|
||||
} else {
|
||||
$params['cat_url'] = $w->category;
|
||||
}
|
||||
}
|
||||
|
||||
# Tags
|
||||
if ($core->plugins->moduleExists('tags') && $w->tag) {
|
||||
$tags = explode(',', $w->tag);
|
||||
foreach($tags as $i => $tag) {
|
||||
$tags[$i] = trim($tag);
|
||||
}
|
||||
$params['from'] .= ', '.$core->prefix.'meta META ';
|
||||
$params['sql'] .= 'AND META.post_id = P.post_id ';
|
||||
$params['sql'] .= "AND META.meta_id ".$core->con->in($tags)." ";
|
||||
$params['sql'] .= "AND META.meta_type = 'tag' ";
|
||||
}
|
||||
# Tags
|
||||
if ($core->plugins->moduleExists('tags') && $w->tag) {
|
||||
$tags = explode(',', $w->tag);
|
||||
foreach($tags as $i => $tag) {
|
||||
$tags[$i] = trim($tag);
|
||||
}
|
||||
$params['from'] .= ', ' . $core->prefix . 'meta META ';
|
||||
$params['sql'] .= 'AND META.post_id = P.post_id ';
|
||||
$params['sql'] .= "AND META.meta_id " . $core->con->in($tags) . " ";
|
||||
$params['sql'] .= "AND META.meta_type = 'tag' ";
|
||||
}
|
||||
|
||||
$rs = $core->auth->sudo(
|
||||
array($core->blog, 'getPosts'),
|
||||
$params,
|
||||
false
|
||||
);
|
||||
$rs = $core->auth->sudo(
|
||||
[$core->blog, 'getPosts'],
|
||||
$params,
|
||||
false
|
||||
);
|
||||
|
||||
# No result
|
||||
if ($rs->isEmpty()) {
|
||||
# No result
|
||||
if ($rs->isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
# Return
|
||||
$res = $w->title ? $w->renderTitle(html::escapeHTML($w->title)) : '';
|
||||
|
||||
# Return
|
||||
$res = $w->title ? $w->renderTitle(html::escapeHTML($w->title)) : '';
|
||||
while ($rs->fetch()) {
|
||||
$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()) {
|
||||
$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').'>';
|
||||
# Nb comments
|
||||
if ($w->commentscount && $rs->post_status == 1) {
|
||||
$res .= ' (' . $rs->nb_comment . ')';
|
||||
}
|
||||
|
||||
# Nb comments
|
||||
if ($w->commentscount && $rs->post_status == 1) {
|
||||
$res .= ' ('.$rs->nb_comment.')';
|
||||
}
|
||||
# First image
|
||||
if ($w->firstimage != '') {
|
||||
$res .= self::entryFirstImage(
|
||||
$core,
|
||||
$rs->post_type,
|
||||
$rs->post_id,
|
||||
$w->firstimage
|
||||
);
|
||||
}
|
||||
|
||||
# First image
|
||||
if ($w->firstimage != '') {
|
||||
$res .= self::entryFirstImage(
|
||||
$core,
|
||||
$rs->post_type,
|
||||
$rs->post_id,
|
||||
$w->firstimage
|
||||
);
|
||||
}
|
||||
# Excerpt
|
||||
if ($w->excerpt) {
|
||||
$excerpt = $rs->post_excerpt;
|
||||
if ($rs->post_format == 'wiki') {
|
||||
$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) ? '...' : '');
|
||||
|
||||
# Excerpt
|
||||
if ($w->excerpt) {
|
||||
$excerpt = $rs->post_excerpt;
|
||||
if ($rs->post_format == 'wiki') {
|
||||
$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);
|
||||
}
|
||||
}
|
||||
$res .= '</li>';
|
||||
}
|
||||
|
||||
unset($cut);
|
||||
}
|
||||
}
|
||||
$res .= '</li>';
|
||||
}
|
||||
return $w->renderDiv(
|
||||
$w->content_only,
|
||||
'lastpostsextend ' . $w->class,
|
||||
'',
|
||||
'<ul>' . $res . '</ul>'
|
||||
);
|
||||
}
|
||||
|
||||
private static function entryFirstImage($core, $type, $id, $size = 's')
|
||||
{
|
||||
if (!in_array($type, ['post', 'page', 'galitem'])) {
|
||||
|
||||
return $w->renderDiv(
|
||||
$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 '';
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
$rs = $core->auth->sudo(
|
||||
[$core->blog, 'getPosts'],
|
||||
['post_id' => $id, 'post_type' => $type],
|
||||
false
|
||||
);
|
||||
|
||||
$rs = $core->auth->sudo(
|
||||
array($core->blog, 'getPosts'),
|
||||
array('post_id' => $id, 'post_type' => $type),
|
||||
false
|
||||
);
|
||||
if ($rs->isEmpty()) {
|
||||
return '';
|
||||
}
|
||||
|
||||
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)) {
|
||||
$size = 's';
|
||||
}
|
||||
$pattern = '(?:' . preg_quote($p_site, '/') . ')?' . preg_quote($p_url, '/');
|
||||
$pattern = sprintf('/<img.+?src="%s(.*?\.(?:jpg|gif|png))"[^>]+/msu', $pattern);
|
||||
|
||||
$p_url = $core->blog->settings->system->public_url;
|
||||
$p_site = preg_replace(
|
||||
'#^(.+?//.+?)/(.*)$#',
|
||||
'$1',
|
||||
$core->blog->url
|
||||
);
|
||||
$p_root = $core->blog->public_path;
|
||||
$src = '';
|
||||
$alt = '';
|
||||
|
||||
$pattern = '(?:'.preg_quote($p_site, '/').')?'.preg_quote($p_url, '/');
|
||||
$pattern = sprintf('/<img.+?src="%s(.*?\.(?:jpg|gif|png))"[^>]+/msu', $pattern);
|
||||
$subject = $rs->post_excerpt_xhtml . $rs->post_content_xhtml . $rs->cat_desc;
|
||||
if (preg_match_all($pattern, $subject, $m) > 0) {
|
||||
|
||||
$src = '';
|
||||
$alt = '';
|
||||
foreach ($m[1] as $i => $img) {
|
||||
if (($src = self::ContentFirstImageLookup($p_root, $img, $size)) !== false) {
|
||||
|
||||
$subject = $rs->post_excerpt_xhtml.$rs->post_content_xhtml.$rs->cat_desc;
|
||||
if (preg_match_all($pattern, $subject, $m) > 0) {
|
||||
$src = $p_url . (dirname($img) != '/' ? dirname($img) : '') . '/' . $src;
|
||||
if (preg_match('/alt="([^"]+)"/', $m[0][$i], $malt)) {
|
||||
$alt = $malt[1];
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($m[1] as $i => $img) {
|
||||
if (($src = self::ContentFirstImageLookup($p_root, $img, $size)) !== false) {
|
||||
if (!$src) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$src = $p_url.(dirname($img) != '/' ? dirname($img) : '').'/'.$src;
|
||||
if (preg_match('/alt="([^"]+)"/', $m[0][$i], $malt)) {
|
||||
$alt = $malt[1];
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
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";
|
||||
}
|
||||
|
||||
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
|
||||
'<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;
|
||||
}
|
||||
return $res ? $res : false;
|
||||
}
|
||||
}
|
|
@ -1,52 +1,51 @@
|
|||
<?php
|
||||
// Language: Français
|
||||
// Module: lastpostsExtend - 2013.11.12
|
||||
// Date: 2013-11-13 07:22:55
|
||||
// Translated with dcTranslater - 2013.05.11
|
||||
// Module: lastpostsExtend - 2021.08.25
|
||||
// Date: 2021-08-25 22:43:47
|
||||
// Translated with dcTranslater - 2021.08.18
|
||||
|
||||
#_widgets.php:34
|
||||
#_widgets.php:33
|
||||
$GLOBALS['__l10n']['Last entries (Extended)'] = 'Derniers billets (étendu)';
|
||||
|
||||
#_widgets.php:37
|
||||
#_widgets.php:36
|
||||
$GLOBALS['__l10n']['Extended list of entries'] = 'Liste étendue de billets';
|
||||
|
||||
#_widgets.php:48
|
||||
#_widgets.php:47
|
||||
$GLOBALS['__l10n']['Post'] = 'Billet';
|
||||
|
||||
#_widgets.php:50
|
||||
#_widgets.php:49
|
||||
$GLOBALS['__l10n']['Gallery'] = 'Galerie';
|
||||
|
||||
#_widgets.php:95
|
||||
#_widgets.php:94
|
||||
$GLOBALS['__l10n']['Protection:'] = 'Protection :';
|
||||
|
||||
#_widgets.php:100
|
||||
#_widgets.php:99
|
||||
$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';
|
||||
|
||||
#_widgets.php:121
|
||||
#_widgets.php:120
|
||||
$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';
|
||||
|
||||
#_widgets.php:137
|
||||
#_widgets.php:135
|
||||
$GLOBALS['__l10n']['Limit to tags:'] = 'Limiter aux mots-clés :';
|
||||
|
||||
#_widgets.php:145
|
||||
#_widgets.php:143
|
||||
$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 :';
|
||||
|
||||
#_widgets.php:197
|
||||
$GLOBALS['__l10n']['Show entries excerpt'] = "Afficher l'extrait";
|
||||
#_widgets.php:195
|
||||
$GLOBALS['__l10n']['Show entries excerpt'] = 'Afficher l\'extrait';
|
||||
|
||||
#_widgets.php:204
|
||||
$GLOBALS['__l10n']['Excerpt length:'] = "Taille de l'extrait :";
|
||||
#_widgets.php:202
|
||||
$GLOBALS['__l10n']['Excerpt length:'] = 'Taille de l\'extrait :';
|
||||
|
||||
#_widgets.php:211
|
||||
#_widgets.php:209
|
||||
$GLOBALS['__l10n']['Show comments count'] = 'Afficher le nombre de commentaires';
|
||||
|
||||
?>
|
|
@ -1,76 +1,77 @@
|
|||
# Language: Français
|
||||
# Module: lastpostsExtend - 2013.11.12
|
||||
# Date: 2013-11-13 07:22:55
|
||||
# Translated with translater 2013.05.11
|
||||
# Module: lastpostsExtend - 2021.08.25
|
||||
# Date: 2021-08-25 22:43:47
|
||||
# Translated with translater 2021.08.18
|
||||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"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"
|
||||
"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"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#: _widgets.php:34
|
||||
#: _widgets.php:33
|
||||
msgid "Last entries (Extended)"
|
||||
msgstr "Derniers billets (étendu)"
|
||||
|
||||
#: _widgets.php:37
|
||||
#: _widgets.php:36
|
||||
msgid "Extended list of entries"
|
||||
msgstr "Liste étendue de billets"
|
||||
|
||||
#: _widgets.php:48
|
||||
#: _widgets.php:47
|
||||
msgid "Post"
|
||||
msgstr "Billet"
|
||||
|
||||
#: _widgets.php:50
|
||||
#: _widgets.php:49
|
||||
msgid "Gallery"
|
||||
msgstr "Galerie"
|
||||
|
||||
#: _widgets.php:95
|
||||
#: _widgets.php:94
|
||||
msgid "Protection:"
|
||||
msgstr "Protection :"
|
||||
|
||||
#: _widgets.php:100
|
||||
#: _widgets.php:99
|
||||
msgid "only without password"
|
||||
msgstr "seulement sans mot de passe"
|
||||
|
||||
#: _widgets.php:101
|
||||
#: _widgets.php:100
|
||||
msgid "only with password"
|
||||
msgstr "seulement avec mot de passe"
|
||||
|
||||
#: _widgets.php:121
|
||||
#: _widgets.php:120
|
||||
msgid "Selected entries only"
|
||||
msgstr "Billets sélectionnés seulement"
|
||||
|
||||
#: _widgets.php:128
|
||||
#: _widgets.php:127
|
||||
msgid "Updated entries only"
|
||||
msgstr "Billets mis à jour seulement"
|
||||
|
||||
#: _widgets.php:137
|
||||
#: _widgets.php:135
|
||||
msgid "Limit to tags:"
|
||||
msgstr "Limiter aux mots-clés :"
|
||||
|
||||
#: _widgets.php:145
|
||||
#: _widgets.php:143
|
||||
msgid "Limit to words:"
|
||||
msgstr "Limiter aux mots :"
|
||||
|
||||
#: _widgets.php:182
|
||||
#: _widgets.php:180
|
||||
msgid "Show entries first image:"
|
||||
msgstr "Afficher la première image du billet :"
|
||||
|
||||
#: _widgets.php:197
|
||||
#: _widgets.php:195
|
||||
msgid "Show entries excerpt"
|
||||
msgstr "Afficher l'extrait"
|
||||
|
||||
#: _widgets.php:204
|
||||
#: _widgets.php:202
|
||||
msgid "Excerpt length:"
|
||||
msgstr "Taille de l'extrait :"
|
||||
|
||||
#: _widgets.php:211
|
||||
#: _widgets.php:209
|
||||
msgid "Show comments count"
|
||||
msgstr "Afficher le nombre de commentaires"
|
||||
|
||||
|
|
13
repository.xml
Normal file
13
repository.xml
Normal 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>
|
Loading…
Reference in a new issue