Fichiers specifiques X.org
[wikifarm.git] / install / cookbook / chat.php
diff --git a/install/cookbook/chat.php b/install/cookbook/chat.php
new file mode 100644 (file)
index 0000000..2eab8c4
--- /dev/null
@@ -0,0 +1,124 @@
+<?php
+
+$ROSPatterns['/\\(:chat(\\s+(.*))?:\\)/e'] = "CreateChat('$2')";
+$HandleActions['chat'] = 'HandleChat';
+
+Markup('chatBegin','inline','/\\(:chatBegin (\\w+):\\)/','');
+Markup('chatEnd','inline','/\\(:chatEnd (\\w+):\\)/','<br/>');
+Markup('chatNext','inline','/\\(:chatNext:\\)/','<br/>');
+Markup('chatTalk','inline','/\\(:chatTalk (\\w+) (\\w+):\\)/e',"ChatTalk('$1', '$2')");
+
+function CreateChat($size = 10) {
+  $idchat = substr(md5(rand()),0,4);
+  if (!$size) { $size = 10; }
+  return 
+    '(:chatBegin '.$idchat.':)'."\n".
+    '(:chatEnd '.$idchat.':)'."\n\n".
+    '(:if auth edit:)(:chatTalk '.$idchat.' '.$size.':)(:if:)';
+}
+
+function ChatTalk($idchat, $size = 10) {
+  return Keep(
+  '<form method="post" id="chat-'.$idchat.'">
+    <input type="text" name="postchat" size="50"/>
+    <input type="hidden" name="chatId" value="'.$idchat.'"/>
+    <input type="hidden" name="size" value="'.$size.'"/>
+    <input type="hidden" name="action" value="chat"/>
+  </form>
+  <script type="text/javascript">
+    document.getElementById("chat-'.$idchat.'").postchat.focus();
+  </script>');
+}
+
+function HandleChat() {
+  global $pagename, $CurrentTime, $Author;
+  Lock(2);
+  if (isset($_REQUEST['postchat']) && $_REQUEST['postchat'] &&
+    ($page = RetrieveAuthPage($pagename, 'edit', true))) {
+    $postchat = stripmagic($_REQUEST['postchat']);
+    $idchat = stripmagic($_REQUEST['chatId']);
+    $size = stripmagic($_REQUEST['size']);
+    
+    $origine = array('(:chatNext:)');
+    $destination = array('');
+    $chatsyntax = RetrieveAuthPage('Site.ChatSyntax', 'read', false);
+    if ($chatsyntax) {
+      $chatsyntax = explode("\n",$chatsyntax['text']);
+      foreach($chatsyntax as $s) if (preg_match('/^(.*) => (.*)$/', trim($s), $matches)) {
+        $origine[] = $matches[1];
+        $destination[] = $matches[2];
+      }
+    }
+
+    $newchat = $CurrentTime.' [[~'.$Author.']] : '.str_replace($origine, $destination, $postchat);
+
+    $talkpos = strpos($page['text'], '(:chatTalk '.$idchat.' ');
+    $beginpos = strpos($page['text'], '(:chatBegin '.$idchat.':)');
+    $endpos = strpos($page['text'], '(:chatEnd '.$idchat.':)');
+    
+    $beginpos += strlen('(:chatBegin '.$idchat.':)');
+    $lignes = explode('(:chatNext:)',substr($page['text'], $beginpos, $endpos - $beginpos));
+    
+    if ($talkpos > $beginpos) {
+      $afac = count($lignes) - $size - 1;
+      $lignes[] = $newchat;
+      for ($i = 0; $i < $afac; $i++) {
+        unset($lignes[$i]);
+      }
+    } else {
+      $nouvelleslignes = array($newchat);
+      for ($i = 0; $i < count($lignes) && $i < $size - 1; $i++) {
+        $nouvelleslignes[] = $lignes[$i];
+      }
+      $lignes = $nouvelleslignes;
+    }
+    $chatcontent = implode('(:chatNext:)', $lignes);
+    $page['text'] = substr($page['text'],0,$beginpos).$chatcontent.substr($page['text'],$endpos);
+    WritePage($pagename,$page);
+    Lock(0);
+    Redirect($pagename);
+  }
+  Lock(0);
+  return "";
+}
+function afac() {
+  global $pagename, $Author, $CurrentTime;
+  if (isset($_REQUEST['postchat']) && $_REQUEST['postchat']) {
+    Lock(2);
+    $page = RetrieveAuthPage($pagename, 'edit', false);
+    if (!$page) {
+      Lock(0);
+      return "";
+    }
+    
+    
+    
+    
+    $poschat = strpos($page['text'],'(:beginchat:)');
+    $finchat = strpos($page['text'],'(:chat');
+    if ($poschat === false) {
+      $poschat = $finchat;
+      $page['text'] = substr($page['text'],0,$poschat).'(:beginchat:)'.substr($page['text'],$poschat);
+      $finchat += strlen('(:beginchat:)');
+    }
+    $poschat += strlen('(:beginchat:)');
+    
+    $avantchat = substr($page['text'],0,$poschat);    
+    $chatcontent = substr($page['text'], $poschat, $finchat - $poschat);
+    $aprechat = substr($page['text'],$finchat);
+    
+    $lignes = explode("\n\n",$chatcontent);
+    $page['text'] = $avantchat.implode("\n\n", $lignes)."\n\n".$CurrentTime.' [[~'.$Author.']] : '.$newchat.$aprechat;
+    WritePage($pagename,$page);
+    Lock(0);
+    Redirect($pagename);
+    return "";  
+  }
+  $page = RetrieveAuthPage($pagename, 'edit', false);
+  if (!$page) {
+    return '';
+  }
+  return '<form method="post"><input type="text" name="postchat" size="50"/></form><script type="text/javascript">document.getElementsByName("postchat")[0].focus();</script>';
+}
+
+?>