system('wget '.$globals->baseurl.'/'.$pagename_slashes.' -O /dev/null');
}
+function wiki_delete_page($pagename)
+{
+ $pagename_dots = str_replace('/','.',$pagename);
+ if (!strpos($pagename_dots, '.')) {
+ return false;
+ }
+ $file = wiki_work_dir().'/'.wiki_filename($pagename_dots);
+ $cachefile = wiki_work_dir().'/cache_'.$pagename_dots.'.tpl';
+ if (is_file($cachefile)) {
+ unlink($cachefile);
+ }
+ if (!is_file($file)) {
+ return false;
+ }
+ unlink($file);
+ return true;
+}
+
+function wiki_links_in_line($line, $groupname)
+{
+ $links = array();
+ if (preg_match_all('@\[\[([^~][^\]\|\?#]*)((\?|#)[^\]\|]+)?(\\|[^\]]+)?\]\]@', $line, $matches, PREG_OFFSET_CAPTURE)) {
+ foreach ($matches[1] as $j => $link) if (!preg_match('@http://@', $link[0])) {
+ $mylink = str_replace('/','.',trim($link[0]));
+ $sup = trim(substr($matches[2][$j][0],1));
+ $alt = trim(substr($matches[4][$j][0],1));
+ $newlink = str_replace(' ','',ucwords($mylink));
+ if (strpos($newlink,'.') === false) {
+ $newlink = $groupname.'.'.$newlink;
+ }
+ if (!$alt && $mylink != $newlink) {
+ $alt = trim($link[0]);
+ }
+ $links[] = array(
+ 'pos' => $matches[0][$j][1],
+ 'size' => strlen($matches[0][$j][0]),
+ 'href' => $newlink,
+ 'sup' => $sup,
+ 'alt' => $alt,
+ 'group' => substr($mylink, 0, strpos($mylink, '.')));
+ }
+ }
+ return $links;
+}
+
+function wiki_rename_page($pagename, $newname, $changeLinks = true)
+{
+ $pagename_dots = str_replace('/','.',$pagename);
+ $newname_dots = str_replace('/','.',$newname);
+ if (!strpos($pagename_dots, '.') || !strpos($newname_dots, '.')) {
+ return false;
+ }
+ $groupname = substr($pagename_dots, 0, strpos($pagename_dots,'.'));
+ $newgroupname = substr($newname_dots, 0, strpos($pagename_dots,'.'));
+
+ $file = wiki_work_dir().'/'.wiki_filename($pagename_dots);
+ $newfile = wiki_work_dir().'/'.wiki_filename($newname_dots);
+ if (!is_file($file)) {
+ // old page doesn't exist
+ return false;
+ }
+ if (!rename($file, $newfile)) {
+ // impossible to renama page
+ return false;
+ }
+
+ if (!$changeLinks) {
+ return true;
+ }
+
+ $changedLinks = 0;
+ // change name inside this folder and ingroup links if changing group
+ $lines = explode("\n", file_get_contents($newfile));
+ $changed = false;
+ foreach ($lines as $i => $line) {
+ list($k, $v) = explode('=', $line, 2);
+ if ($k == 'name' && $v == $pagename_dots) {
+ $lines[$i] = 'name='.$newname_dots;
+ $changed = true;
+ } else if ($groupname != $newgroupname) {
+ $links = wiki_links_in_line($line, $groupname);
+ $newline = ''; $last = 0;
+ foreach ($links as $link) if ($link['group'] == $groupname) {
+ $newline .= substr($line, $last, $link['pos']);
+ $newline .= '[['.$link['href'].$link['sup'].($link['alt']?(' |'.$link['alt']):'').']]';
+ $last = $link['pos']+$link['size'];
+ $changedLinks++;
+ }
+ if ($last != 0) {
+ $newline .= substr($line, $last);
+ $lines[$i] = $newline;
+ $changed = true;
+ }
+ }
+ }
+ wiki_putfile($newfile, join("\n", $lines));
+
+ // change wiki links in all wiki pages
+ $endname = substr($pagename_dots, strpos($pagename_dots,'.')+1);
+ $pages = array();
+ exec("grep ".$endname." ".wiki_work_dir()."/* -sc", $pages);
+ foreach($pages as $line) {
+ if (preg_match('%/([^/:]+):([0-9]+)$%', $line, $vals) && $vals[2] > 0) {
+ $inpage = $vals[1];
+ $lines = explode("\n", file_get_contents(wiki_work_dir().'/'.$inpage));
+ $changed = false;
+ // find all wiki links in page and change if linked to this page
+ foreach ($lines as $i => $line) {
+ $links = wiki_links_in_line($line, substr($inpage, 0, strpos($inpage, '.')));
+ $newline = ''; $last = 0;
+ foreach ($links as $link) {
+ if ($link['href'] == $pagename_dots) {
+ $newline .= substr($line, $last, $link['pos']);
+ $newline .= '[['.$newname_dots.$link['sup'].($link['alt']?(' |'.$link['alt']):'').']]';
+ $last = $link['pos']+$link['size'];
+ $changedLinks++;
+ }
+ }
+ if ($last != 0) {
+ $newline .= substr($line, $last);
+ $lines[$i] = $newline;
+ $changed = true;
+ }
+ }
+ if ($changed)
+ {
+ wiki_putfile(wiki_work_dir().'/'.$inpage, join("\n", $lines));
+ }
+ }
+ }
+ if ($changedLinks > 0) {
+ return $changedLinks;
+ }
+ return true;
+}
+
+function wiki_rename_folder($pagename, $newname, $changeLinks = true)
+{
+}
+
// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
?>
$table_editor->apply($page, $action, $id);
}
- function handler_wiki(&$page, $action='list')
+ function handler_wiki(&$page, $action='list', $wikipage='', $wikipage2='')
{
require_once 'wiki.inc.php';
}
}
}
+
+ if ($action == 'delete' && $wikipage != '') {
+ if (wiki_delete_page($wikipage)) {
+ $page->trig("La page ".$wikipage." a été supprimée.");
+ } else {
+ $page->trig("Impossible de supprimer la page ".$wikipage.".");
+ }
+ }
+
+ if ($action == 'rename' && $wikipage != '' && $wikipage2 != '' && $wikipage != $wikipage2) {
+ if ($changedLinks = wiki_rename_page($wikipage, $wikipage2)) {
+ $s = 'La page <em>'.$wikipage.'</em> a été déplacée en <em>'.$wikipage2.'</em>.';
+ if (is_numeric($changedLinks)) {
+ $s .= $changedLinks.' lien'.(($changedLinks>1)?'s ont été modifiés.':' a été modifié.');
+ }
+ $page->trig($s);
+ } else {
+ $page->trig("Impossible de déplacer la page ".$wikipage);
+ }
+ }
$perms = wiki_perms_options();
return false;
}
var toggle = 0;
- function replie() {
+ function replie(me, cat) {
if (toggle == 1) return;
toggle = 2;
- var cat=$.trim($(this).parent().text().replace(/(.*)\([0-9]+\)/, "$1"));
$("tr[@id^=row/"+cat+"/]").hide();
- $(this).attr('src', 'images/k1.gif').unbind("click", replie).click(deplie);
- setTimeout("toggle = 0;", 10);
+ $(me).attr('src', 'images/k1.gif');
}
- function deplie(image) {
+ function deplie(me, cat) {
if (toggle == 2) return;
toggle = 1;
- var cat=$.trim($(this).parent().text().replace(/(.*)\([0-9]+\)/, "$1"));
$("tr[@id^=row/"+cat+"/]").show();
- $(this).attr('src', 'images/k2.gif').unbind("click", deplie).click(replie);
+ $(me).attr('src', 'images/k2.gif');
+ }
+ function toggle_folder() {
+ me = this;
+ if ($(this).attr("class") == "wiki_category")
+ me = $("../img.wiki_root", me)[0];
+ var cat=$.trim($(me).parent().text().replace(/(.*)\([0-9]+\)/, "$1"));
+ if ($(me).attr('src') == "images/k1.gif") {
+ deplie(me, cat);
+ }
+ replie(me, cat);
setTimeout("toggle = 0;", 10);
}
$(document).ready(function() {
- $("tr.pair img[@alt=-]").css("cursor","pointer").each(replie);
+ $("tr.pair img[@alt=-]").css("cursor","pointer").click(toggle_folder).each(toggle_folder);
+ $(".wiki_category").css("cursor","pointer").click(toggle_folder);
});
// -->
</script>
{foreach from=$wiki_pages key=cat item=pages}
<tr class="pair">
<td colspan="4" style="margin-top: 0; margin-bottom: 0; padding-top: 0; padding-bottom: 0; height: 20px">
- <img src="images/k2.gif" alt="-" width="9" height="21" />
- {$cat} ({$pages|@count}) <a href="{$cat}/RecentChanges">{icon name=magnifier title="Changements récents"}</a>
+ <img class="wiki_root" src="images/k2.gif" alt="-" width="9" height="21" />
+ <span class="wiki_category">{$cat}</span> ({$pages|@count}) <a href="{$cat}/RecentChanges">{icon name=magnifier title="Changements récents"}</a>
</td>
</tr>
{foreach from=$pages item=perm key=page name=pages}
{$perm.edit}
</td>
<td class="action" style="margin-top: 0; margin-bottom: 0; padding-top: 0; padding-bottom: 0; height: 20px">
+ <a href="admin/wiki/rename/{$cat}.{$page}" onclick="var newname=prompt('Déplacer la page {$cat}.{$page} vers :', '{$cat}.{$page}'); if (!newname) return false; this.href += '/'+newname;">{icon name=book_next title='déplacer'}</a>
+ <a href="admin/wiki/delete/{$cat}.{$page}" onclick="return confirm('Supprimer la page {$cat}.{$page} ?');">{icon name=delete title='supprimer'}</a>
<input type="checkbox" name="{$cat}/{$page}"/>
</td>
</tr>