342 lines
9.6 KiB
PHP
342 lines
9.6 KiB
PHP
|
<?php
|
||
|
# -- BEGIN LICENSE BLOCK ----------------------------------
|
||
|
# This file is part of comListe, a plugin for Dotclear.
|
||
|
#
|
||
|
# Copyright (c) 2008-2015 Benoit de Marne
|
||
|
# benoit.de.marne@gmail.com
|
||
|
#
|
||
|
# Licensed under the GPL version 2.0 license.
|
||
|
# A copy of this license is available in LICENSE file or at
|
||
|
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||
|
# -- END LICENSE BLOCK ------------------------------------
|
||
|
if (!defined('DC_RC_PATH')) {return;}
|
||
|
|
||
|
class urlcomListe extends dcUrlHandlers
|
||
|
{
|
||
|
/**
|
||
|
* Traitement de l'URL
|
||
|
* Open the template
|
||
|
*/
|
||
|
public static function comListe($args)
|
||
|
{
|
||
|
global $_ctx,$core;
|
||
|
|
||
|
# Settings compatibility test
|
||
|
if (version_compare(DC_VERSION,'2.2-alpha','>=')) {
|
||
|
$blog_settings =& $core->blog->settings->comListe;
|
||
|
} else {
|
||
|
$blog_settings =& $core->blog->settings;
|
||
|
}
|
||
|
|
||
|
// definition de la page courante
|
||
|
if ($args == '') {
|
||
|
$GLOBALS['_page_number'] = (integer) 1;
|
||
|
} else {
|
||
|
$current = self::getPageNumber($args);
|
||
|
if ($current) {
|
||
|
$GLOBALS['_page_number'] = (integer) $current;
|
||
|
}
|
||
|
}
|
||
|
// definition du nombre de commentaires par page
|
||
|
$_ctx->nb_comment_per_page=$blog_settings->comliste_nb_comments_per_page;
|
||
|
|
||
|
// ouverture de la page html
|
||
|
$tplset = $core->themes->moduleInfo($core->blog->settings->system->theme,'tplset');
|
||
|
if (!empty($tplset) && is_dir(dirname(__FILE__).'/../default-templates/'.$tplset)) {
|
||
|
$core->tpl->setPath($core->tpl->getPath(), dirname(__FILE__).'/../default-templates/'.$tplset);
|
||
|
} else {
|
||
|
$core->tpl->setPath($core->tpl->getPath(), dirname(__FILE__).'/../default-templates/'.DC_DEFAULT_TPLSET);
|
||
|
}
|
||
|
self::serveDocument('comListe.html');
|
||
|
exit;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class tplComListe
|
||
|
{
|
||
|
public $html_prev = '«prev.';
|
||
|
public $html_next = 'next»';
|
||
|
|
||
|
/* ComListeURL --------------------------------------- */
|
||
|
public static function comListeURL($attr)
|
||
|
{
|
||
|
$f = $GLOBALS['core']->tpl->getFilters($attr);
|
||
|
return '<?php echo '.sprintf($f,'$core->blog->url.$core->url->getBase("comListe")').'; ?>';
|
||
|
}
|
||
|
|
||
|
/* ComListePageTitle --------------------------------------- */
|
||
|
public static function comListePageTitle($attr)
|
||
|
{
|
||
|
global $core;
|
||
|
$f = $GLOBALS['core']->tpl->getFilters($attr);
|
||
|
|
||
|
# Settings compatibility test
|
||
|
if (version_compare(DC_VERSION,'2.2-alpha','>=')) {
|
||
|
return '<?php echo '.sprintf($f,'$core->blog->settings->comListe->comliste_page_title').'; ?>';
|
||
|
} else {
|
||
|
return '<?php echo '.sprintf($f,'$core->blog->settings->comliste_page_title').'; ?>';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/* ComListeNbCommentsPerPage --------------------------------------- */
|
||
|
public static function comListeNbCommentsPerPage($attr)
|
||
|
{
|
||
|
global $_ctx, $core;
|
||
|
|
||
|
# Settings compatibility test
|
||
|
if (version_compare(DC_VERSION,'2.2-alpha','>=')) {
|
||
|
$nb_comments_per_page = $_ctx->nb_comment_per_page=$core->blog->settings->comListe->comliste_nb_comments_per_page;
|
||
|
} else {
|
||
|
$nb_comments_per_page = $_ctx->nb_comment_per_page=$core->blog->settings->comliste_nb_comments_per_page;
|
||
|
}
|
||
|
return ''.html::escapeHTML($nb_comments_per_page).'';
|
||
|
}
|
||
|
|
||
|
/* comListeNbComments --------------------------------------- */
|
||
|
public static function comListeNbComments($attr)
|
||
|
{
|
||
|
// __('Number of comments')
|
||
|
global $_ctx, $core;
|
||
|
|
||
|
if(empty($params)) {
|
||
|
$_ctx->pagination = $core->blog->getComments(null,true);
|
||
|
} else {
|
||
|
$_ctx->pagination = $core->blog->getComments($params,true);
|
||
|
unset($params);
|
||
|
}
|
||
|
|
||
|
if ($_ctx->exists("pagination")) {
|
||
|
$nb_comments = $_ctx->pagination->f(0);
|
||
|
}
|
||
|
return ''.html::escapeHTML($nb_comments).'';
|
||
|
}
|
||
|
|
||
|
/* ComListeCommentsEntries --------------------------------------- */
|
||
|
public static function comListeCommentsEntries($attr,$content)
|
||
|
{
|
||
|
global $_ctx, $core;
|
||
|
|
||
|
# Settings compatibility test
|
||
|
if (version_compare(DC_VERSION,'2.2-alpha','>=')) {
|
||
|
$blog_settings =& $core->blog->settings->comListe;
|
||
|
} else {
|
||
|
$blog_settings =& $core->blog->settings;
|
||
|
}
|
||
|
|
||
|
$p =
|
||
|
"if (\$_ctx->posts !== null) { ".
|
||
|
"\$params['post_id'] = \$_ctx->posts->post_id; ".
|
||
|
"\$core->blog->withoutPassword(false);\n".
|
||
|
"}\n";
|
||
|
|
||
|
if (empty($attr['with_pings'])) {
|
||
|
$p .= "\$params['comment_trackback'] = false;\n";
|
||
|
}
|
||
|
|
||
|
$lastn = 0;
|
||
|
if (isset($attr['lastn'])) {
|
||
|
$lastn = abs((integer) $attr['lastn'])+0;
|
||
|
}
|
||
|
|
||
|
if ($lastn > 0) {
|
||
|
$p .= "\$params['limit'] = ".$lastn.";\n";
|
||
|
} else {
|
||
|
$p .= "if (\$_ctx->nb_comment_per_page !== null) { \$params['limit'] = \$_ctx->nb_comment_per_page; }\n";
|
||
|
}
|
||
|
|
||
|
if (isset($GLOBALS["_page_number"])) {
|
||
|
$_page_number = $GLOBALS["_page_number"];
|
||
|
$p .= "\$params['limit'] = array(((\$_page_number-1)*\$params['limit']),\$params['limit']);\n";
|
||
|
} else {
|
||
|
$_page_number = 1;
|
||
|
$p .= "\$params['limit'] = array(0, \$params['limit']);\n";
|
||
|
}
|
||
|
|
||
|
if (empty($attr['no_context']))
|
||
|
{
|
||
|
$p .=
|
||
|
'if ($_ctx->exists("categories")) { '.
|
||
|
"\$params['cat_id'] = \$_ctx->categories->cat_id; ".
|
||
|
"}\n";
|
||
|
|
||
|
$p .=
|
||
|
'if ($_ctx->exists("langs")) { '.
|
||
|
"\$params['sql'] = \"AND P.post_lang = '\".\$core->blog->con->escape(\$_ctx->langs->post_lang).\"' \"; ".
|
||
|
"}\n";
|
||
|
}
|
||
|
|
||
|
// Sens de tri issu des paramètres du plugin
|
||
|
$order = $blog_settings->comliste_comments_order;
|
||
|
if (isset($attr['order']) && preg_match('/^(desc|asc)$/i',$attr['order'])) {
|
||
|
$order = $attr['order'];
|
||
|
}
|
||
|
|
||
|
$p .= "\$params['order'] = 'comment_dt ".$order."';\n";
|
||
|
|
||
|
if (isset($attr['no_content']) && $attr['no_content']) {
|
||
|
$p .= "\$params['no_content'] = true;\n";
|
||
|
}
|
||
|
|
||
|
$res = "<?php\n";
|
||
|
$res .= $p;
|
||
|
$res .= '$_ctx->comments = $core->blog->getComments($params); unset($params);'."\n";
|
||
|
$res .= "if (\$_ctx->posts !== null) { \$core->blog->withoutPassword(true);}\n";
|
||
|
|
||
|
if (!empty($attr['with_pings'])) {
|
||
|
$res .= '$_ctx->pings = $_ctx->comments;'."\n";
|
||
|
}
|
||
|
|
||
|
$res .= "?>\n";
|
||
|
|
||
|
$res .=
|
||
|
'<?php while ($_ctx->comments->fetch()) : ?>'.$content.'<?php endwhile; $_ctx->comments = null; ?>';
|
||
|
|
||
|
return $res;
|
||
|
}
|
||
|
|
||
|
/* ComListePaginationLinks --------------------------------------- */
|
||
|
/* Reprise et adaptation de la fonction PaginationLinks du plugin advancedPagination-1.9 */
|
||
|
public static function comListePaginationLinks($attr)
|
||
|
{
|
||
|
global $_ctx, $core;
|
||
|
|
||
|
$p = '<?php
|
||
|
|
||
|
function comListeMakePageLink($pageNumber, $linkText) {
|
||
|
if (isset($GLOBALS["_page_number"])) {
|
||
|
$current = $GLOBALS["_page_number"];
|
||
|
} else {
|
||
|
$current = 0;
|
||
|
}
|
||
|
if ($pageNumber != $current) {
|
||
|
$args = $_SERVER["URL_REQUEST_PART"];
|
||
|
$args = preg_replace("#(^|/)page/([0-9]+)$#","",$args);
|
||
|
$url = $GLOBALS["core"]->blog->url.$args;
|
||
|
|
||
|
if ($pageNumber > 1) {
|
||
|
$url = preg_replace("#/$#","",$url);
|
||
|
$url .= "/page/".$pageNumber;
|
||
|
}
|
||
|
|
||
|
if (!empty($_GET["q"])) {
|
||
|
$s = strpos($url,"?") !== false ? "&" : "?";
|
||
|
$url .= $s."q=".rawurlencode($_GET["q"]);
|
||
|
}
|
||
|
|
||
|
return "<a href=\"".$url."\">".$linkText."</a> ";
|
||
|
} else {
|
||
|
return $linkText." ";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (isset($GLOBALS["_page_number"])) {
|
||
|
$current = $GLOBALS["_page_number"];
|
||
|
} else {
|
||
|
$current = 1;
|
||
|
}
|
||
|
|
||
|
if(empty($params)) {
|
||
|
$_ctx->pagination = $core->blog->getComments(null,true);
|
||
|
} else {
|
||
|
$_ctx->pagination = $core->blog->getComments($params,true);
|
||
|
unset($params);
|
||
|
}
|
||
|
|
||
|
if ($_ctx->exists("pagination")) {
|
||
|
$nb_comments = $_ctx->pagination->f(0);
|
||
|
}
|
||
|
|
||
|
# Settings compatibility test
|
||
|
if (version_compare(DC_VERSION,\'2.2-alpha\',\'>=\')) {
|
||
|
$blog_settings =& $core->blog->settings->comListe;
|
||
|
} else {
|
||
|
$blog_settings =& $core->blog->settings;
|
||
|
}
|
||
|
|
||
|
$nb_per_page = abs((integer) $blog_settings->comliste_nb_comments_per_page);
|
||
|
$nb_pages = ceil($nb_comments/$nb_per_page);
|
||
|
$nb_max_pages = 10;
|
||
|
$nb_sequence = 2*3+1;
|
||
|
$quick_distance = 10;
|
||
|
|
||
|
echo "Pages : ";
|
||
|
if($nb_pages <= $nb_max_pages) {
|
||
|
/* less or equal than 10 pages, simple links */
|
||
|
for ($i = 1; $i <= $nb_pages; $i++) {
|
||
|
echo comListeMakePageLink($i,$i);
|
||
|
}
|
||
|
} else {
|
||
|
/* more than 10 pages, smart links */
|
||
|
echo comListeMakePageLink(1,1);
|
||
|
$min_page = max($current - ($nb_sequence - 1) / 2, 2);
|
||
|
$max_page = min($current + ($nb_sequence - 1) / 2, $nb_pages - 1);
|
||
|
if ($min_page > 2) {
|
||
|
echo "...";
|
||
|
echo " ";
|
||
|
}
|
||
|
|
||
|
for ($i = $min_page; $i <= $max_page ; $i++) {
|
||
|
echo comListeMakePageLink($i,$i);
|
||
|
}
|
||
|
|
||
|
if ($max_page < $nb_pages - 1) {
|
||
|
echo "...";
|
||
|
echo " ";
|
||
|
}
|
||
|
echo comListeMakePageLink($nb_pages,$nb_pages);
|
||
|
|
||
|
/* quick navigation links */
|
||
|
if($current >= 1 + $quick_distance) {
|
||
|
echo " ";
|
||
|
echo comListeMakePageLink($current - $quick_distance, "<<");
|
||
|
}
|
||
|
|
||
|
if($current <= $nb_pages - $quick_distance) {
|
||
|
echo " ";
|
||
|
echo comListeMakePageLink($current + $quick_distance, ">> ");
|
||
|
}
|
||
|
}
|
||
|
?>';
|
||
|
|
||
|
return $p;
|
||
|
}
|
||
|
|
||
|
/* ComListeOpenPostTitle --------------------------------------- */
|
||
|
public static function comListeOpenPostTitle($attr)
|
||
|
{
|
||
|
return __('open post');
|
||
|
}
|
||
|
|
||
|
# Widget function
|
||
|
public static function comListeWidget($w)
|
||
|
{
|
||
|
global $core;
|
||
|
|
||
|
# Settings compatibility test
|
||
|
if (version_compare(DC_VERSION,'2.2-alpha','>=')) {
|
||
|
$blog_settings =& $core->blog->settings->comListe;
|
||
|
} else {
|
||
|
$blog_settings =& $core->blog->settings;
|
||
|
}
|
||
|
|
||
|
if ($w->offline)
|
||
|
return;
|
||
|
|
||
|
if (($w->homeonly == 1 && $core->url->type != 'default') ||
|
||
|
($w->homeonly == 2 && $core->url->type == 'default')) {
|
||
|
return;
|
||
|
}
|
||
|
if (!$blog_settings->comliste_enable) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$res =
|
||
|
($w->title ? $w->renderTitle(html::escapeHTML($w->title)) : '').
|
||
|
'<p><a href="'.$core->blog->url.$core->url->getBase('comListe').'">'.
|
||
|
($w->link_title ? html::escapeHTML($w->link_title) : __('List of comments')).
|
||
|
'</a></p>';
|
||
|
|
||
|
return $w->renderDiv($w->content_only,'comliste '.$w->class,'',$res);
|
||
|
}
|
||
|
|
||
|
}
|