| 1 | <?php |
| 2 | // requires: Email, String |
| 3 | |
| 4 | |
| 5 | include_once("database.inc"); |
| 6 | include_once("string.inc"); |
| 7 | include_once("email.inc"); |
| 8 | class Diskuse extends CLASS_DATABASE { |
| 9 | |
| 10 | function Diskuse() { |
| 11 | $this->CLASS_DATABASE(); |
| 12 | |
| 13 | } |
| 14 | |
| 15 | function addPost($dennik,$id_clanku,$nazov,$id_diskuse, $jmeno = "",$email = "",$telo = "",$thread_prev = "",$posli_email = "",$znamka = 0,$nodouble = "") { |
| 16 | |
| 17 | if ($id_diskuse && ($titulek || $telo)) { |
| 18 | if ($nodouble) { |
| 19 | $q = "SELECT id_prispevku FROM prispevky WHERE duplicita = '$nodouble'"; |
| 20 | $set = $this->executeQuery($q); |
| 21 | if ($set->getNumRows()) return false; |
| 22 | } |
| 23 | $diskuseinfo = $this->getDiskuseInfo($id_diskuse); |
| 24 | if (strlen($telo) > 25 && strpos($telo," ",25)) { |
| 25 | $titulek = substr($telo,0,strpos($telo," ",25))."..."; |
| 26 | } else { |
| 27 | $titulek = $telo; |
| 28 | } |
| 29 | $jmeno = strip_tags($jmeno); |
| 30 | $email = strip_tags($email); |
| 31 | $telo = strip_tags($telo,'<a><b><i><u>'); |
| 32 | $telo = nl2br($telo); |
| 33 | if ($thread_prev) { |
| 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()) { |
| 37 | $r->next(); |
| 38 | $t = $r->getRecord(); |
| 39 | $thread = $t[thread]; |
| 40 | $len = strlen($thread); |
| 41 | } else { |
| 42 | $len = -1; |
| 43 | } |
| 44 | } else { |
| 45 | $len = -1; |
| 46 | } |
| 47 | if ($len > 0) { |
| 48 | $q = "SELECT MAX(SUBSTRING(thread FROM ".($len+2)." FOR 4)) AS max "; |
| 49 | } else { |
| 50 | $q = "SELECT MAX(SUBSTRING(thread FROM 1 FOR 4)) AS max "; |
| 51 | } |
| 52 | $q.= "FROM prispevky WHERE id_diskuse = '$id_diskuse'"; |
| 53 | if ($len > 0) { |
| 54 | $q.= " AND SUBSTRING(thread FROM 1 FOR ".$len.") = '$thread'"; |
| 55 | } |
| 56 | $r = $this->executeQuery($q); |
| 57 | $r->next(); |
| 58 | $s = $r->getRecord(); |
| 59 | $telo = wordwrap($telo,50," ",1); |
| 60 | $newthread = $thread.($thread?".":"").sprintf("%04s",$s[max]+1); |
| 61 | if ($posli_email) { |
| 62 | $posli_email = 'ano'; |
| 63 | } else { |
| 64 | $posli_email = 'ne'; |
| 65 | } |
| 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)); |
| 68 | |
| 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'"; |
| 74 | $this->query($q); |
| 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 |
| 79 | |
| 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>"; |
| 84 | while ($r->next()) { |
| 85 | $row = $r->getRecord(); |
| 86 | |
| 87 | if ($user_id != $row["user_id"]) { |
| 88 | global $kyberia; |
| 89 | |
| 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"); |
| 92 | } |
| 93 | } |
| 94 | } |
| 95 | } |
| 96 | } |
| 97 | |
| 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"; |
| 100 | |
| 101 | return $this->executeQuery($q); |
| 102 | } |
| 103 | |
| 104 | function getDiskuseInfo($id_diskuse) { |
| 105 | $set = $this->executeQuery("SELECT * FROM diskuse WHERE id_diskuse = '$id_diskuse'"); |
| 106 | $set->next(); |
| 107 | return $set->getRecord(); |
| 108 | } |
| 109 | |
| 110 | function updatePostsCount($id_diskuse) { |
| 111 | $r = $this->executeQuery("SELECT COUNT(*) AS pocet FROM prispevky WHERE id_diskuse = '$id_diskuse'"); |
| 112 | $r->next(); |
| 113 | if ($r->getInt("pocet") > 0) |
| 114 | { |
| 115 | $this->executeUpdate("UPDATE diskuse SET pocet_prispevku = '".$r->getInt("pocet")."' WHERE id_diskuse = '$id_diskuse'"); |
| 116 | } |
| 117 | } |
| 118 | |
| 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); |
| 125 | } |
| 126 | |
| 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)) { |
| 130 | $q.= " AND ( 1=0 "; |
| 131 | while (list($x,$a) = each($prispevky)) { |
| 132 | $q.= "OR id_prispevku = '$a' "; |
| 133 | } |
| 134 | $q.= " ) "; |
| 135 | } |
| 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); |
| 139 | } |
| 140 | |
| 141 | function createDiskuse($titulek="title",$kat = "") { |
| 142 | $q = "INSERT INTO diskuse (id_diskuse,kat,zalozeno,titulek) VALUES (0,'$kat',NOW(),'$titulek')"; |
| 143 | $this->query($q); |
| 144 | return ($this->getLastInsertId()); |
| 145 | } |
| 146 | |
| 147 | function getPostsCount($id_diskuse) { |
| 148 | $row = $this->getDiskuseInfo($id_diskuse); |
| 149 | return $row["pocet_prispevku"]; |
| 150 | } |
| 151 | |
| 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); |
| 155 | $r->next(); |
| 156 | return $r->getString("titulek"); |
| 157 | } |
| 158 | |
| 159 | } |
| 160 | ?> |