示例#1
0
 public function setPattern($arr, $page)
 {
     list(, $alias, , $name, $this->anchor) = $this->splice($arr);
     if (empty($name) && empty($this->anchor)) {
         return FALSE;
     }
     if (empty($name) || !Utility::isWikiName($name)) {
         if (empty($alias)) {
             $alias = $name . $this->anchor;
         }
         if (!empty($name)) {
             $name = self::getFullname($name, $page);
             if (!empty($name) && !Factory::Wiki($name)->isValied()) {
                 return FALSE;
             }
         }
     }
     return parent::setParam($page, $name, null, 'pagename', $alias);
 }
示例#2
0
 /**
  * ページの関連性データーベースを更新
  * @global string $WikiName
  * @global boolean $autolink
  * @global type $nowikiname
  * @global array $search_non_list
  * @param string $page
  * @return void
  */
 public function update($page = '')
 {
     $time = Factory::Wiki($page)->time();
     $rel_old = self::getRel($this->page);
     $rel_exist = $rel_old === array();
     $rel_auto = $rel_new = array();
     $pages = self::getObjects($page);
     if (!empty($pages)) {
         foreach ($pages as $_obj) {
             if (!isset($_obj->type) || $_obj->type !== 'pagename' || $_obj->name === $page || empty($_obj->name)) {
                 continue;
             }
             if ($_obj instanceof AutoLink) {
                 // Not cool though
                 $rel_auto[] = $_obj->name;
             } else {
                 if ($_obj instanceof AutoAlias) {
                     $_alias = AutoAlias::getAutoAliasDict($_obj->name);
                     if (Factory::Wiki($_alias)->isValied()) {
                         $rel_auto[] = $_alias;
                     }
                 } else {
                     $rel_new[] = $_obj->name;
                 }
             }
         }
     }
     // All pages "Referenced to" only by AutoLink
     $rel_auto = array_diff(array_unique($rel_auto), $rel_new);
     // All pages "Referenced to"
     $rel_new = array_merge(array_unique($rel_new), $rel_auto);
     // update Pages referred from the $page
     if ($time) {
         // Page exists
         self::setRel($this->page, $rel_new);
     }
     // .ref: Pages refer to the $page
     self::add($this->page, array_diff($rel_new, $rel_old), $rel_auto);
     self::remove($this->page, array_diff($rel_old, $rel_new));
     global $autolink, $nowikiname, $search_non_list;
     // $page seems newly created, and matches with AutoLink
     if ($time && !$rel_exist && $autolink && (Utility::isWikiName($page) ? $nowikiname : strlen($page) >= $autolink)) {
         // Update all, because they __MAY__ refer the $page [HEAVY]
         $search_non_list = 1;
         $pages = Search::do_search($page, 'AND', TRUE);
         foreach ($pages as $_page) {
             if ($_page !== $page) {
                 $this->update($_page);
             }
         }
     }
     // $pageが削除されたときに、
     foreach (self::getRef($this->page) as $line) {
         list($ref_page, $ref_auto) = explode("\t", rtrim($line));
         // $pageをAutoLinkでしか参照していないページを一斉更新する(おいおい)
         if ($ref_auto) {
             self::remove($ref_page, array($page));
         }
     }
 }