cinecturlink2/_public.php

570 lines
17 KiB
PHP

<?php
# -- BEGIN LICENSE BLOCK ----------------------------------
#
# This file is part of cinecturlink2, a plugin for Dotclear 2.
#
# Copyright (c) 2009-2013 Jean-Christian Denis and contributors
# contact@jcdenis.fr http://jcd.lv
#
# 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 null;
}
require_once dirname(__FILE__).'/_widgets.php';
$core->blog->settings->addNamespace('cinecturlink2');
$c2_tpl_values = array(
'c2PageFeedID',
'c2PageFeedURL',
'c2PageURL',
'c2PageTitle',
'c2PageDescription',
'c2EntryIfOdd',
'c2EntryIfFirst',
'c2EntryFeedID',
'c2EntryID',
'c2EntryTitle',
'c2EntryDescription',
'c2EntryFromAuthor',
'c2EntryAuthorCommonName',
'c2EntryAuthorDisplayName',
'c2EntryAuthorEmail',
'c2EntryAuthorID',
'c2EntryAuthorLink',
'c2EntryAuthorURL',
'c2EntryLang',
'c2EntryURL',
'c2EntryCategory',
'c2EntryCategoryID',
'c2EntryCategoryURL',
'c2EntryImg',
'c2EntryDate',
'c2EntryTime',
'c2PaginationCounter',
'c2PaginationCurrent',
'c2PaginationURL',
'c2CategoryFeedID',
'c2CategoryFeedURL',
'c2CategoryID',
'c2CategoryTitle',
'c2CategoryDescription',
'c2CategoryURL'
);
$c2_tpl_blocks = array(
'c2If',
'c2Entries',
'c2EntriesHeader',
'c2EntriesFooter',
'c2EntryIf',
'c2Pagination',
'c2PaginationIf',
'c2Categories',
'c2CategoriesHeader',
'c2CategoriesFooter',
'c2CategoryIf'
);
if ($core->blog->settings->cinecturlink2->cinecturlink2_active) {
foreach($c2_tpl_blocks as $v) {
$core->tpl->addBlock($v, array('tplCinecturlink2', $v));
}
foreach($c2_tpl_values as $v) {
$core->tpl->addValue($v, array('tplCinecturlink2', $v));
}
}
else {
foreach(array_merge($c2_tpl_blocks, $c2_tpl_values) as $v) {
$core->tpl->addBlock($v, array('tplCinecturlink2', 'disable'));
}
}
class urlCinecturlink2 extends dcUrlHandlers
{
public static function c2Page($args)
{
global $core, $_ctx;
$core->blog->settings->addNamespace('cinecturlink2');
if (!$core->blog->settings->cinecturlink2->cinecturlink2_active
|| !$core->blog->settings->cinecturlink2->cinecturlink2_public_active)
{
self::p404();
return null;
}
$core->tpl->setPath(
$core->tpl->getPath(),
dirname(__FILE__).'/default-templates/'
);
$params = array();
$n = self::getPageArgs($args, 'c2page');
if ($n) {
$GLOBALS['c2_page_number'] = $n;
}
$caturl = $core->blog->settings->cinecturlink2->cinecturlink2_public_caturl;
if (!$caturl) $caturl = 'c2cat';
$c = self::getPageArgs($args, $caturl);
if ($c) {
if (is_numeric($c)) {
$params['cat_id'] = (integer) $c;
}
else {
$params['cat_title'] = urldecode($c);
}
}
$f = self::getPageArgs($args, 'feed');
if ($f && in_array($f, array('atom', 'rss2'))) {
$mime = $f == 'atom' ? 'application/atom+xml' : 'application/xml';
//$_ctx->short_feed_items = $core->blog->settings->system->short_feed_items;
$params['limit'] = $core->blog->settings->system->nb_post_per_feed;
$_ctx->c2_page_params = $params;
header('X-Robots-Tag: '.context::robotsPolicy($core->blog->settings->system->robots_policy, ''));
self::serveDocument('cinecturlink2-'.$f.'.xml', $mime);
}
else {
$d = self::getPageArgs($args, 'c2detail');
if ($d) {
if (is_numeric($d)) {
$params['link_id'] = (integer) $d;
}
else {
$params['link_title'] = urldecode($d);
}
}
$params['limit'] = $core->blog->settings->cinecturlink2->cinecturlink2_public_nbrpp;
$_ctx->c2_page_params = $params;
self::serveDocument('cinecturlink2.html', 'text/html');
}
return null;
}
protected static function getPageArgs(&$args, $part)
{
if (preg_match('#(^|/)'.$part.'/([^/]+)#', $args, $m)) {
$args = preg_replace('#(^|/)'.$part.'/([^/]+)#', '', $args);
return $m[2];
}
return false;
}
}
class tplCinecturlink2
{
public static function disable($a, $c=null)
{
return '';
}
public static function c2PageURL($a)
{
return "<?php echo ".sprintf($GLOBALS['core']->tpl->getFilters($a), '$core->blog->url.$core->url->getBase(\'cinecturlink2\')')."; ?>";
}
public static function c2PageTitle($a)
{
return "<?php \$title = (string) \$core->blog->settings->cinecturlink2->cinecturlink2_public_title; if (empty(\$title)) { \$title = __('My cinecturlink'); } echo ".sprintf($GLOBALS['core']->tpl->getFilters($a), '$title')."; ?>";
}
public static function c2PageFeedURL($a)
{
return "<?php echo ".sprintf($GLOBALS['core']->tpl->getFilters($a),'$core->blog->url.$core->url->getBase("cinecturlink2")."/feed/'.(!empty($a['type']) && preg_match('#^(rss2|atom)$#', $a['type']) ? $a['type'] : 'atom').'"')."; ?>";
}
public static function c2PageFeedID($a)
{
return 'urn:md5:<?php echo md5($core->blog->blog_id."cinecturlink2"); ?>';
}
public static function c2PageDescription($a)
{
return "<?php \$description = (string) \$core->blog->settings->cinecturlink2->cinecturlink2_public_description; echo ".sprintf($GLOBALS['core']->tpl->getFilters($a), '$description')."; ?>";
}
public static function c2If($a ,$c)
{
$if = array();
$operator = isset($a['operator']) ? self::getOperator($a['operator']) : '&&';
if (isset($a['request_link'])) {
$sign = (boolean) $a['request_link'] ? '' : '!';
$if[] = $sign.'(isset($_ctx->c2_page_params["link_id"]) || isset($_ctx->c2_page_params["link_title"]))';
}
if (isset($a['request_cat'])) {
$sign = (boolean) $a['request_cat'] ? '' : '!';
$if[] = $sign.'(isset($_ctx->c2_page_params["cat_id"]) || isset($_ctx->c2_page_params["cat_title"]))';
}
return empty($if) ? $c : "<?php if(".implode(' '.$operator.' ', $if).") : ?>\n".$c."<?php endif; ?>\n";
}
public static function c2Entries($a, $c)
{
$lastn = isset($a['lastn']) ? abs((integer) $a['lastn'])+0 : -1;
$res = 'if (!isset($c2_page_number)) { $c2_page_number = 1; }'."\n";
if ($lastn != 0) {
if ($lastn > 0) {
$res .= "\$params['limit'] = ".$lastn.";\n";
}
else {
$res .= "if (!isset(\$params['limit']) || \$params['limit'] < 1) { \$params['limit'] = 10; }\n";
}
if (!isset($a['ignore_pagination']) || $a['ignore_pagination'] == "0") {
$res .= "\$params['limit'] = array(((\$c2_page_number-1)*\$params['limit']),\$params['limit']);\n";
}
else {
$res .= "\$params['limit'] = array(0, \$params['limit']);\n";
}
}
if (isset($a['category'])) {
if ($a['category'] == 'null') {
$res .= "\$params['sql'] = ' AND L.cat_id IS NULL ';\n";
}
elseif (is_numeric($a['category'])) {
$res .= "\$params['cat_id'] = ".(integer) $a['category'].";\n";
}
else {
$res .= "\$params['cat_title'] = '".$a['category']."';\n";
}
}
$sort = isset($a['sort']) && $a['sort'] == 'asc' ? ' asc' : ' desc';
$sortby = isset($a['order']) && in_array($a['order'],array('link_count','link_upddt','link_creadt','link_note','link_title')) ? $a['order'] : 'link_upddt';
$res .=
"\$params['order'] = '".$sortby.$sort."';\n";
return
"<?php \n".
"\$params = is_array(\$_ctx->c2_page_params) ? \$_ctx->c2_page_params : array(); \n".
$res.
"\$_ctx->c2_params = \$params; unset(\$params);\n".
"if (!\$_ctx->exists('cinecturlink')) { \$_ctx->cinecturlink = new cinecturlink2(\$core); } \n".
"\$_ctx->c2_entries = \$_ctx->cinecturlink->getLinks(\$_ctx->c2_params); \n".
'while ($_ctx->c2_entries->fetch()) : ?>'.$c.'<?php endwhile; '."\n".
"\$_ctx->c2_entries = null; \$_ctx->c2_params = null; \n".
"?>\n";
}
public static function c2EntriesHeader($a, $c)
{
return "<?php if (\$_ctx->c2_entries->isStart()) : ?>".$c."<?php endif; ?>";
}
public static function c2EntriesFooter($a, $c)
{
return "<?php if (\$_ctx->c2_entries->isEnd()) : ?>".$c."<?php endif; ?>";
}
public static function c2EntryIf($a, $c)
{
$if = array();
$operator = isset($a['operator']) ? self::getOperator($a['operator']) : '&&';
if (isset($a['has_category'])) {
$sign = (boolean) $a['has_category'] ? '!' : '=';
$if[] = '($_ctx->exists("c2_entries") && "" '.$sign.'= $_ctx->c2_entries->cat_title)';
}
return empty($if) ? $c : "<?php if(".implode(' '.$operator.' ',$if).") : ?>\n".$c."<?php endif; ?>\n";
}
public static function c2EntryIfFirst($a)
{
return '<?php if ($_ctx->c2_entries->index() == 0) { echo "'.(isset($a['return']) ? addslashes(html::escapeHTML($a['return'])) : 'first').'"; } ?>';
}
public static function c2EntryIfOdd($a)
{
return '<?php if (($_ctx->c2_entries->index()+1)%2 == 1) { echo "'.(isset($a['return']) ? addslashes(html::escapeHTML($a['return'])) : 'odd').'"; } ?>';
}
public static function c2EntryFeedID($a)
{
return 'urn:md5:<?php echo md5($_ctx->c2_entries->blog_id.$_ctx->c2_entries->link_id.$_ctx->c2_entries->link_dt); ?>';
}
public static function c2EntryID($a)
{
return self::getGenericValue('$_ctx->c2_entries->link_id', $a);
}
public static function c2EntryTitle($a)
{
return self::getGenericValue('$_ctx->c2_entries->link_title', $a);
}
public static function c2EntryDescription($a)
{
return self::getGenericValue('$_ctx->c2_entries->link_desc', $a);
}
public static function c2EntryAuthorCommonName($a)
{
return self::getGenericValue('dcUtils::getUserCN($_ctx->c2_entries->user_id,$_ctx->c2_entries->user_name,$_ctx->c2_entries->user_firstname,$_ctx->c2_entries->user_displayname)', $a);
}
public static function c2EntryAuthorDisplayName($a)
{
return self::getGenericValue('$_ctx->c2_entries->user_displayname', $a);
}
public static function c2EntryAuthorID($a)
{
return self::getGenericValue('$_ctx->c2_entries->user_id', $a);
}
public static function c2EntryAuthorEmail($a)
{
return self::getGenericValue((isset($a['spam_protected']) && !$a['spam_protected'] ? '$_ctx->c2_entries->user_email' : "strtr(\$_ctx->c2_entries->user_email,array('@'=>'%40','.'=>'%2e'))"), $a);
}
public static function c2EntryAuthorLink($a)
{
return self::getGenericValue('sprintf(($_ctx->c2_entries->user_url ? \'<a href="%2$s">%1$s</a>\' : \'%1$s\'),html::escapeHTML(dcUtils::getUserCN($_ctx->c2_entries->user_id,$_ctx->c2_entries->user_name,$_ctx->c2_entries->user_firstname,$_ctx->c2_entries->user_displayname)),html::escapeHTML($_ctx->c2_entries->user_url))', $a);
}
public static function c2EntryAuthorURL($a)
{
return self::getGenericValue('$_ctx->c2_entries->user_url', $a);
}
public static function c2EntryFromAuthor($a)
{
return self::getGenericValue('$_ctx->c2_entries->link_author', $a);
}
public static function c2EntryLang($a)
{
return self::getGenericValue('$_ctx->c2_entries->link_lang', $a);
}
public static function c2EntryURL($a)
{
return self::getGenericValue('$_ctx->c2_entries->link_url', $a);
}
public static function c2EntryCategory($a)
{
return self::getGenericValue('$_ctx->c2_entries->cat_title', $a);
}
public static function c2EntryCategoryID($a)
{
return self::getGenericValue('$_ctx->c2_entries->cat_id', $a);
}
public static function c2EntryCategoryURL($a)
{
return self::getGenericValue('$core->blog->url.$core->url->getBase("cinecturlink2")."/".$core->blog->settings->cinecturlink2->cinecturlink2_public_caturl."/".urlencode($_ctx->c2_entries->cat_title)', $a);
}
public static function c2EntryImg($a)
{
global $core;
$f = $core->tpl->getFilters($a);
$style = isset($a['style']) ? html::escapeHTML($a['style']) : '';
return
"<?php if (\$_ctx->exists('c2_entries')) { ".
"\$widthmax = (integer) \$core->blog->settings->cinecturlink2->cinecturlink2_widthmax; ".
"\$img = sprintf('<img src=\"%s\" alt=\"%s\" %s/>',".
"\$_ctx->c2_entries->link_img, ".
"html::escapeHTML(\$_ctx->c2_entries->link_title.' - '.\$_ctx->c2_entries->link_author), ".
"(\$widthmax ? ' style=\"width:'.\$widthmax.'px;$style\"' : '') ".
"); ".
"echo ".sprintf($f,'$img')."; unset(\$img); } ?> \n";
}
public static function c2EntryDate($a)
{
$format = !empty($a['format']) ? addslashes($a['format']) : '';
if (!empty($a['rfc822']))
$p = "dt::rfc822(strtotime(\$_ctx->c2_entries->link_creadt), \$_ctx->posts->post_tz)";
elseif (!empty($a['iso8601']))
$p = "dt::iso8601(strtotime(\$_ctx->c2_entries->link_creadt), \$_ctx->posts->post_tz)";
elseif ($format)
$p = "dt::dt2str('".$format."', \$_ctx->c2_entries->link_creadt)";
else
$p = "dt::dt2str(\$core->blog->settings->system->date_format, \$_ctx->c2_entries->link_creadt)";
return self::getGenericValue($p, $a);
}
public static function c2EntryTime($a)
{
return self::getGenericValue("dt::dt2str(".(!empty($a['format']) ? "'".addslashes($a['format'])."'" : '$core->blog->settings->system->time_format').", \$_ctx->c2_entries->link_creadt)", $a);
}
public static function c2Pagination($a, $c)
{
$p =
"<?php\n".
"\$params = \$_ctx->c2_params;\n".
"\$_ctx->c2_pagination = \$_ctx->cinecturlink->getLinks(\$params,true); unset(\$params);\n".
"?>\n";
return isset($a['no_context']) ? $p.$c : $p.'<?php if ($_ctx->c2_pagination->f(0) > $_ctx->c2_entries->count()) : ?>'.$c.'<?php endif; ?>';
}
public static function c2PaginationCounter($a)
{
return self::getGenericValue('cinecturlink2Context::PaginationNbPages()', $a);
}
public static function c2PaginationCurrent($a)
{
return self::getGenericValue('cinecturlink2Context::PaginationPosition('.(isset($a['offset']) ? (integer) $a['offset'] : 0).')', $a);
}
public static function c2PaginationIf($a, $c)
{
$if = array();
if (isset($a['start'])) {
$sign = (boolean) $a['start'] ? '' : '!';
$if[] = $sign.'cinecturlink2Context::PaginationStart()';
}
if (isset($a['end'])) {
$sign = (boolean) $a['end'] ? '' : '!';
$if[] = $sign.'cinecturlink2Context::PaginationEnd()';
}
return empty($if) ? $c : '<?php if('.implode(' && ', $if).') : ?>'.$c.'<?php endif; ?>';
}
public static function c2PaginationURL($a)
{
return self::getGenericValue('cinecturlink2Context::PaginationURL('.(isset($a['offset']) ? (integer) $a['offset'] : 0).')', $a);
}
public static function c2Categories($a, $c)
{
return
"<?php \n".
"if (!\$_ctx->exists('cinecturlink')) { \$_ctx->cinecturlink = new cinecturlink2(\$core); } \n".
"\$_ctx->c2_categories = \$_ctx->cinecturlink->getCategories(); \n".
'while ($_ctx->c2_categories->fetch()) : ?>'.$c.'<?php endwhile; '."\n".
"\$_ctx->c2_categories = null; \n".
"?>\n";
}
public static function c2CategoriesHeader($a, $c)
{
return "<?php if (\$_ctx->c2_categories->isStart()) : ?>".$c."<?php endif; ?>";
}
public static function c2CategoriesFooter($a, $c)
{
return "<?php if (\$_ctx->c2_categories->isEnd()) : ?>".$c."<?php endif; ?>";
}
public static function c2CategoryIf($a, $c)
{
$if = array();
if (isset($a['current'])) {
$sign = (boolean) $a['current'] ? '' : '!';
$if[] = $sign.'cinecturlink2Context::CategoryCurrent()';
}
if (isset($a['first'])) {
$sign = (boolean) $a['first'] ? '' : '!';
$if[] = $sign.'$_ctx->c2_categories->isStart()';
}
return empty($if) ? $c : '<?php if('.implode(' && ', $if).') : ?>'.$c.'<?php endif; ?>';
}
public static function c2CategoryFeedURL($a)
{
$p = !empty($a['type']) ? $a['type'] : 'atom';
if (!preg_match('#^(rss2|atom)$#', $p)) {
$p = 'atom';
}
return "<?php echo ".sprintf($GLOBALS['core']->tpl->getFilters($a),'$core->blog->url.$core->url->getBase("cinecturlink2")."/".$core->blog->settings->cinecturlink2->cinecturlink2_public_caturl."/".urlencode($_ctx->c2_categories->cat_title)."/feed/'.$p.'"')."; ?>";
}
public static function c2CategoryFeedID($a)
{
return 'urn:md5:<?php echo md5($core->blog->blog_id."cinecturlink2".$_ctx->c2_categories->cat_id); ?>';
}
public static function c2CategoryID($a)
{
return "<?php if (\$_ctx->exists('c2_categories')) { echo ".sprintf($GLOBALS['core']->tpl->getFilters($a), '$_ctx->c2_categories->cat_id')."; } ?>";
}
public static function c2CategoryTitle($a)
{
return "<?php if (\$_ctx->exists('c2_categories')) { echo ".sprintf($GLOBALS['core']->tpl->getFilters($a), '$_ctx->c2_categories->cat_title')."; } ?>";
}
public static function c2CategoryDescription($a)
{
return "<?php if (\$_ctx->exists('c2_categories')) { echo ".sprintf($GLOBALS['core']->tpl->getFilters($a), '$_ctx->c2_categories->cat_desc')."; } ?>";
}
public static function c2CategoryURL($a)
{
return "<?php if (\$_ctx->exists('c2_categories')) { echo ".sprintf($GLOBALS['core']->tpl->getFilters($a), '$core->blog->url.$core->url->getBase("cinecturlink2")."/".$core->blog->settings->cinecturlink2->cinecturlink2_public_caturl."/".urlencode($_ctx->c2_categories->cat_title)')."; } ?>";
}
protected static function getGenericValue($p,$a)
{
return "<?php if (\$_ctx->exists('c2_entries')) { echo ".sprintf($GLOBALS['core']->tpl->getFilters($a), "$p")."; } ?>";
}
protected static function getOperator($op)
{
switch (strtolower($op))
{
case 'or':
case '||':
return '||';
case 'and':
case '&&':
default:
return '&&';
}
}
}