X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=include%2Fbanana%2Fhooks.inc.php;h=6f9e8f0e4869b781e2516617ce33044a9d995c98;hb=3af5a31e4e6d5655fa43b218dc3c8ba15c53592e;hp=6cc035c7a4db07142efe5c5e38cb7bcf5178de56;hpb=24cec3d821a65b3b4a116d41bf393bae35dcb7e4;p=platal.git
diff --git a/include/banana/hooks.inc.php b/include/banana/hooks.inc.php
index 6cc035c..6f9e8f0 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 . ' ';
} 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('hruid') . '/' . 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,219 @@ function hook_makeImg($img, $alt, $height, $width)
return '';
}
+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)
+{
+ Platal::page()->addJsLink("$src.js");
+ return ' ';
+}
+
+function make_Organization()
+{
+ global $globals;
+ $perms = S::v('perms');
+ $group = $globals->asso('nom');
+ if (S::admin()) {
+ 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;
+ $wiz = new PlWizard('Banana', PlPage::getCoreTpl('plwizard.tpl'), true, false);
+ foreach ($this->pages as $name=>&$mpage) {
+ $wiz->addPage($this->handler, $mpage['text'], $name);
+ }
+ $wiz->apply(Platal::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::user(), $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:
?>