コード例 #1
0
ファイル: tracker.inc.php プロジェクト: nouphet/rata
 function XpWikiTracker_list(&$xpwiki, $base, $refer, &$config, $list)
 {
     $this->xpwiki =& $xpwiki;
     $this->root =& $xpwiki->root;
     $this->cont =& $xpwiki->cont;
     $this->func =& $xpwiki->func;
     $this->base = $base;
     $this->config =& $config;
     $this->list = $list;
     $fields = xpwiki_plugin_tracker::plugin_tracker_get_fields($base, $refer, $config);
     $pattern = array();
     $pattern_fields = array();
     // Generate regexes:
     // TODO: if (is FALSE) OR file_exists()
     $source = xpwiki_plugin_tracker::plugin_tracker_get_source($config->page . '/page', TRUE);
     // Block-plugins to pseudo fields (#convert => [_block_convert])
     $source = preg_replace('/^\\#([^\\(\\s]+)(?:\\((.*?)\\))?\\s*$/m', '[_block_$1]', $source);
     // Now, $source = array('*someting*', 'fieldname', '*someting*', 'fieldname', ...)
     $source = preg_split('/\\\\\\[(\\w+?)\\\\\\]/', preg_quote($source, '/'), -1, PREG_SPLIT_DELIM_CAPTURE);
     while (!empty($source)) {
         // Just ignore these _fixed_ data
         // NOTE: if a page has garbages between fields, it will fail to be load
         $pattern[] = preg_replace('/\\s+/', '\\s*', '(?>\\s*' . trim(array_shift($source)) . '\\s*)');
         if (!empty($source)) {
             $fieldname = array_shift($source);
             if (isset($fields[$fieldname])) {
                 $pattern[] = '(.*?)';
                 // Just capture it
                 $pattern_fields[] = $fieldname;
                 // Capture it as this $filedname
             } else {
                 $pattern[] = '.*?';
                 // Just ignore pseudo fields
             }
         }
     }
     $this->fields = $fields;
     $this->pattern = implode('', $pattern);
     $this->pattern_fields = $pattern_fields;
     // Listing
     $pattern = $base . '/';
     $pattern_len = strlen($pattern);
     foreach ($this->func->get_existpages(false, $pattern) as $_page) {
         $name = substr($_page, $pattern_len);
         if (preg_match($this->cont['PLUGIN_TRACKER_LIST_EXCLUDE_PATTERN'], $name)) {
             continue;
         }
         $this->add($_page, $name);
     }
 }