1: <?php
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31: if (!defined('XOOPS_ROOT_PATH')) {
32: exit();
33: }
34: include_once XOOPS_ROOT_PATH."/class/xoopstree.php";
35:
36: class XoopsTopic
37: {
38: var $table;
39: var $topic_id;
40: var $topic_pid;
41: var $topic_title;
42: var $topic_imgurl;
43: var $prefix;
44: var $use_permission=false;
45: var $mid;
46:
47: function XoopsTopic($table, $topicid=0)
48: {
49: $this->db =& Database::getInstance();
50: $this->table = $table;
51: if ( is_array($topicid) ) {
52: $this->makeTopic($topicid);
53: } elseif ( $topicid != 0 ) {
54: $this->getTopic(intval($topicid));
55: } else {
56: $this->topic_id = $topicid;
57: }
58: }
59:
60: function setTopicTitle($value)
61: {
62: $this->topic_title = $value;
63: }
64:
65: function setTopicImgurl($value)
66: {
67: $this->topic_imgurl = $value;
68: }
69:
70: function setTopicPid($value)
71: {
72: $this->topic_pid = $value;
73: }
74:
75: function getTopic($topicid)
76: {
77: $sql = "SELECT * FROM ".$this->table." WHERE topic_id=".$topicid."";
78: $array = $this->db->fetchArray($this->db->query($sql));
79: $this->makeTopic($array);
80: }
81:
82: function makeTopic($array)
83: {
84: foreach($array as $key=>$value){
85: $this->$key = $value;
86: }
87: }
88:
89: function usePermission($mid)
90: {
91: $this->mid = $mid;
92: $this->use_permission = true;
93: }
94:
95: function store()
96: {
97: $myts =& MyTextSanitizer::getInstance();
98: $title = "";
99: $imgurl = "";
100: if ( isset($this->topic_title) && $this->topic_title != "" ) {
101: $title = $myts->makeTboxData4Save($this->topic_title);
102: }
103: if ( isset($this->topic_imgurl) && $this->topic_imgurl != "" ) {
104: $imgurl = $myts->makeTboxData4Save($this->topic_imgurl);
105: }
106: if ( !isset($this->topic_pid) || !is_numeric($this->topic_pid) ) {
107: $this->topic_pid = 0;
108: }
109: if ( empty($this->topic_id) ) {
110: $this->topic_id = $this->db->genId($this->table."_topic_id_seq");
111: $sql = sprintf("INSERT INTO %s (topic_id, topic_pid, topic_imgurl, topic_title) VALUES (%u, %u, '%s', '%s')", $this->table, $this->topic_id, $this->topic_pid, $imgurl, $title);
112: } else {
113: $sql = sprintf("UPDATE %s SET topic_pid = %u, topic_imgurl = '%s', topic_title = '%s' WHERE topic_id = %u", $this->table, $this->topic_pid, $imgurl, $title, $this->topic_id);
114: }
115: if ( !$result = $this->db->query($sql) ) {
116: ErrorHandler::show('0022');
117: }
118: if ( $this->use_permission == true ) {
119: if ( empty($this->topic_id) ) {
120: $this->topic_id = $this->db->getInsertId();
121: }
122: $xt = new XoopsTree($this->table, "topic_id", "topic_pid");
123: $parent_topics = $xt->getAllParentId($this->topic_id);
124: if ( !empty($this->m_groups) && is_array($this->m_groups) ){
125: foreach ( $this->m_groups as $m_g ) {
126: $moderate_topics = XoopsPerms::getPermitted($this->mid, "ModInTopic", $m_g);
127: $add = true;
128:
129: foreach($parent_topics as $p_topic){
130: if ( !in_array($p_topic, $moderate_topics) ) {
131: $add = false;
132: continue;
133: }
134: }
135: if ( $add == true ) {
136: $xp = new XoopsPerms();
137: $xp->setModuleId($this->mid);
138: $xp->setName("ModInTopic");
139: $xp->setItemId($this->topic_id);
140: $xp->store();
141: $xp->addGroup($m_g);
142: }
143: }
144: }
145: if ( !empty($this->s_groups) && is_array($this->s_groups) ){
146: foreach ( $s_groups as $s_g ) {
147: $submit_topics = XoopsPerms::getPermitted($this->mid, "SubmitInTopic", $s_g);
148: $add = true;
149: foreach($parent_topics as $p_topic){
150: if ( !in_array($p_topic, $submit_topics) ) {
151: $add = false;
152: continue;
153: }
154: }
155: if ( $add == true ) {
156: $xp = new XoopsPerms();
157: $xp->setModuleId($this->mid);
158: $xp->setName("SubmitInTopic");
159: $xp->setItemId($this->topic_id);
160: $xp->store();
161: $xp->addGroup($s_g);
162: }
163: }
164: }
165: if ( !empty($this->r_groups) && is_array($this->r_groups) ){
166: foreach ( $r_groups as $r_g ) {
167: $read_topics = XoopsPerms::getPermitted($this->mid, "ReadInTopic", $r_g);
168: $add = true;
169: foreach($parent_topics as $p_topic){
170: if ( !in_array($p_topic, $read_topics) ) {
171: $add = false;
172: continue;
173: }
174: }
175: if ( $add == true ) {
176: $xp = new XoopsPerms();
177: $xp->setModuleId($this->mid);
178: $xp->setName("ReadInTopic");
179: $xp->setItemId($this->topic_id);
180: $xp->store();
181: $xp->addGroup($r_g);
182: }
183: }
184: }
185: }
186: return true;
187: }
188:
189: function delete()
190: {
191: $sql = sprintf("DELETE FROM %s WHERE topic_id = %u", $this->table, $this->topic_id);
192: $this->db->query($sql);
193: }
194:
195: function topic_id()
196: {
197: return $this->topic_id;
198: }
199:
200: function topic_pid()
201: {
202: return $this->topic_pid;
203: }
204:
205: function topic_title($format="S")
206: {
207: $myts =& MyTextSanitizer::getInstance();
208: switch($format){
209: case "S":
210: $title = $myts->makeTboxData4Show($this->topic_title);
211: break;
212: case "E":
213: $title = $myts->makeTboxData4Edit($this->topic_title);
214: break;
215: case "P":
216: $title = $myts->makeTboxData4Preview($this->topic_title);
217: break;
218: case "F":
219: $title = $myts->makeTboxData4PreviewInForm($this->topic_title);
220: break;
221: }
222: return $title;
223: }
224:
225: function topic_imgurl($format="S")
226: {
227: $myts =& MyTextSanitizer::getInstance();
228: switch($format){
229: case "S":
230: $imgurl= $myts->makeTboxData4Show($this->topic_imgurl);
231: break;
232: case "E":
233: $imgurl = $myts->makeTboxData4Edit($this->topic_imgurl);
234: break;
235: case "P":
236: $imgurl = $myts->makeTboxData4Preview($this->topic_imgurl);
237: break;
238: case "F":
239: $imgurl = $myts->makeTboxData4PreviewInForm($this->topic_imgurl);
240: break;
241: }
242: return $imgurl;
243: }
244:
245: function prefix()
246: {
247: if ( isset($this->prefix) ) {
248: return $this->prefix;
249: }
250: }
251:
252: function getFirstChildTopics()
253: {
254: $ret = array();
255: $xt = new XoopsTree($this->table, "topic_id", "topic_pid");
256: $topic_arr = $xt->getFirstChild($this->topic_id, "topic_title");
257: if ( is_array($topic_arr) && count($topic_arr) ) {
258: foreach($topic_arr as $topic){
259: $ret[] = new XoopsTopic($this->table, $topic);
260: }
261: }
262: return $ret;
263: }
264:
265: function getAllChildTopics()
266: {
267: $ret = array();
268: $xt = new XoopsTree($this->table, "topic_id", "topic_pid");
269: $topic_arr = $xt->getAllChild($this->topic_id, "topic_title");
270: if ( is_array($topic_arr) && count($topic_arr) ) {
271: foreach($topic_arr as $topic){
272: $ret[] = new XoopsTopic($this->table, $topic);
273: }
274: }
275: return $ret;
276: }
277:
278: function getChildTopicsTreeArray()
279: {
280: $ret = array();
281: $xt = new XoopsTree($this->table, "topic_id", "topic_pid");
282: $topic_arr = $xt->getChildTreeArray($this->topic_id, "topic_title");
283: if ( is_array($topic_arr) && count($topic_arr) ) {
284: foreach($topic_arr as $topic){
285: $ret[] = new XoopsTopic($this->table, $topic);
286: }
287: }
288: return $ret;
289: }
290:
291: function makeTopicSelBox($none=0, $seltopic=-1, $selname="", $onchange="")
292: {
293: $xt = new XoopsTree($this->table, "topic_id", "topic_pid");
294: if ( $seltopic != -1 ) {
295: $xt->makeMySelBox("topic_title", "topic_title", $seltopic, $none, $selname, $onchange);
296: } elseif ( !empty($this->topic_id) ) {
297: $xt->makeMySelBox("topic_title", "topic_title", $this->topic_id, $none, $selname, $onchange);
298: } else {
299: $xt->makeMySelBox("topic_title", "topic_title", 0, $none, $selname, $onchange);
300: }
301: }
302:
303:
304: function getNiceTopicPathFromId($funcURL)
305: {
306: $xt = new XoopsTree($this->table, "topic_id", "topic_pid");
307: $ret = $xt->getNicePathFromId($this->topic_id, "toppic_title", $funcURL);
308: return $ret;
309: }
310:
311: function getAllChildTopicsId()
312: {
313: $xt = new XoopsTree($this->table, "topic_id", "topic_pid");
314: $ret = $xt->getAllChildId($this->topic_id, "toppic_title");
315: return $ret;
316: }
317:
318: function &getTopicsList()
319: {
320: $result = $this->db->query('SELECT topic_id, topic_pid, topic_title FROM '.$this->table);
321: $ret = array();
322: $myts =& MyTextSanitizer::getInstance();
323: while ($myrow = $this->db->fetchArray($result)) {
324: $ret[$myrow['topic_id']] = array('title' => $myts->htmlSpecialChars($myrow['topic_title']), 'pid' => $myrow['topic_pid']);
325: }
326: return $ret;
327: }
328:
329: function topicExists($pid, $title) {
330: $sql = "SELECT COUNT(*) from ".$this->table." WHERE topic_pid = ".intval($pid)." AND topic_title = '".trim($title)."'";
331: $rs = $this->db->query($sql);
332: list($count) = $this->db->fetchRow($rs);
333: if ($count > 0) {
334: return true;
335: } else {
336: return false;
337: }
338: }
339: }
340: ?>