2 // requires: Email, String
5 include_once("database.inc");
6 include_once("string.inc");
7 include_once("email.inc");
8 class Diskuse extends CLASS_DATABASE {
11 $this->CLASS_DATABASE();
15 function addPost($dennik,$id_clanku,$nazov,$id_diskuse, $jmeno = "",$email = "",$telo = "",$thread_prev = "",$posli_email = "",$znamka = 0,$nodouble = "") {
17 if ($id_diskuse && ($titulek || $telo)) {
19 $q = "SELECT id_prispevku FROM prispevky WHERE duplicita = '$nodouble'";
20 $set = $this->executeQuery($q);
21 if ($set->getNumRows()) return false;
23 $diskuseinfo = $this->getDiskuseInfo($id_diskuse);
24 if (strlen($telo) > 25 && strpos($telo," ",25)) {
25 $titulek = substr($telo,0,strpos($telo," ",25))."...";
29 $jmeno = strip_tags($jmeno);
30 $email = strip_tags($email);
31 $telo = strip_tags($telo,'<a><b><i><u>');
34 $q = "SELECT thread FROM prispevky WHERE id_prispevku = '$thread_prev' AND id_diskuse = '$id_diskuse'";
35 $r = $this->executeQuery($q);
36 if ($r->getNumRows()) {
40 $len = strlen($thread);
48 $q = "SELECT MAX(SUBSTRING(thread FROM ".($len+2)." FOR 4)) AS max ";
50 $q = "SELECT MAX(SUBSTRING(thread FROM 1 FOR 4)) AS max ";
52 $q.= "FROM prispevky WHERE id_diskuse = '$id_diskuse'";
54 $q.= " AND SUBSTRING(thread FROM 1 FOR ".$len.") = '$thread'";
56 $r = $this->executeQuery($q);
59 $telo = wordwrap($telo,50," ",1);
60 $newthread = $thread.($thread?".":"").sprintf("%04s",$s[max]+1);
66 $telo = AddSlashes(EregI_Replace("((( )|(\n)|(^))+)(http://|ftp://|https://)([[:alnum:]][^,[:space:]]*)","\\2<a target='_blank' href=\"\\6\\7\">\\6\\7</a>",$telo));
67 $titulek = AddSlashes(EregI_Replace("((( )|(\n)|(^))+)(http://|ftp://|https://)([[:alnum:]][^,[:space:]]*)","\\2<a target='_blank' href=\"\\6\\7\">\\6\\7</a>",$titulek));
69 $q = "INSERT INTO prispevky (id_diskuse,vlozeno,jmeno,email,titulek,telo,thread,email_upozorneni,znamka,duplicita) ";
70 $q.= "VALUES ('$id_diskuse', NOW(), '$jmeno', '$email', '$titulek', '$telo', '$newthread', '$posli_email', '$znamka', '$nodouble')";
71 $this->executeUpdate($q);
72 $dskn=$this->getLastInsertId();
73 $q="UPDATE user_discussion set submission_count=submission_count+1 where user_id!='$user_id' and discussion_id= '$id_diskuse'";
75 if (!$dennik) $q ="UPDATE articles set prispevky=prispevky+1 where id_diskuse='$id_diskuse'";
76 else $q ="UPDATE dennik set prispevky=prispevky+1 where id_diskuse='$id_diskuse'";
77 $this->executeUpdate($q);
78 $this->updatePostsCount($id_diskuse); // prepocitat_pocet_prispevku
80 $r = $this->getEmailSubscriptions($id_diskuse);
81 if ($r->getNumRows()>0) {
82 $link="?action=".$_GET['action']."&node_id=".$_GET['node_id'];
83 $mailbody="Do diskusie pribudol novy prispevok.<br>Od: <i>$jmeno</i><br><b>$telo</b><br><br>Zareagovat mozes <a href='".SCRIPT.$link."'>tu</a>.<br>";
85 $row = $r->getRecord();
87 if ($user_id != $row["user_id"]) {
90 $kyberia->ubikMail($row['user_id'],$mailbody);
91 //mail($row["email"],'prispevok do fora na kyberia.sk',$mailbody,"From: forum@kyberia.sk\nReturn-path: forum@kyberia.sk");
98 function getEmailSubscriptions($id_diskuse) {
99 $q = "SELECT prispevky.jmeno,user.id as user_id FROM prispevky left join user on prispevky.jmeno=user.login WHERE id_diskuse = '$id_diskuse' AND email_upozorneni = 'ano' GROUP BY user.login";
101 return $this->executeQuery($q);
104 function getDiskuseInfo($id_diskuse) {
105 $set = $this->executeQuery("SELECT * FROM diskuse WHERE id_diskuse = '$id_diskuse'");
107 return $set->getRecord();
110 function updatePostsCount($id_diskuse) {
111 $r = $this->executeQuery("SELECT COUNT(*) AS pocet FROM prispevky WHERE id_diskuse = '$id_diskuse'");
113 if ($r->getInt("pocet") > 0)
115 $this->executeUpdate("UPDATE diskuse SET pocet_prispevku = '".$r->getInt("pocet")."' WHERE id_diskuse = '$id_diskuse'");
119 function getDiskuses($parameters = "") {
120 $q = "SELECT id_diskuse,kat,titulek,url,pocet_prispevku FROM diskuse";
121 if ($parameters[where]) $q.= " WHERE ".$parameters["where"];
122 if ($parameters[order]) $q.= " ORDER BY ".$parameters["order"];
123 if ($parameters[limit]) $q.= " LIMIT ".$parameters["limit"];
124 return $this->executeQuery($q);
127 function getPosts($id_diskuse,$prispevky = "") {
128 $q = "SELECT user.login as login, prispevky.*,DATE_FORMAT(prispevky.vlozeno,'%e.%c. %H:%i') AS f_vlozeno FROM prispevky LEFT join user ON prispevky.jmeno=user.login WHERE id_diskuse = '$id_diskuse' ";
129 if (is_array($prispevky)) {
131 while (list($x,$a) = each($prispevky)) {
132 $q.= "OR id_prispevku = '$a' ";
136 if ($prispevky) $q.=" AND id_prispevku='$prispevky' ";
137 $q.= "group by id_prispevku ORDER BY CONCAT(thread,vlozeno) DESC";
138 return $this->executeQuery($q);
141 function createDiskuse($titulek="title",$kat = "") {
142 $q = "INSERT INTO diskuse (id_diskuse,kat,zalozeno,titulek) VALUES (0,'$kat',NOW(),'$titulek')";
144 return ($this->getLastInsertId());
147 function getPostsCount($id_diskuse) {
148 $row = $this->getDiskuseInfo($id_diskuse);
149 return $row["pocet_prispevku"];
152 function getTitulek($id_diskuse,$thread_prev) {
153 $q = "SELECT titulek FROM prispevky WHERE id_diskuse = '$id_diskuse' AND id_prispevku = '$thread_prev'";
154 $r = $this->executeQuery($q);
156 return $r->getString("titulek");