1 | <?php |
---|
2 | # -- BEGIN LICENSE BLOCK ---------------------------------- |
---|
3 | # This file is part of TaC, a plugin for Dotclear 2. |
---|
4 | # |
---|
5 | # Copyright (c) 2009-2010 JC Denis and contributors |
---|
6 | # jcdenis@gdwd.com |
---|
7 | # |
---|
8 | # Licensed under the GPL version 2.0 license. |
---|
9 | # A copy of this license is available in LICENSE file or at |
---|
10 | # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html |
---|
11 | # -- END LICENSE BLOCK ------------------------------------ |
---|
12 | |
---|
13 | if (!defined('DC_CONTEXT_ADMIN')){return;} |
---|
14 | |
---|
15 | dcPage::check('amdin'); |
---|
16 | $msg = ''; |
---|
17 | |
---|
18 | # Si vous ne souhaitez pas avoir vos propres tokens |
---|
19 | # il suffit de rediriger l'utilisteur sur cette page pour qu'il s'identifie. |
---|
20 | # Pour utiliser oAuth pour vos plugins twitter avec TaC, |
---|
21 | # Voici un exemple dans une utilisation courante (une fois vérifié): |
---|
22 | /* |
---|
23 | if ($core->plugins->moduleExists('tac')) { |
---|
24 | $has_registry = $has_access = false; |
---|
25 | |
---|
26 | try { |
---|
27 | $plop = new tac($core,'TaC',null); |
---|
28 | $has_registry = $plop->checkRegistry(); |
---|
29 | $has_access = $plop->checkAccess(); |
---|
30 | } |
---|
31 | catch(Exception $e) { |
---|
32 | $has_registry = $has_access = false; |
---|
33 | $core->error->add($e->getMessage()); |
---|
34 | } |
---|
35 | |
---|
36 | // Exemples d'echange avec Twitter |
---|
37 | if ($has_access) { |
---|
38 | try { |
---|
39 | // Envoyer de message |
---|
40 | $msg = $plop->tic->statusesUpdate('mon message vers twitter'); |
---|
41 | // ou |
---|
42 | $msg = $plop->post('statuses/update',array('status'=>'mon message vers twitter')); |
---|
43 | if ('' != $msg->text) { |
---|
44 | echo '<p>Message envoyé</p>'; |
---|
45 | } |
---|
46 | |
---|
47 | // Verifier les limits de tweet |
---|
48 | $rate = $plop->tic->accountRateLimitStatus() |
---|
49 | echo '<p>'.$content->remaining_hits.'</p>'; |
---|
50 | } |
---|
51 | catch(Exception $e) { |
---|
52 | $core->error->add($e->getMessage()); |
---|
53 | } |
---|
54 | } |
---|
55 | } |
---|
56 | */ |
---|
57 | # Suivez le déroulement de cette page pour comprendre son utilistion et |
---|
58 | # ainsi pourvoir l'intégrer à votre plugin. |
---|
59 | |
---|
60 | $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : false; |
---|
61 | |
---|
62 | # Ouvre un object pour le plugin TaC et pour tous les utilisateurs du blog (null) |
---|
63 | try { |
---|
64 | $TaC = new tac($core,'TaC',null); |
---|
65 | } |
---|
66 | catch(Exception $e) { |
---|
67 | $core->error->add($e->getMessage()); |
---|
68 | } |
---|
69 | |
---|
70 | # On test si le plugin est connu (si oui il sera chargé dans l'objet) |
---|
71 | if (!$core->error->flag()) |
---|
72 | { |
---|
73 | try { |
---|
74 | $has_registry = $TaC->checkRegistry(); |
---|
75 | } |
---|
76 | catch(Exception $e) { |
---|
77 | $has_registry = false; |
---|
78 | $core->error->add($e->getMessage()); |
---|
79 | } |
---|
80 | } |
---|
81 | |
---|
82 | # Si le plugin est inconnu on l'ajoute |
---|
83 | if (!$core->error->flag() && !$has_registry) |
---|
84 | { |
---|
85 | $cur = $core->con->openCursor($core->prefix.'tac_registry'); |
---|
86 | |
---|
87 | # |
---|
88 | # Exemple ici pour le plugin TaC |
---|
89 | # |
---|
90 | # Pour avoir vos propres tokens sur Twitter il suffit d'enregistrer |
---|
91 | # votre plugin comme une application sur: |
---|
92 | # http://twitter.com/apps |
---|
93 | # - Pour l'url de callback il faut en renseigner |
---|
94 | # une même si elle sera réécrite ici. |
---|
95 | # - Pour le type d'accés TaC supporte le Read & Write |
---|
96 | # |
---|
97 | # Ensuite remplacer les infos ci-dessous par celle donner sur Twitter |
---|
98 | # Et lancer "tac" avec comme deuxiéme parametre l'id de votre plugin. |
---|
99 | # (de préférence car même si pour l'instant il n'y a pas de test sur l'id |
---|
100 | # cela risque de changer dans les versions futurs) |
---|
101 | # |
---|
102 | try { |
---|
103 | $cur->cr_id = 'TaC'; |
---|
104 | $cur->cr_key = 'qXCQrZLAAEzNf7IYxQB6w'; |
---|
105 | $cur->cr_secret = 'fbKB6VIcMnA5xhuLXq3wgaw76fKBDSAd98HjyjjZi6g'; |
---|
106 | //$cur->cr_expiry = 0; |
---|
107 | //$cur->cr_sig_method = 'HMAC-SHA1'; |
---|
108 | $cur->cr_url_request = 'http://twitter.com/oauth/request_token'; |
---|
109 | $cur->cr_url_access = 'http://twitter.com/oauth/access_token'; |
---|
110 | $cur->cr_url_autorize = 'http://twitter.com/oauth/authorize'; |
---|
111 | $cur->cr_url_authenticate = 'https://api.twitter.com/oauth/authenticate'; |
---|
112 | |
---|
113 | $TaC->addRegistry($cur); |
---|
114 | |
---|
115 | # Puis on retente de le charger |
---|
116 | $has_registry = $TaC->checkRegistry(); |
---|
117 | |
---|
118 | # Si il n'est toujours pas reconnu, il y a un bug! |
---|
119 | if (!$has_registry) { |
---|
120 | throw new Exception(__('Failed to register plugin')); |
---|
121 | } |
---|
122 | } |
---|
123 | catch(Exception $e) { |
---|
124 | $core->error->add($e->getMessage()); |
---|
125 | } |
---|
126 | } |
---|
127 | |
---|
128 | # On test si l'utilisateur est connu (si oui il sera chargé dans l'objet) |
---|
129 | if (!$core->error->flag()) |
---|
130 | { |
---|
131 | try { |
---|
132 | $has_access = $TaC->checkAccess(); |
---|
133 | } |
---|
134 | catch(Exception $e) { |
---|
135 | $has_access = false; |
---|
136 | $core->error->add($e->getMessage()); |
---|
137 | } |
---|
138 | } |
---|
139 | |
---|
140 | # 1ère phase de l'authentification |
---|
141 | # |
---|
142 | # Si l'utilisateur est inconnu on demarre le processus d'authentification oAuth |
---|
143 | # avec le joli bouton de connexion |
---|
144 | # voir plus bas: if (!$core->error->flag() && !$action && !$has_access) |
---|
145 | |
---|
146 | |
---|
147 | # 2ème phase de l'authentification |
---|
148 | # |
---|
149 | # L'utilisateur souhaite s'authentifier |
---|
150 | # On lance une requete pour avoir un token temporaire |
---|
151 | # Si la requete est valide, on redirige l'utilisateur vers le serveur oAuth |
---|
152 | # en lui précisant l'url de retour |
---|
153 | if (!$core->error->flag() && $action == 'redirect') |
---|
154 | { |
---|
155 | try { |
---|
156 | $url = $TaC->requestAccess(DC_ADMIN_URL.'plugin.php?p=TaC&action=callback'); |
---|
157 | http::redirect($url); |
---|
158 | } |
---|
159 | catch(Exception $e) { |
---|
160 | $core->error->add($e->getMessage()); |
---|
161 | } |
---|
162 | } |
---|
163 | |
---|
164 | # 3éme phase de l'authentification |
---|
165 | # |
---|
166 | # L'utilisateur revient du seveur oAuth avec un code définitif |
---|
167 | # Si il n'y a pas d'erreur on recharge la page pour tout prendre en compte |
---|
168 | if (!$core->error->flag() && $action == 'callback') |
---|
169 | { |
---|
170 | try { |
---|
171 | $has_grant = $TaC->grantAccess(); |
---|
172 | |
---|
173 | # Sinon on efface toute les infos de l'utilisateur |
---|
174 | if (!$has_grant) { |
---|
175 | $TaC->cleanAccess(); |
---|
176 | } |
---|
177 | http::redirect($p_url); |
---|
178 | } |
---|
179 | catch(Exception $e) { |
---|
180 | $has_grant = false; |
---|
181 | $core->error->add($e->getMessage()); |
---|
182 | } |
---|
183 | } |
---|
184 | |
---|
185 | # Additionnel |
---|
186 | # Nettoyer un acces |
---|
187 | if (!$core->error->flag() && $action == 'clean') |
---|
188 | { |
---|
189 | try { |
---|
190 | $TaC->cleanAccess(); |
---|
191 | http::redirect($p_url); |
---|
192 | } |
---|
193 | catch(Exception $e) { |
---|
194 | $core->error->add($e->getMessage()); |
---|
195 | } |
---|
196 | } |
---|
197 | |
---|
198 | # Additionnel |
---|
199 | # Envoyer un message sur twitter |
---|
200 | if (!$core->error->flag() && $action == 'sendtweet' && !empty($_POST['message'])) |
---|
201 | { |
---|
202 | $message = trim($_POST['message']); |
---|
203 | if (!empty($message)) { |
---|
204 | $params = array( |
---|
205 | 'status' => (string) $message |
---|
206 | ); |
---|
207 | $su = $TaC->post('statuses/update',$params); |
---|
208 | if ('' != $su->text) { |
---|
209 | $msg = '<p class="message">'.__('Your message have been successfully sent.').'</p>'; |
---|
210 | } |
---|
211 | else { |
---|
212 | $msg = '<p class="message">'.__('Not sure that your message is sent').'</p>'; |
---|
213 | } |
---|
214 | } |
---|
215 | } |
---|
216 | |
---|
217 | # Display |
---|
218 | echo ' |
---|
219 | <html><head><title>TaC - '.__("Twitter Authentication Client").'</title></head> |
---|
220 | <body> |
---|
221 | <h2>'.html::escapeHTML($core->blog->name).' › TaC - '.__("Twitter Authentication Client").'</h2> |
---|
222 | <div class="two-cols"><div class="col">'; |
---|
223 | |
---|
224 | if (!$core->error->flag() && $has_access) |
---|
225 | { |
---|
226 | echo $msg; |
---|
227 | |
---|
228 | $user = $TaC->get('account/verify_credentials'); |
---|
229 | $content = $TaC->get('account/rate_limit_status'); |
---|
230 | |
---|
231 | echo ' |
---|
232 | <fieldset><legend>'.__('Account information').'</legend> |
---|
233 | <ul> |
---|
234 | <li>'.sprintf(__('Your are connected as "%s"'),$user->screen_name).'</li> |
---|
235 | <li>'.sprintf(__('It remains %s API hits'),$content->remaining_hits).'</li> |
---|
236 | <li><a href="'.$p_url.'&action=clean">'.__('Disconnect and clean access').'</a></li> |
---|
237 | </ul> |
---|
238 | |
---|
239 | <form method="post" action="'.$p_url.'"> |
---|
240 | <p><label>'.__('Quick send message to your twitter timeline:').' <br />'. |
---|
241 | form::field(array('message'),60,140,'').'</label></p> |
---|
242 | <p><input type="submit" name="save" value="'.__('send').'" />'. |
---|
243 | $core->formNonce(). |
---|
244 | form::hidden(array('p'),'TaC'). |
---|
245 | form::hidden(array('action'),'sendtweet').' |
---|
246 | </p> |
---|
247 | </form> |
---|
248 | </fieldset>'; |
---|
249 | } |
---|
250 | |
---|
251 | # First part |
---|
252 | if (!$core->error->flag() && !$action && !$has_access) |
---|
253 | { |
---|
254 | echo ' |
---|
255 | <fieldset><legend>'.__('Connect your blog with your twitter account through TaC').'</legend> |
---|
256 | <p><a href="'.$p_url.'&action=redirect"><img src="index.php?pf=TaC/img/tac_light.png" alt="Sign in with Twitter"/></a></p> |
---|
257 | </fieldset>'; |
---|
258 | } |
---|
259 | |
---|
260 | # Reload page |
---|
261 | if ($core->error->flag()) { |
---|
262 | echo '<p><a href="'.$p_url.'">'.__('Retry').'</a></p>'; |
---|
263 | } |
---|
264 | |
---|
265 | # TaC stats |
---|
266 | if (!$core->error->flag()) { |
---|
267 | $stats = $TaC->stat(); |
---|
268 | if (1 < count($stats['registry'])) { |
---|
269 | echo ' |
---|
270 | </div><div class="col"> |
---|
271 | <fieldset><legend>'.__('Usage of TaC').'</legend> |
---|
272 | <p>'.sprintf(__('TaC is used by %s different consumers.'),count($stats['registry'])).'</p>'; |
---|
273 | if (count($stats['registry'])) { |
---|
274 | echo '<ul>'; |
---|
275 | foreach ($stats['registry'] as $k => $v) { |
---|
276 | echo '<li>'.sprintf(__('Consumer "%s" has %s registered client(s).'), |
---|
277 | $v['id'],$v['access']).'</li>'; |
---|
278 | } |
---|
279 | echo '</ul>'; |
---|
280 | } |
---|
281 | echo ' |
---|
282 | </fieldset>'; |
---|
283 | } |
---|
284 | } |
---|
285 | |
---|
286 | echo ' |
---|
287 | </div></div> |
---|
288 | <br class="clear"/> |
---|
289 | <p class="right"> |
---|
290 | TaC - '.$core->plugins->moduleInfo('TaC','version').' |
---|
291 | <img alt="TaC" src="index.php?pf=TaC/icon.png" /> |
---|
292 | </p>'; |
---|
293 | dcPage::helpBlock('TaC'); |
---|
294 | echo '</body></html>'; |
---|
295 | ?> |
---|