3 * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
\r
4 * Copyright (C) 2002-2005 The Nucleus Group
\r
6 * This program is free software; you can redistribute it and/or
\r
7 * modify it under the terms of the GNU General Public License
\r
8 * as published by the Free Software Foundation; either version 2
\r
9 * of the License, or (at your option) any later version.
\r
10 * (see nucleus/documentation/index.html#license for more info)
\r
12 * This script allows adding items to Nucleus through bookmarklets. The member must be logged in
\r
13 * in order to use this.
\r
15 * $Id: bookmarklet.php,v 1.3 2005-03-16 08:04:14 kimitake Exp $
\r
16 * $NucleusJP: bookmarklet.php,v 1.4 2005/03/15 08:24:16 kimitake Exp $
\r
19 // bookmarklet is part of admin area (might need XML-RPC)
\r
21 $CONF['UsingAdminArea'] = 1;
\r
23 // include all classes and config data
\r
24 include('../config.php');
\r
26 $action = requestVar('action');
\r
28 if ($action == 'contextmenucode') {
\r
29 bm_doContextMenuCode();
\r
33 if (!$member->isLoggedIn()) {
\r
34 bm_loginAndPassThrough();
\r
38 // on successfull login
\r
39 if (($action == 'login') && ($member->isLoggedIn()))
\r
40 $action = requestVar('nextaction');
\r
44 sendContentType('application/xhtml+xml', 'bookmarklet-'.$action);
\r
47 $action = strtolower($action);
\r
48 $aActionsNotToCheck = array('login', 'add', 'edit');
\r
49 if (!in_array($action, $aActionsNotToCheck))
\r
51 if (!$manager->checkTicket())
\r
52 bm_doError(_ERROR_BADTICKET);
\r
56 // find out what to do
\r
59 bm_doAddItem(); // adds the item for real
\r
62 bm_doEditForm(); // shows the edit item form
\r
64 case 'edititem': // edits the item for real
\r
67 case 'login': // on login, 'action' gets changed to 'nextaction'
\r
68 bm_doError('Something went wrong');
\r
72 bm_doShowForm(); // shows the fill in form
\r
76 function bm_doAddItem() {
\r
77 global $member, $manager, $CONF;
\r
79 $manager->loadClass('ITEM');
\r
80 $result = ITEM::createFromRequest();
\r
82 if ($result['status'] == 'error')
\r
83 bm_doError($result['message']);
\r
85 $blogid = getBlogIDFromItemID($result['itemid']);
\r
86 $blog =& $manager->getBlog($blogid);
\r
88 if ($result['status'] == 'newcategory') {
\r
89 $message = '¥¢¥¤¥Æ¥à¤ÏÄɲ䵤졢¿·¤·¤¤¥«¥Æ¥´¥ê¡¼¤¬ºîÀ®¤µ¤ì¤Þ¤·¤¿¡£ <a href="index.php?action=categoryedit&blogid='.$blogid.'&catid='.$result['catid'].'" onclick="if (event && event.preventDefault) event.preventDefault(); window.open(this.href); return false;" title="Opens in new window">¤³¤³¤ò¥¯¥ê¥Ã¥¯¤·¤Æ¥«¥Æ¥´¥ê¡¼¤Î̾Á°¤ÈÀâÌÀ¤òÊÔ½¸¤·¤Æ¤¯¤À¤µ¤¤¡£</a>';
\r
91 } elseif ((postVar('actiontype') == 'addnow') && $blog->pingUserland()) {
\r
92 $message = '¥¢¥¤¥Æ¥à¤ÎÄɲäËÀ®¸ù¤·¤Þ¤·¤¿¡£¸½ºßweblogs.com¤Ëping¤òÁ÷¤Ã¤Æ¤¤¤Þ¤¹¡£¤·¤Ð¤é¤¯¤Î´Ö¤ªÂÔ¤Á¤¯¤À¤µ¤¤...';
\r
93 $extrahead = '<meta http-equiv="refresh" content="1; url=index.php?action=sendping&blogid=' . $blogid . '" />';
\r
95 $message = _ITEM_ADDED;
\r
99 bm_message(_ITEM_ADDED, _ITEM_ADDED, $message,$extrahead);
\r
102 function bm_doEditItem() {
\r
103 global $member, $manager, $CONF;
\r
105 $itemid = intRequestVar('itemid');
\r
106 $catid = postVar('catid');
\r
108 // only allow if user is allowed to alter item
\r
109 if (!$member->canUpdateItem($itemid, $catid))
\r
110 bm_doError(_ERROR_DISALLOWED);
\r
112 $body = postVar('body');
\r
113 $title = postVar('title');
\r
114 $more = postVar('more');
\r
115 $closed = intPostVar('closed');
\r
116 $actiontype = postVar('actiontype');
\r
118 // redirect to admin area on delete (has delete confirmation)
\r
119 if ($actiontype == 'delete') {
\r
120 redirect('index.php?action=itemdelete&itemid='.$itemid);
\r
124 // create new category if needed (only on edit/changedate)
\r
125 if (strstr($catid,'newcat')) {
\r
127 list($blogid) = sscanf($catid,"newcat-%d");
\r
130 $blog =& $manager->getBlog($blogid);
\r
131 $catid = $blog->createNewCategory();
\r
133 // show error when sth goes wrong
\r
135 bm_doError('Could not create new category');
\r
138 // only edit action is allowed for bookmarklet edit
\r
139 switch ($actiontype) {
\r
143 $timestamp = mktime(postVar('hour'), postVar('minutes'), 0, postVar('month'), postVar('day'), postVar('year'));
\r
151 bm_doError('Something went wrong');
\r
154 // update item for real
\r
155 ITEM::update($itemid, $catid, $title, $body, $more, $closed, $wasdraft, $publish, $timestamp);
\r
157 // show success message
\r
158 if ($catid != intPostVar('catid'))
\r
159 bm_message(_ITEM_UPDATED, _ITEM_UPDATED, '¥¢¥¤¥Æ¥à¤ÏÄɲ䵤졢¿·¤·¤¤¥«¥Æ¥´¥ê¡¼¤¬ºîÀ®¤µ¤ì¤Þ¤·¤¿¡£<a href="index.php?action=categoryedit&blogid='.$blog->getID().'&catid='.$catid.'" onclick="if (event && event.preventDefault) event.preventDefault(); window.open(this.href); return false;" title="Opens in new window">¤³¤³¤ò¥¯¥ê¥Ã¥¯¤·¤Æ¥«¥Æ¥´¥ê¡¼¤Î̾Á°¤ÈÀâÌÀ¤òÊÔ½¸¤·¤Æ¤¯¤À¤µ¤¤¡£</a>', '');
\r
161 bm_message(_ITEM_UPDATED, _ITEM_UPDATED, _ITEM_UPDATED, '');
\r
164 function bm_loginAndPassThrough() {
\r
166 $blogid = intRequestVar('blogid');
\r
167 $log_text = requestVar('logtext');
\r
168 $log_link = requestVar('loglink');
\r
169 $log_linktitle = requestVar('loglinktitle');
\r
172 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
\r
173 <html xmlns="http://www.w3.org/1999/xhtml">
\r
175 <meta http-equiv="Content-Type" content="text/html; charset=<?php echo _CHARSET ?>" />
\r
176 <title>Nucleus</title>
\r
177 <?php bm_style(); ?>
\r
180 <h1><?php echo _LOGIN_PLEASE?></h1>
\r
182 <form method="post" action="bookmarklet.php">
\r
184 <input name="action" value="login" type="hidden" />
\r
185 <input name="blogid" value="<?php echo htmlspecialchars($blogid) ?>" type="hidden" />
\r
186 <input name="logtext" value="<?php echo htmlspecialchars($log_text) ?>" type="hidden" />
\r
187 <input name="loglink" value="<?php echo htmlspecialchars($log_link) ?>" type="hidden" />
\r
188 <input name="loglinktitle" value="<?php echo htmlspecialchars($log_linktitle) ?>" type="hidden" />
\r
189 <?php echo _LOGINFORM_NAME?>:
\r
190 <br /><input name="login" />
\r
191 <br /><?php echo _LOGINFORM_PWD?>:
\r
192 <br /><input name="password" type="password" />
\r
194 <br /><input type="submit" value="<?php echo _LOGIN?>" />
\r
197 <p><a href="bookmarklet.php" onclick="window.close();"><?php echo _POPUP_CLOSE?></a></p>
\r
203 function bm_doShowForm() {
\r
206 $blogid = intRequestVar('blogid');
\r
207 $log_text = trim(requestVar('logtext'));
\r
208 $log_link = requestVar('loglink');
\r
209 $log_linktitle = requestVar('loglinktitle');
\r
211 $log_text = uniDecode($log_text,_CHARSET);
\r
212 $log_linktitle = uniDecode($log_linktitle,_CHARSET);
\r
214 if (!BLOG::existsID($blogid))
\r
215 bm_doError(_ERROR_NOSUCHBLOG);
\r
217 if (!$member->isTeamMember($blogid))
\r
218 bm_doError(_ERROR_NOTONTEAM);
\r
222 $logje .= '<blockquote><div>"' . htmlspecialchars($log_text) .'"</div></blockquote>' . "\n";
\r
223 if (!$log_linktitle)
\r
224 $log_linktitle = $log_link;
\r
226 $logje .= '<a href="'. htmlspecialchars($log_link) . '">'. htmlspecialchars($log_linktitle).'</a>';
\r
229 $item['body'] = $logje;
\r
230 $item['title'] = htmlspecialchars($log_linktitle);
\r
232 $factory = new PAGEFACTORY($blogid);
\r
233 $factory->createAddForm('bookmarklet',$item);
\r
236 function bm_doEditForm() {
\r
237 global $member, $manager;
\r
239 $itemid = intRequestVar('itemid');
\r
241 if (!$manager->existsItem($itemid, 0, 0))
\r
242 bm_doError(_ERROR_NOSUCHITEM);
\r
244 if (!$member->canAlterItem($itemid))
\r
245 bm_doError(_ERROR_DISALLOWED);
\r
247 $item =& $manager->getItem($itemid,1,1);
\r
248 $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));
\r
250 $manager->notify('PrepareItemForEdit', array('item' => &$item));
\r
252 if ($blog->convertBreaks()) {
\r
253 $item['body'] = removeBreaks($item['body']);
\r
254 $item['more'] = removeBreaks($item['more']);
\r
257 $formfactory = new PAGEFACTORY($blog->getID());
\r
258 $formfactory->createEditForm('bookmarklet',$item);
\r
262 function bm_doError($msg) {
\r
263 bm_message(_ERROR,_ERRORMSG,$msg);
\r
267 function bm_message($title, $head, $msg, $extrahead = '') {
\r
269 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
\r
270 <html xmlns="http://www.w3.org/1999/xhtml">
\r
272 <meta http-equiv="Content-Type" content="text/html; charset=<?php echo _CHARSET ?>" />
\r
273 <title><?php echo $title ?></title>
\r
274 <?php bm_style(); ?>
\r
275 <?php echo $extrahead?>
\r
278 <h1><?php echo $head ?></h1>
\r
279 <p><?php echo $msg ?></p>
\r
280 <p><a href="bookmarklet.php" onclick="window.close();"><?php echo _POPUP_CLOSE?></a></p>
\r
286 function bm_style() {
\r
287 echo '<link rel="stylesheet" type="text/css" href="styles/bookmarklet.css" />';
\r
288 echo '<link rel="stylesheet" type="text/css" href="styles/addedit.css" />';
\r
291 function bm_doContextMenuCode() {
\r
294 <script type="text/javascript" defer="defer">
\r
295 doc=external.menuArguments.document;
\r
296 lt=escape(doc.selection.createRange().text);
\r
297 loglink=escape(external.menuArguments.location.href);
\r
298 loglinktitle=escape(doc.title);
\r
299 wingm=window.open('<?php echo $CONF['AdminURL']?>bookmarklet.php?blogid=<?php echo intGetVar('blogid')?>&logtext='+lt+'&loglink='+loglink+'&loglinktitle='+loglinktitle,'nucleusbm','scrollbars=yes,width=600,height=500,left=10,top=10,status=yes,resizable=yes');
\r
305 function uniDecode($str,$charcode){
\r
306 $text = preg_replace_callback("/%u[0-9A-Za-z]{4}/",toUtf8,$str);
\r
307 return mb_convert_encoding($text, $charcode, 'UTF-8');
\r
309 function toUtf8($ar){
\r
310 foreach($ar as $val){
\r
311 $val = intval(substr($val,2),16);
\r
312 if($val < 0x7F){ // 0000-007F
\r
314 }elseif($val < 0x800) { // 0080-0800
\r
315 $c .= chr(0xC0 | ($val / 64));
\r
316 $c .= chr(0x80 | ($val % 64));
\r
317 }else{ // 0800-FFFF
\r
318 $c .= chr(0xE0 | (($val / 64) / 64));
\r
319 $c .= chr(0x80 | (($val / 64) % 64));
\r
320 $c .= chr(0x80 | ($val % 64));
\r