add('name', PLUGIN_EVENT_XMLRPC_NAME); $propbag->add('description', PLUGIN_EVENT_XMLRPC_DESC); $propbag->add('stackable', false); $propbag->add('author', 'Serendipity Team'); $propbag->add('version', '1.52'); $propbag->add('requirements', array( 'serendipity' => '0.8', 'smarty' => '2.6.7', 'php' => '4.1.0' )); $propbag->add('event_hooks', array( 'frontend_xmlrpc' => true, 'frontend_header' => true )); $propbag->add('configuration', array('doc_rpclink','category', 'gmt', 'uploaddir', 'htmlconvert', 'asureauthor', 'wpfakeversion', 'debuglog', 'spamevent_description', 'event_spam', 'event_approved','event_pending') ); $propbag->add('groups', array('FRONTEND_FULL_MODS', 'FRONTEND_EXTERNAL_SERVICES')); } function generate_content(&$title) { $title = $this->title; } function showXSD() { global $serendipity; echo ' Serendipity (s9y) http://www.s9y.org/ ' . $serendipity['baseURL'] . ' '; } // function introspect_config_item($name, &$propbag) { global $serendipity; switch($name) { case 'doc_rpclink': $propbag->add('type', 'content'); $propbag->add('default', sprintf(PLUGIN_EVENT_XMLRPC_DOC_RPCLINK, $serendipity['baseURL'] . 'serendipity_xmlrpc.php')); break; case 'debuglog': $debuglevels = array( 'none' => PLUGIN_EVENT_XMLRPC_DEBUGLOG_NONE, 'normal' => PLUGIN_EVENT_XMLRPC_DEBUGLOG_NORMAL, //'verbose' => PLUGIN_EVENT_XMLRPC_DEBUGLOG_VERBOSE ); $propbag->add('type', 'select'); $propbag->add('select_values', $debuglevels); $propbag->add('name', PLUGIN_EVENT_XMLRPC_DEBUGLOG); $propbag->add('description', PLUGIN_EVENT_XMLRPC_DEBUGLOG_DESC); $propbag->add('default', 'none'); break; case 'gmt': $propbag->add('type', 'boolean'); $propbag->add('name', PLUGIN_EVENT_XMLRPC_GMT); $propbag->add('description', ''); $propbag->add('default', false); break; case 'uploaddir' : $propbag->add('type', 'select'); $propbag->add('select_values', $this->scanUploadDir()); $propbag->add('name', PLUGIN_EVENT_XMLRPC_UPLOADDIR); $propbag->add('description', PLUGIN_EVENT_XMLRPC_UPLOADDIR_DESC); $propbag->add('default', ''); break; case 'htmlconvert': $propbag->add('type', 'boolean'); $propbag->add('name', PLUGIN_EVENT_XMLRPC_HTMLCONVERT); $propbag->add('description', PLUGIN_EVENT_XMLRPC_HTMLCONVERT_DESC); $propbag->add('default', true); break; case 'asureauthor': $authoroptions = array( 'default' => PLUGIN_EVENT_XMLRPC_ASUREAUTHOR_DEFAULT, 'serendipityUser' => PLUGIN_EVENT_XMLRPC_ASUREAUTHOR_LOGIN, 'serendipityRealname' => PLUGIN_EVENT_XMLRPC_ASUREAUTHOR_REALNAME, ); $propbag->add('type', 'select'); $propbag->add('select_values', $authoroptions); $propbag->add('name', PLUGIN_EVENT_XMLRPC_ASUREAUTHOR); $propbag->add('description', PLUGIN_EVENT_XMLRPC_ASUREAUTHOR_DESC); $propbag->add('default', 'default'); break; case 'wpfakeversion' : $propbag->add('type', 'string'); $propbag->add('name', PLUGIN_EVENT_XMLRPC_WPFAKEVERSION); $propbag->add('description', PLUGIN_EVENT_XMLRPC_WPFAKEVERSION_DESC); $propbag->add('default', ''); break; case 'category': $cats = serendipity_fetchCategories($serendipity['authorid']); if (!is_array($cats)) { return false; } $catlist = serendipity_generateCategoryList($cats, array(0), 4); $tmp_select_cats = explode('@@@', $catlist); if (!is_array($tmp_select_cats)) { return false; } $select_cats = array(); $select_cats[''] = ''; foreach($tmp_select_cats as $cidx => $tmp_select_cat) { $select_cat = explode('|||', $tmp_select_cat); if (!empty($select_cat[0]) && !empty($select_cat[1])) { $select_cats[$select_cat[0]] = $select_cat[1]; } } $propbag->add('type', 'select'); $propbag->add('select_values', $select_cats); $propbag->add('name', PLUGIN_EVENT_XMLRPC_DEFAULTCAT); $propbag->add('description', PLUGIN_EVENT_XMLRPC_DEFAULTCAT_DESC); $propbag->add('default', ''); break; case 'spamevent_description': $propbag->add('type', 'content'); $propbag->add('default', PLUGIN_EVENT_XMLRPC_EVENT_SPAM_HEADER); break; case 'event_spam': case 'event_approved': case 'event_pending': $events = array( 'none' => PLUGIN_EVENT_XMLRPC_EVENTVALUE_NONE, 'spam' => PLUGIN_EVENT_XMLRPC_EVENTVALUE_SPAM, 'ham' => PLUGIN_EVENT_XMLRPC_EVENTVALUE_HAM ); $propbag->add('type', 'select'); $propbag->add('select_values', $events); if ($name=='event_spam') { $propbag->add('name', PLUGIN_EVENT_XMLRPC_EVENT_SPAM); $propbag->add('description', PLUGIN_EVENT_XMLRPC_EVENT_SPAM_DESC); $propbag->add('default', 'spam'); } elseif ($name=='event_approved') { $propbag->add('name', PLUGIN_EVENT_XMLRPC_EVENT_APPROVED); $propbag->add('description', PLUGIN_EVENT_XMLRPC_EVENT_APPROVED_DESC); $propbag->add('default', 'ham'); } elseif ($name=='event_pending') { $propbag->add('name', PLUGIN_EVENT_XMLRPC_EVENT_PENDING); $propbag->add('description', PLUGIN_EVENT_XMLRPC_EVENT_PENDING_DESC); $propbag->add('default', 'none'); } break; default: return false; } return true; } function event_hook($event, &$bag, &$eventData, $addData = null) { global $serendipity, $HTTP_RAW_POST_DATA; $hooks = &$bag->get('event_hooks'); $links = array(); $article_show = false; if (isset($hooks[$event])) { switch($event) { case 'frontend_header': echo '' . "\n"; echo '' . "\n"; break; case 'frontend_xmlrpc': // Those variables should not be set by other plugins! header('Content-Type: text/xml'); $eventData = array('XML-RPC' => true); if ($_REQUEST['xsd']) { $this->showXSD(); return true; } unset($serendipity['GET']['category']); unset($serendipity['GET']['hide_category']); $serendipity['xmlrpc_default_category'] = $this->get_config('category'); $serendipity['xmlrpc_debuglog'] = $this->get_config('debuglog','none'); $serendipity['xmlrpc_wpfakeversion'] = $this->get_config('wpfakeversion',''); $serendipity['xmlrpc_htmlconvert'] = $this->get_config('htmlconvert',true); $serendipity['xmlrpc_uploadreldir'] = $this->get_config('uploaddir',''); $serendipity['xmlrpc_asureauthor'] = $this->get_config('asureauthor','default'); $serendipity['xmlrpc_event_spam'] = $this->get_config('event_spam','spam'); $serendipity['xmlrpc_event_approved'] = $this->get_config('event_approved','ham'); $serendipity['xmlrpc_event_pending'] = $this->get_config('event_approved','none'); @define('SERENDIPITY_IS_XMLRPC', true); $serendipity['XMLRPC_GMT'] = serendipity_db_bool($this->get_config('gmt')); $this->setupPearPath(); if (!class_exists('XML_RPC_Base')) { require_once PLUGIN_EVENT_XMLRPC_PEAR_PATH . 'XML/RPC.php'; } if (!class_exists('XML_RPC_Server')) { require_once PLUGIN_EVENT_XMLRPC_PEAR_PATH . 'XML/RPC/Server.php'; } require_once dirname(__FILE__) . '/serendipity_xmlrpc.inc.php'; return true; default: return false; break; } } else { return false; } } function setupPearPath() { // use bundled PEAR modules instead of plugins, if found // The s9y bundled lib could be outdated. Upgrading it with the plugin is much more easy. /* @define('S9Y_PEAR_PATH', $serendipity['serendipityPath'] . 'bundled-libs/'); if (file_exists(S9Y_PEAR_PATH . 'XML/RPC.php') && file_exists(S9Y_PEAR_PATH . 'XML/RPC/Server.php')) { @define('PLUGIN_EVENT_XMLRPC_PEAR_PATH', S9Y_PEAR_PATH); } else { */ @define('PLUGIN_EVENT_XMLRPC_PEAR_PATH',dirname(__FILE__) . '/PEAR/'); // } } function scanUploadDir(){ global $serendipity; if (!serendipity_checkPermission('adminImagesDirectories')) { return; } $folders = serendipity_traversePath( $serendipity['serendipityPath'] . $serendipity['uploadPath'], '', true, NULL, 1, NULL, 'write' ); usort($folders, 'serendipity_sortPath'); $result = array('' => PARENT_DIRECTORY); foreach ($folders as $dirmeta) { $result[$dirmeta['relpath']] = $dirmeta['relpath']; } return $result; } } /* vim: set sts=4 ts=4 expandtab : */