/////////////////////////////////////////////////
// PukiWiki - Yet another WikiWikiWeb clone.
//
-// $Id: tracker.inc.php,v 1.10 2003/09/24 00:16:33 arino Exp $
+// $Id: tracker.inc.php,v 1.20 2003/12/03 12:36:02 arino Exp $
//
+// tracker_list¤Çɽ¼¨¤·¤Ê¤¤¥Ú¡¼¥¸Ì¾(Àµµ¬É½¸½¤Ç)
+// 'SubMenu'¥Ú¡¼¥¸ ¤ª¤è¤Ó '/'¤ò´Þ¤à¥Ú¡¼¥¸¤ò½ü³°¤¹¤ë
+define('TRACKER_LIST_EXCLUDE_PATTERN','#^SubMenu$|/#');
+// À©¸Â¤·¤Ê¤¤¾ì¹ç¤Ï¤³¤Á¤é
+//define('TRACKER_LIST_EXCLUDE_PATTERN','#(?!)#');
+
+// ¹àÌܤμè¤ê½Ð¤·¤Ë¼ºÇÔ¤·¤¿¥Ú¡¼¥¸¤ò°ìÍ÷¤Ëɽ¼¨¤¹¤ë
+define('TRACKER_LIST_SHOW_ERROR_PAGE',TRUE);
+
function plugin_tracker_convert()
{
global $script,$vars;
- $page = $vars['page'];
+ $base = $refer = $vars['page'];
$config_name = 'default';
+ $form = 'form';
$options = array();
if (func_num_args())
{
case 3:
$options = array_splice($args,2);
case 2:
- $_page = get_fullname($args[1],$page);
- if (is_pagename($_page))
- {
- $page = $_page;
- }
+ $args[1] = get_fullname($args[1],$base);
+ $base = is_pagename($args[1]) ? $args[1] : $base;
case 1:
- $config_name = $args[0];
+ $config_name = ($args[0] != '') ? $args[0] : $config_name;
+ list($config_name,$form) = array_pad(explode('/',$config_name,2),2,$form);
}
}
$config->config_name = $config_name;
- $fields = plugin_tracker_get_fields($page,$config);
+ $fields = plugin_tracker_get_fields($base,$refer,$config);
- $retval = convert_html(plugin_tracker_get_source($config->page.'/form'));
+ $form = $config->page.'/'.$form;
+ if (!is_page($form))
+ {
+ return "<p>config file '".make_pagelink($form)."' not found.</p>";
+ }
+ $retval = convert_html(plugin_tracker_get_source($form));
$hiddens = '';
foreach (array_keys($fields) as $name)
}
return <<<EOD
<form enctype="multipart/form-data" action="$script" method="post">
+<div>
$retval
$hiddens
+</div>
</form>
EOD;
}
$config->config_name = $config_name;
$source = $config->page.'/page';
- $refer = array_key_exists('_refer',$post) ? $post['_refer'] : '';
+ $refer = array_key_exists('_refer',$post) ? $post['_refer'] : $post['_base'];
if (!is_pagename($refer))
{
);
}
// ¥Ú¡¼¥¸Ì¾¤ò·èÄê
- $base = $post['_refer'];
+ $base = $post['_base'];
$num = 0;
$name = (array_key_exists('_name',$post)) ? $post['_name'] : '';
if (array_key_exists('_page',$post))
$_post['_real'] = $real;
// $_post['_refer'] = $_post['refer'];
- $fields = plugin_tracker_get_fields($page,$config);
+ $fields = plugin_tracker_get_fields($page,$refer,$config);
foreach (array_keys($fields) as $key)
{
- if (!array_key_exists($key,$_post))
- {
- continue;
- }
- $value = $fields[$key]->format_value($_post[$key]);
+ $value = array_key_exists($key,$_post) ?
+ $fields[$key]->format_value($_post[$key]) : '';
+
foreach (array_keys($postdata) as $num)
{
if (trim($postdata[$num]) == '')
header("Location: $script?$r_page");
exit;
}
+/*
function plugin_tracker_inline()
{
global $vars;
$config->config_name = $config_name;
- $fields = plugin_tracker_get_fields($vars['page'],$config);
+ $fields = plugin_tracker_get_fields($vars['page'],$vars['page'],$config);
$fields[$field]->default_value = $body;
return $fields[$field]->get_tag();
-}
+}
+*/
// ¥Õ¥£¡¼¥ë¥É¥ª¥Ö¥¸¥§¥¯¥È¤ò¹½ÃÛ¤¹¤ë
-function plugin_tracker_get_fields($page,&$config)
+function plugin_tracker_get_fields($base,$refer,&$config)
{
global $now,$_tracker_messages;
'_name'=>'text', // »ØÄꤵ¤ì¤¿¥Ú¡¼¥¸Ì¾
'_real'=>'real', // ¼ÂºÝ¤Î¥Ú¡¼¥¸Ì¾
'_refer'=>'page', // »²¾È¸µ(¥Õ¥©¡¼¥à¤Î¤¢¤ë¥Ú¡¼¥¸)
+ '_base'=>'page', // ´ð½à¥Ú¡¼¥¸
'_submit'=>'submit' // Äɲåܥ¿¥ó
) as $field=>$class)
{
$class = 'Tracker_field_'.$class;
- $fields[$field] = &new $class(array($field,$_tracker_messages["btn$field"],'','20',''),$page,$config);
+ $fields[$field] = &new $class(array($field,$_tracker_messages["btn$field"],'','20',''),$base,$refer,$config);
}
foreach ($config->get('fields') as $field)
$field[2] = 'text';
$field[3] = '20';
}
- $fields[$field[0]] = &new $class($field,$page,$config);
+ $fields[$field[0]] = &new $class($field,$base,$refer,$config);
}
return $fields;
}
var $values;
var $default_value;
var $page;
+ var $refer;
var $config;
var $data;
var $sort_type = SORT_REGULAR;
- function Tracker_field($field,$page,&$config)
+ function Tracker_field($field,$page,$refer,&$config)
{
global $post;
$this->values = explode(',',$field[3]);
$this->default_value = $field[4];
$this->page = $page;
+ $this->refer = $refer;
$this->config = &$config;
$this->data = array_key_exists($this->name,$post) ? $post[$this->name] : '';
}
var $styles = array();
var $formats = array();
- function Tracker_field_format($field,$page,&$config)
+ function Tracker_field_format($field,$page,$refer,&$config)
{
- parent::Tracker_field($field,$page,$config);
+ parent::Tracker_field($field,$page,$refer,$config);
foreach ($this->config->get($this->name) as $option)
{
{
$s_title = htmlspecialchars($this->title);
$s_page = htmlspecialchars($this->page);
+ $s_refer = htmlspecialchars($this->refer);
$s_config = htmlspecialchars($this->config->config_name);
return <<<EOD
<input type="submit" value="$s_title" />
<input type="hidden" name="plugin" value="tracker" />
-<input type="hidden" name="_refer" value="$s_page" />
+<input type="hidden" name="_refer" value="$s_refer" />
+<input type="hidden" name="_base" value="$s_page" />
<input type="hidden" name="_config" value="$s_config" />
EOD;
}
global $vars;
$config = 'default';
- $page = $vars['page'];
+ $page = $refer = $vars['page'];
$field = '_page';
$order = '';
+ $list = 'list';
$limit = NULL;
if (func_num_args())
{
case 3:
$order = $args[2];
case 2:
+ $args[1] = get_fullname($args[1],$page);
$page = is_pagename($args[1]) ? $args[1] : $page;
case 1:
$config = ($args[0] != '') ? $args[0] : $config;
+ list($config,$list) = array_pad(explode('/',$config,2),2,$list);
}
}
- return plugin_tracker_getlist($page,$config,$field,$order,$limit);
+ return plugin_tracker_getlist($page,$refer,$config,$list,$order,$limit);
}
function plugin_tracker_list_action()
{
global $script,$vars,$_tracker_messages;
- $page = $vars['refer'];
+ $page = $refer = $vars['refer'];
$s_page = make_pagelink($page);
$config = $vars['config'];
+ $list = array_key_exists('list',$vars) ? $vars['list'] : 'list';
$order = array_key_exists('order',$vars) ? $vars['order'] : '_real:SORT_DESC';
return array(
'msg' => $_tracker_messages['msg_list'],
'body'=> str_replace('$1',$s_page,$_tracker_messages['msg_back']).
- plugin_tracker_getlist($page,$config,$field,$order)
+ plugin_tracker_getlist($page,$refer,$config,$list,$order)
);
}
-function plugin_tracker_getlist($page,$config_name,$field=NULL,$order='',$limit=NULL)
+function plugin_tracker_getlist($page,$refer,$config_name,$list,$order='',$limit=NULL)
{
$config = new Config('plugin/tracker/'.$config_name);
{
return "<p>config file '".htmlspecialchars($config_name)."' is not exist.";
}
+
$config->config_name = $config_name;
- $list = &new Tracker_list($page,$config);
+
+ if (!is_page($config->page.'/'.$list))
+ {
+ return "<p>config file '".make_pagelink($config->page.'/'.$list)."' not found.</p>";
+ }
+
+ $list = &new Tracker_list($page,$refer,$config,$list);
$list->sort($order);
return $list->toString($limit);
}
{
var $page;
var $config;
+ var $list;
var $fields;
var $pattern;
var $pattern_fields;
var $rows;
var $order;
- function Tracker_list($page,&$config)
+ function Tracker_list($page,$refer,&$config,$list)
{
$this->page = $page;
$this->config = &$config;
- $this->fields = plugin_tracker_get_fields($page,$config);
+ $this->list = $list;
+ $this->fields = plugin_tracker_get_fields($page,$refer,$config);
$pattern = join('',plugin_tracker_get_source($config->page.'/page'));
// ¥Ö¥í¥Ã¥¯¥×¥é¥°¥¤¥ó¤ò¥Õ¥£¡¼¥ë¥É¤ËÃÖ´¹
foreach (get_existpages() as $_page)
{
if (strpos($_page,$pattern) === 0)
- //and is_numeric($num = substr($_page,$pattern_len)))
{
$name = substr($_page,$pattern_len);
+ if (preg_match(TRACKER_LIST_EXCLUDE_PATTERN,$name))
+ {
+ continue;
+ }
$this->add($_page,$name);
}
}
}
function add($page,$name)
{
- global $WikiName,$BracketName;
+ static $moved = array();
// ̵¸Â¥ë¡¼¥×ËÉ»ß
if (array_key_exists($name,$this->rows))
}
$source = plugin_tracker_get_source($page);
- if (preg_match("/move\s*to\s*($WikiName|\[\[$BracketName\]\])/",$source[0],$matches))
+ if (preg_match('/move\sto\s(.+)/',$source[0],$matches))
{
- return $this->add(strip_bracket($matches[1]),$name);
+ $page = strip_bracket(trim($matches[1]));
+ if (array_key_exists($page,$moved) or !is_page($page))
+ {
+ return;
+ }
+ $moved[$page] = TRUE;
+ return $this->add($page,$name);
}
$source = join('',preg_replace('/^(\*{1,3}.*)\[#[A-Za-z][\w-]+\](.*)$/','$1$2',$source));
'_update'=> get_filetime($page),
'_past' => get_filetime($page)
);
- if (preg_match("/{$this->pattern}/s",$source,$matches))
+ if ($this->rows[$name]['_match'] = preg_match("/{$this->pattern}/s",$source,$matches))
{
array_shift($matches);
foreach ($this->pattern_fields as $key=>$field)
$this->order = array();
foreach (explode(';',$order) as $item)
{
- list($key,$dir) = explode(':',$item);
+ list($key,$dir) = array_pad(explode(':',$item),1,'ASC');
if (!array_key_exists($key,$names))
{
continue;
$this->order[$key] = $dir;
}
$keys = array();
- $eval_arg = 'return array_multisort(';
+ $params = array();
foreach ($this->order as $field=>$order)
{
- if (!array_key_exists($field,$names)) { continue; }
- $eval_arg .= '$keys['."'$field'],".
- $this->fields[$field]->sort_type.','.
- $order.',';
+ if (!array_key_exists($field,$names))
+ {
+ continue;
+ }
foreach ($this->rows as $row)
{
$keys[$field][] = $this->fields[$field]->get_value($row[$field]);
}
+ $params[] = $keys[$field];
+ $params[] = $this->fields[$field]->sort_type;
+ $params[] = $order;
+
}
- $eval_arg .= '$this->rows);';
- eval($eval_arg);
+ $params[] = &$this->rows;
+
+ call_user_func_array('array_multisort',$params);
}
function replace_item($arr)
{
if (array_key_exists($sort,$order))
{
+ $index = array_flip(array_keys($order));
+ $pos = 1 + $index[$sort];
$b_end = ($sort == array_shift(array_keys($order)));
$b_order = ($order[$sort] == SORT_ASC);
$dir = ($b_end xor $b_order) ? SORT_ASC : SORT_DESC;
- $arrow = $b_end ? ($b_order ? '↑' : '↓') : '';
+ $arrow = '&br;'.($b_order ? '↑' : '↓')."($pos)";
unset($order[$sort]);
}
$title = $this->fields[$field]->title;
$r_page = rawurlencode($this->page);
$r_config = rawurlencode($this->config->config_name);
+ $r_list = rawurlencode($this->list);
$_order = array("$sort:$dir");
foreach ($order as $key=>$value)
{
}
$r_order = rawurlencode(join(';',$_order));
- return "[[$title$arrow>$script?plugin=tracker_list&refer=$r_page&config=$r_config&order=$r_order]]";
+ return "[[$title$arrow>$script?plugin=tracker_list&refer=$r_page&config=$r_config&list=$r_list&order=$r_order]]";
}
function toString($limit=NULL)
{
{
return '';
}
- foreach (plugin_tracker_get_source($this->config->page.'/list') as $line)
+ foreach (plugin_tracker_get_source($this->config->page.'/'.$this->list) as $line)
{
if (preg_match('/^\|(.+)\|[hHfFcC]$/',$line))
{
}
foreach ($this->rows as $key=>$row)
{
+ if (!TRACKER_LIST_SHOW_ERROR_PAGE and !$row['_match'])
+ {
+ continue;
+ }
$this->items = $row;
foreach ($body as $line)
{