X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=include%2Fbanana%2Fhooks.inc.php;h=987de1369c2ad4629402d65a138c17bfb15c7a67;hb=04334c61ffd1e63616503bf52e90174adaa3cc86;hp=6cc035c7a4db07142efe5c5e38cb7bcf5178de56;hpb=24cec3d821a65b3b4a116d41bf393bae35dcb7e4;p=platal.git diff --git a/include/banana/hooks.inc.php b/include/banana/hooks.inc.php index 6cc035c..987de13 100644 --- a/include/banana/hooks.inc.php +++ b/include/banana/hooks.inc.php @@ -1,6 +1,6 @@ getHeaderValue('subject')); if ($_header == 'from') { if ($id = Banana::$message->getHeaderValue('x-org-id')) { return $address . ' ' @@ -39,7 +39,7 @@ function hook_formatDisplayHeader($_header, $_text, $in_spool = false) . ''; } else { return $address; - } + } } if (!empty($text)) { $text .= ', '; @@ -69,6 +69,16 @@ function hook_formatDisplayHeader($_header, $_text, $in_spool = false) return null; } +function hook_platalRSS($group) +{ + if ($group) { + $group .= '/'; + } else { + $group = ''; + } + return '/rss/' . $group . S::v('forlife') . '/' . S::v('core_rss_hash') . '/rss.xml'; +} + function hook_platalMessageLink($params) { $base = ''; @@ -82,14 +92,17 @@ function hook_platalMessageLink($params) $base .= '/reply'; } elseif (@$params['action'] == 'cancel') { $base .= '/cancel'; + } elseif (@$params['part']) { + if (strpos($params['part'], '.') !== false) { + $params['artid'] .= '?part=' . urlencode($params['part']); + $base = '/read'; + } else { + $base .= '/' . str_replace('/', '.', $params['part']); + } } else { $base .= '/read'; } - if (isset($params['part']) && $params['part'] != 'xface') { - return $base . '/' . $params['artid'] . '?part=' . urlencode($params['part']); - } else { - return $base . '/' . $params['artid']; - } + return $base . '/' . $params['artid']; } if (@$params['action'] == 'new') { @@ -100,7 +113,8 @@ function hook_platalMessageLink($params) function hook_makeImg($img, $alt, $height, $width) { - $url = 'images/banana/' . $img; + global $globals; + $url = $globals->baseurl . '/images/banana/' . $img; if (!is_null($width)) { $width = ' width="' . $width . '"'; @@ -112,4 +126,220 @@ function hook_makeImg($img, $alt, $height, $width) return '' . $alt . ''; } +if (!function_exists('hook_makeLink')) { +function hook_makeLink($params) +{ + global $globals, $platal; + $xnet = !empty($GLOBALS['IS_XNET_SITE']); + $feed = (@$params['action'] == 'rss' || @$params['action'] == 'rss2' || @$params['action'] == 'atom'); + if (Banana::$protocole->name() == 'NNTP' && !$xnet) { + $base = $globals->baseurl . '/banana'; + if ($feed) { + return $base . hook_platalRSS(@$params['group']); + } + if (isset($params['page'])) { + return $base . '/' . $params['page']; + } + if (@$params['action'] == 'subscribe') { + return $base . '/subscribe'; + } + + if (!isset($params['group'])) { + return $base; + } + $base .= '/' . $params['group']; + } else if (Banana::$protocole->name() == 'NNTP' && $xnet) { + if ($feed) { + return $globals->baseurl . '/banana' . hook_platalRSS(@$params['group']); + } + $base = $globals->baseurl . '/' . $platal->ns . 'forum'; + } else if (Banana::$protocole->name() == 'MLArchives') { + if ($feed) { + return $globals->baseurl . '/' . $platal->ns . hook_platalRSS(MLBanana::$listname); + } elseif (php_sapi_name() == 'cli') { + $base = "http://listes.polytechnique.org/archives/" . str_replace('@', '_', $params['group']); + } else { + $base = $globals->baseurl . '/' . $platal->ns . 'lists/archives/' . MLBanana::$listname; + } + } + $base = $base . hook_platalMessageLink($params); + if (@$params['action'] == 'showext') { + $base .= '?action=showext'; + } + return $base; +} +} + +function hook_hasXFace($headers) +{ + return isset($headers['x-org-id']) || isset($headers['x-org-mail']); +} + +function hook_getXFace($headers) +{ + $login = @$headers['x-org-id']; + if (!$login) { + @list($login, ) = explode('@', $headers['x-org-mail']); + } + if (!$login) { + return false; + } + if (isset($headers['x-face'])) { + $res = XDB::query("SELECT p.uid + FROM forums.profils AS p + INNER JOIN aliases AS a ON (p.uid = a.id) + WHERE FIND_IN_SET('xface', p.flags) AND a.alias = {?}", + $login); + if ($res->numRows()) { + return false; + } + } + global $globals; + http_redirect($global->baseurl . '/photo/' . $login); +} + +function hook_makeJs($src) +{ + global $page; + $page->addJsLink("$src.js"); + return ' '; +} + +function make_Organization() +{ + global $globals; + $perms = S::v('perms'); + $group = $globals->asso('nom'); + if (S::has_perms()) { + return "Administrateur de Polytechnique.org"; + } else if ($group && $perms->hasFlag('groupadmin')) { + return "Animateur de $group"; + } else if ($group && $perms->hasFlag('groupmember')) { + return "Membre de $group"; + } + return "Utilisateur de Polytechnique.org"; +} + +function get_banana_params(array &$get, $group = null, $action = null, $artid = null) +{ + if ($group == 'forums') { + $group = null; + } else if ($group == 'thread') { + $group = S::v('banana_group'); + } else if ($group == 'message') { + $action = 'read'; + $group = S::v('banana_group'); + $artid = S::i('banana_artid'); + } else if ($action == 'message') { + $action = 'read'; + $artid = S::i('banana_artid'); + } else if ($group == 'subscribe' || $group == 'subscription') { + $group = null; + $action = null; + $get['action'] = 'subscribe'; + } else if ($group == 'profile') { + $group = null; + $action = null; + $get['action'] = 'profile'; + } + if (!is_null($group)) { + $get['group'] = $group; + } + if (!is_null($action)) { + if ($action == 'new') { + $get['action'] = 'new'; + } elseif (!is_null($artid)) { + $get['artid'] = $artid; + if ($action == 'reply') { + $get['action'] = 'new'; + } elseif ($action == 'cancel') { + $get['action'] = $action; + } elseif ($action == 'from') { + $get['first'] = $artid; + unset($get['artid']); + } elseif ($action == 'read') { + $get['part'] = @$_GET['part']; + } elseif ($action == 'source') { + $get['part'] = 'source'; + } elseif ($action == 'xface') { + $get['part'] = 'xface'; + } elseif ($action) { + $get['part'] = str_replace('.', '/', $action); + } + if (Get::v('action') == 'showext') { + $get['action'] = 'showext'; + } + } + } +} + +class PlatalBananaPage extends BananaPage +{ + protected $handler; + protected $base; + + public function __construct() + { + global $platal; + Banana::$withtabs = false; + $this->handler = 'BananaHandler'; + $this->base = $platal->pl_self(0); + parent::__construct(); + } + + protected function prepare() + { + $tpl = parent::prepare(); + global $wiz, $page; + $wiz = new PlWizard('Banana', 'core/plwizard.tpl', true, false); + foreach ($this->pages as $name=>&$mpage) { + $wiz->addPage($this->handler, $mpage['text'], $name); + } + $wiz->apply($page, $this->base, $this->page); + return $tpl; + } +} + +class BananaHandler +{ + public function __construct(PlWizard &$wiz) + { + } + + public function template() + { + return 'banana/index.tpl'; + } + + public function prepare(PlPage &$page, $id) + { + } + + public function process() + { + return PlWizard::CURRENT_PAGE; + } +} + +function run_banana(&$page, $class, array $args) +{ + $banana = new $class(S::v('forlife'), $args); + $page->assign('banana', $banana->run()); + $page->addCssInline($banana->css()); + $page->addCssLink('banana.css'); + $rss = $banana->feed(); + if ($rss) { + if (Banana::$group) { + $page->setRssLink('Banana :: ' . Banana::$group, $rss); + } else { + $page->setRssLink('Banana :: Abonnements', $rss); + } + } + $bt = $banana->backtrace(); + if ($bt) { + new PlBacktrace(Banana::$protocole->name(), $banana->backtrace(), 'response', 'time'); + } +} + +// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: ?>