1 <?php
2 /**
3  * DokuWiki Plugin HipChat (Action Component)
4  *
5  * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
6  * @author  Jeremy Ebler <jebler@gmail.com> 2011-09-29
7  *
8  * DokuWiki log: https://github.com/cosmocode/log.git
9  * @author  Adrian Lang <lang@cosmocode.de> 2010-03-28
10  *
11  * Hippy: https://github.com/rcrowe/Hippy.git
12  * @author Rob Crowe <rcrowe@github>
13  */
14 
15 // must be run within Dokuwiki
16 if (!defined('DOKU_INC')) die();
17 
18 if (!defined('DOKU_LF')) define('DOKU_LF', "\n");
19 if (!defined('DOKU_TAB')) define('DOKU_TAB', "\t");
20 if (!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
21 
22 require 'vendor/autoload.php';
23 
24 class action_plugin_hipchat extends DokuWiki_Action_Plugin {
25 
26     function register(&$controller) {
27        $controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'handle_action_act_preprocess');
28     }
29 
30     function handle_action_act_preprocess(&$event, $param) {
31         global $lang;
32         if (isset($event->data['save'])) {
33             if ($event->data['save'] == $lang['btn_save']) {
34                 $this->handle();
35             }
36         }
37         return;
38     }
39 
40     private function handle() {
41        global $SUM;
42         global $INFO;
43 
44         /* Namespace filter */
45         $ns = $this->getConf('hipchat_namespaces');
46         if (!empty($ns)) {
47             $namespaces = explode(',', $ns);
48             $current_namespace = explode(':', $INFO['namespace']);
49             if (!in_array($current_namespace[0], $namespaces)) {
50                 return;
51             }
52         }
53 
54         $fullname = $INFO['userinfo']['name'];
55         $username = $INFO['client'];
56         $page     = $INFO['namespace'] . $INFO['id'];
57         $summary  = $SUM;
58         $minor    = (boolean) $_REQUEST['minor'];
59 
60         $token = $this->getConf('hipchat_token');
61         $room = $this->getConf('hipchat_room');
62         $from = $this->getConf('hipchat_name');
63 
64         $transport = new rcrowe\Hippy\Transport\Guzzle($token, $room, $from);
65         $hippy = new rcrowe\Hippy\Client($transport);
66 
67         $say = '<b>' . $fullname . '</b> '.$this->getLang('hipchat_update').'<b><a href="' . $this->urlize() . '">' . $INFO['id'] . '</a></b>';
68         if ($minor) $say = $say . ' ['.$this->getLang('hipchat_minor').']';
69         if ($summary) $say = $say . '<br /><em>' . $summary . '</em>';
70 
71         $message = new rcrowe\Hippy\Message(!$minor, rcrowe\Hippy\Message::BACKGROUND_GREEN);
72         $message->setHtml($say);
73         $hippy->send($message);
74     }
75 
76     /* Make our URLs! */
77     private function urlize() {
78 
79         global $INFO;
80         global $conf;
81         $page = $INFO['id'];
82 
83         switch($conf['userewrite']) {
84             case 0:
85                 $url = DOKU_URL . "doku.php?id=" . $page;
86                 break;
87             case 1:
88                 if ($conf['useslash']) {
89                     $page = str_replace(":", "/", $page);
90                 }
91                 $url = DOKU_URL . $page;
92                 break;
93             case 2:
94                 if ($conf['useslash']) {
95                     $page = str_replace(":", "/", $page);
96                 }
97                 $url = DOKU_URL . "doku.php/" . $page;
98                 break;
99         }
100         return $url;
101     }
102 }
103 
104 // vim:ts=4:sw=4:et:enc=utf-8:
105