0byt3m1n1-V2
Path:
/
home
/
magalijoj
/
www
/
blog
/
plugins
/
metadata
/
[
Home
]
File: _admin.php
<?php # ***** BEGIN LICENSE BLOCK ***** # This file is part of DotClear. # Copyright (c) 2005 Olivier Meunier and contributors. All rights # reserved. # # DotClear is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # DotClear is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with DotClear; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # ***** END LICENSE BLOCK ***** $_menu['Blog']->addItem('Tags','plugin.php?p=metadata&m=tags','index.php?pf=metadata/tags.png', preg_match('/plugin.php\?p=metadata&m=tag(s|_posts)?(&.*)?$/',$_SERVER['REQUEST_URI']), $core->auth->check('usage,contentadmin',$core->blog->id)); require dirname(__FILE__).'/_widgets.php'; $core->addBehavior('adminPostFormSidebar',array('metaBehaviors','tagsField')); $core->addBehavior('adminAfterPostCreate',array('metaBehaviors','setTags')); $core->addBehavior('adminAfterPostUpdate',array('metaBehaviors','setTags')); $core->addBehavior('adminPostHeaders',array('metaBehaviors','postHeaders')); $core->addBehavior('adminPostsActionsCombo',array('metaBehaviors','adminPostsActionsCombo')); $core->addBehavior('adminPostsActions',array('metaBehaviors','adminPostsActions')); $core->addBehavior('adminPostsActionsContent',array('metaBehaviors','adminPostsActionsContent')); $core->addBehavior('coreInitWikiPost',array('metaBehaviors','coreInitWikiPost')); $core->addBehavior('exportFull',array('metaBehaviors','exportFull')); $core->addBehavior('exportSingle',array('metaBehaviors','exportSingle')); $core->addBehavior('importInit',array('metaBehaviors','importInit')); $core->addBehavior('importSingle',array('metaBehaviors','importSingle')); $core->addBehavior('importFull',array('metaBehaviors','importFull')); $core->addBehavior('importPrepareDC12',array('metaBehaviors','importPrepareDC12')); $core->rest->addFunction('getMeta',array('metaRest','getMeta')); $core->rest->addFunction('delMeta',array('metaRest','delMeta')); $core->rest->addFunction('setPostMeta',array('metaRest','setPostMeta')); # BEHAVIORS class metaBehaviors { public static function coreInitWikiPost(&$wiki2xhtml) { $wiki2xhtml->registerFunction('url:tag',array('metaBehaviors','wiki2xhtmlTag')); } public static function wiki2xhtmlTag($url,$content) { $url = substr($url,4); if (strpos($content,'tag:') === 0) { $content = substr($content,4); } $tag_url = html::stripHostURL($GLOBALS['core']->blog->url.$GLOBALS['core']->url->getBase('tag')); $res['url'] = $tag_url.'/'.rawurlencode(dcMeta::sanitizeMetaID($url)); $res['content'] = $content; return $res; } public static function tagsField(&$post) { $meta = new dcMeta($GLOBALS['core']); if (!empty($_POST['post_tags'])) { $value = $_POST['post_tags']; } else { $value = ($post) ? $meta->getMetaStr($post->post_meta,'tag') : ''; } echo '<h3><label for="post_tags">'.__('Tags:').'</label></h3>'. '<div class="p" id="meta-edit-tags">'.form::textarea('post_tags',20,3,$value,'maximal',3).'</div>'; } public static function setTags(&$cur,&$post_id) { $post_id = (integer) $post_id; if (isset($_POST['post_tags'])) { $tags = $_POST['post_tags']; $meta = new dcMeta($GLOBALS['core']); $meta->delPostMeta($post_id,'tag'); foreach ($meta->splitMetaValues($tags) as $tag) { $meta->setPostMeta($post_id,'tag',$tag); } } } public static function postHeaders() { $tag_url = $GLOBALS['core']->blog->url.$GLOBALS['core']->url->getBase('tag'); return '<script type="text/javascript" src="index.php?pf=metadata/post.js"></script>'. '<script type="text/javascript">'."\n". "//<![CDATA[\n". "metaEditor.prototype.text_confirm_remove = '".html::escapeJS(__('Are you sure you want to remove this %s?'))."';\n". "metaEditor.prototype.text_add_meta = '".html::escapeJS(__('Add a %s to this entry'))."';\n". "metaEditor.prototype.text_choose = '".html::escapeJS(__('Choose from list'))."';\n". "metaEditor.prototype.text_more = '".html::escapeJS(__('more'))."';\n". "metaEditor.prototype.text_all = '".html::escapeJS(__('all'))."';\n". "jsToolBar.prototype.elements.tag.title = '".html::escapeJS(__('Tag'))."';\n". "jsToolBar.prototype.elements.tag.url = '".html::escapeJS($tag_url)."';\n". "\n//]]>\n". "</script>\n". '<link rel="stylesheet" type="text/css" href="index.php?pf=metadata/style.css" />'; } public static function adminPostsActionsCombo(&$args) { $args[0][__('add tags')] = 'tags'; } public static function adminPostsActions(&$core,$posts,$action,$redir) { if ($action == 'tags' && !empty($_POST['new_tags'])) { try { $meta = new dcMeta($core); $tags = $meta->splitMetaValues($_POST['new_tags']); while ($posts->fetch()) { # Get tags for post $post_meta = $meta->getMeta('tag',null,null,$posts->post_id); $pm = array(); while ($post_meta->fetch()) { $pm[] = $post_meta->meta_id; } foreach ($tags as $t) { if (!in_array($t,$pm)) { $meta->setPostMeta($posts->post_id,'tag',$t); } } } http::redirect($redir); } catch (Exception $e) { $core->error->add($e->getMessage()); } } } public static function adminPostsActionsContent($core,$action,$hidden_fields) { if ($action == 'tags') { echo '<h2>'.__('Add tags to entries').'</h2>'. '<form action="posts_actions.php" method="post">'. '<p><label class="area">'.__('Tags to add:').' '. form::textarea('new_tags',60,3). '</label> '. $hidden_fields. $core->formNonce(). form::hidden(array('action'),'tags'). '<input type="submit" value="'.__('save').'" /></p>'. '</form>'; } } public static function exportFull(&$core,&$exp) { $exp->exportTable('meta'); } public static function exportSingle(&$core,&$exp,$blog_id) { $exp->export('meta', 'SELECT meta_id, meta_type, M.post_id '. 'FROM '.$core->prefix.'meta M, '.$core->prefix.'post P '. 'WHERE P.post_id = M.post_id '. "AND P.blog_id = '".$blog_id."'" ); } public static function importInit(&$bk,&$core) { $bk->cur_meta = $core->con->openCursor($core->prefix.'meta'); $bk->meta = new dcMeta($core); } public static function importFull(&$line,&$bk,&$core) { if ($line->__name == 'meta') { $bk->cur_meta->clean(); $bk->cur_meta->meta_id = (string) $line->meta_id; $bk->cur_meta->meta_type = (string) $line->meta_type; $bk->cur_meta->post_id = (integer) $line->post_id; $bk->cur_meta->insert(); } } public static function importSingle(&$line,&$bk,&$core) { if ($line->__name == 'meta' && isset($bk->old_ids['post'][(integer) $line->post_id])) { $line->post_id = $bk->old_ids['post'][(integer) $line->post_id]; $bk->meta->setPostMeta($line->post_id,$line->meta_type,$line->meta_id); } } public static function importPrepareDC12(&$line,&$bk,&$core) { if ($line->__name == 'post_meta') { $line->drop('meta_id'); $line->substitute('meta_key','meta_type'); $line->substitute('meta_value','meta_id'); $line->__name = 'meta'; $line->blog_id = 'default'; } } } # REST class metaRest { public static function getMeta(&$core,$get) { $meta = new dcMeta($core); $postid = !empty($get['postId']) ? $get['postId'] : null; $limit = !empty($get['limit']) ? $get['limit'] : null; $metaId = !empty($get['metaId']) ? $get['metaId'] : null; $metaType = !empty($get['metaType']) ? $get['metaType'] : null; $sortby = !empty($get['sortby']) ? $get['sortby'] : 'meta_type,asc'; $rs = $meta->getMeta($metaType,$limit,$metaId,$postid); $sortby = explode(',',$sortby); $sort = $sortby[0]; $order = isset($sortby[1]) ? $sortby[1] : 'asc'; switch ($sort) { case 'metaId': $sort = 'meta_id_lower'; break; case 'count': $sort = 'count'; break; case 'metaType': $sort = 'meta_type'; break; default: $sort = 'meta_type'; } $rs->sort($sort,$order); $rsp = new xmlTag(); while ($rs->fetch()) { $metaTag = new xmlTag('meta'); $metaTag->type = $rs->meta_type; $metaTag->uri = rawurlencode($rs->meta_id); $metaTag->count = $rs->count; $metaTag->percent = $rs->percent; $metaTag->roundpercent = $rs->roundpercent; $metaTag->CDATA($rs->meta_id); $rsp->insertNode($metaTag); } return $rsp; } public static function setPostMeta(&$core,$get,$post) { if (empty($post['postId'])) { throw new Exception('No post ID'); } if (empty($post['meta'])) { throw new Exception('No meta'); } if (empty($post['metaType'])) { throw new Exception('No meta type'); } $meta = new dcMeta($core); # Get previous meta for post $post_meta = $meta->getMeta($post['metaType'],null,null,$post['postId']); $pm = array(); while ($post_meta->fetch()) { $pm[] = $post_meta->meta_id; } foreach ($meta->splitMetaValues($post['meta']) as $m) { if (!in_array($m,$pm)) { $meta->setPostMeta($post['postId'],$post['metaType'],$m); } } return true; } public static function delMeta(&$core,$get,$post) { if (empty($post['postId'])) { throw new Exception('No post ID'); } if (empty($post['metaId'])) { throw new Exception('No meta ID'); } if (empty($post['metaType'])) { throw new Exception('No meta type'); } $meta = new dcMeta($core); $meta->delPostMeta($post['postId'],$post['metaType'],$post['metaId']); return true; } } ?>
©
2018.