はじまりの大地
This commit is contained in:
@@ -0,0 +1,189 @@
|
||||
<?php
|
||||
|
||||
class admin_plugin_move_tree extends DokuWiki_Admin_Plugin {
|
||||
|
||||
const TYPE_PAGES = 1;
|
||||
const TYPE_MEDIA = 2;
|
||||
|
||||
/**
|
||||
* @param $language
|
||||
* @return bool
|
||||
*/
|
||||
public function getMenuText($language) {
|
||||
return false; // do not show in Admin menu
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* If this admin plugin is for admins only
|
||||
*
|
||||
* @return bool false
|
||||
*/
|
||||
function forAdminOnly() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* no-op
|
||||
*/
|
||||
public function handle() {
|
||||
}
|
||||
|
||||
public function html() {
|
||||
global $ID;
|
||||
|
||||
echo $this->locale_xhtml('tree');
|
||||
|
||||
echo '<noscript><div class="error">' . $this->getLang('noscript') . '</div></noscript>';
|
||||
|
||||
echo '<div id="plugin_move__tree">';
|
||||
|
||||
echo '<div class="tree_root tree_pages">';
|
||||
echo '<h3>' . $this->getLang('move_pages') . '</h3>';
|
||||
$this->htmlTree(self::TYPE_PAGES);
|
||||
echo '</div>';
|
||||
|
||||
echo '<div class="tree_root tree_media">';
|
||||
echo '<h3>' . $this->getLang('move_media') . '</h3>';
|
||||
$this->htmlTree(self::TYPE_MEDIA);
|
||||
echo '</div>';
|
||||
|
||||
/** @var helper_plugin_move_plan $plan */
|
||||
$plan = plugin_load('helper', 'move_plan');
|
||||
echo '<div class="controls">';
|
||||
if($plan->isCommited()) {
|
||||
echo '<div class="error">' . $this->getLang('moveinprogress') . '</div>';
|
||||
} else {
|
||||
$form = new Doku_Form(array('action' => wl($ID), 'id' => 'plugin_move__tree_execute'));
|
||||
$form->addHidden('id', $ID);
|
||||
$form->addHidden('page', 'move_main');
|
||||
$form->addHidden('json', '');
|
||||
$form->addElement(form_makeCheckboxField('autoskip', '1', $this->getLang('autoskip'), '', '', ($this->getConf('autoskip') ? array('checked' => 'checked') : array())));
|
||||
$form->addElement('<br />');
|
||||
$form->addElement(form_makeCheckboxField('autorewrite', '1', $this->getLang('autorewrite'), '', '', ($this->getConf('autorewrite') ? array('checked' => 'checked') : array())));
|
||||
$form->addElement('<br />');
|
||||
$form->addElement('<br />');
|
||||
$form->addElement(form_makeButton('submit', 'admin', $this->getLang('btn_start')));
|
||||
$form->printForm();
|
||||
}
|
||||
echo '</div>';
|
||||
|
||||
echo '</div>';
|
||||
}
|
||||
|
||||
/**
|
||||
* print the HTML tree structure
|
||||
*
|
||||
* @param int $type
|
||||
*/
|
||||
protected function htmlTree($type = self::TYPE_PAGES) {
|
||||
$data = $this->tree($type);
|
||||
|
||||
// wrap a list with the root level around the other namespaces
|
||||
array_unshift(
|
||||
$data, array(
|
||||
'level' => 0, 'id' => '*', 'type' => 'd',
|
||||
'open' => 'true', 'label' => $this->getLang('root')
|
||||
)
|
||||
);
|
||||
echo html_buildlist(
|
||||
$data, 'tree_list idx',
|
||||
array($this, 'html_list'),
|
||||
array($this, 'html_li')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a tree info structure from media or page directories
|
||||
*
|
||||
* @param int $type
|
||||
* @param string $open The hierarchy to open FIXME not supported yet
|
||||
* @param string $base The namespace to start from
|
||||
* @return array
|
||||
*/
|
||||
public function tree($type = self::TYPE_PAGES, $open = '', $base = '') {
|
||||
global $conf;
|
||||
|
||||
$opendir = utf8_encodeFN(str_replace(':', '/', $open));
|
||||
$basedir = utf8_encodeFN(str_replace(':', '/', $base));
|
||||
|
||||
$opts = array(
|
||||
'pagesonly' => ($type == self::TYPE_PAGES),
|
||||
'listdirs' => true,
|
||||
'listfiles' => true,
|
||||
'sneakyacl' => $conf['sneaky_index'],
|
||||
'showmsg' => false,
|
||||
'depth' => 1,
|
||||
'showhidden' => true
|
||||
);
|
||||
|
||||
$data = array();
|
||||
if($type == self::TYPE_PAGES) {
|
||||
search($data, $conf['datadir'], 'search_universal', $opts, $basedir);
|
||||
} elseif($type == self::TYPE_MEDIA) {
|
||||
search($data, $conf['mediadir'], 'search_universal', $opts, $basedir);
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Item formatter for the tree view
|
||||
*
|
||||
* User function for html_buildlist()
|
||||
*
|
||||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
*/
|
||||
function html_list($item) {
|
||||
$ret = '';
|
||||
// what to display
|
||||
if(!empty($item['label'])) {
|
||||
$base = $item['label'];
|
||||
} else {
|
||||
$base = ':' . $item['id'];
|
||||
$base = substr($base, strrpos($base, ':') + 1);
|
||||
}
|
||||
|
||||
if($item['id'] == '*') $item['id'] = '';
|
||||
|
||||
if ($item['id']) {
|
||||
$ret .= '<input type="checkbox" /> ';
|
||||
}
|
||||
|
||||
// namespace or page?
|
||||
if($item['type'] == 'd') {
|
||||
$ret .= '<a href="' . $item['id'] . '" class="idx_dir">';
|
||||
$ret .= $base;
|
||||
$ret .= '</a>';
|
||||
} else {
|
||||
$ret .= '<a class="wikilink1">';
|
||||
$ret .= noNS($item['id']);
|
||||
$ret .= '</a>';
|
||||
}
|
||||
|
||||
if($item['id']) $ret .= '<img class="rename" src="'. DOKU_BASE .'lib/plugins/move/images/rename.png" />';
|
||||
else $ret .= '<img class="add" src="' . DOKU_BASE . 'lib/plugins/move/images/folder_add.png" />';
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* print the opening LI for a list item
|
||||
*
|
||||
* @param array $item
|
||||
* @return string
|
||||
*/
|
||||
function html_li($item) {
|
||||
if($item['id'] == '*') $item['id'] = '';
|
||||
|
||||
$params = array();
|
||||
$params['class'] = ' type-' . $item['type'];
|
||||
if($item['type'] == 'd') $params['class'] .= ' ' . ($item['open'] ? 'open' : 'closed');
|
||||
$params['data-name'] = noNS($item['id']);
|
||||
$params['data-id'] = $item['id'];
|
||||
$attr = buildAttributes($params);
|
||||
|
||||
return "<li $attr>";
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user