db = &$db; $this->tpl = &$tpl; $this->error = &$error; $this->tree = &new CDBTree($this->db,"tree","id"); } function trim(&$data){ foreach($data as $key=>$value){ $data[$key] = strip_tags(trim($value)); } } function valid($data,$upload = null,$user_id = false){ if(isset($data['register_login'])){ if( !preg_match("/^.{1,30}$/i",$data['register_login']) ) $this->error[] = "Îøèáêà ââîäà ïîëÿ Ëîãèí, îò 1 äî 30 ñèìâîëîâ."; elseif($this->isLogin($data['register_login'],$user_id))$this->error[] = "Îøèáêà ââîäà, òàêîé Ëîãèí óæå åñòü!"; } if(isset($data['register_psw'])){ if( !preg_match("/^.{1,30}$/i",$data['register_psw']) ) $this->error[] = "Îøèáêà ââîäà ïîëÿ Ïàðîëü, îò 1 äî 30 ñèìâîëîâ."; } if(isset($data['register_email'])){ if( !preg_match("/^([^@]+)+@([^@]+)\.([^@]+)$/i",$data['register_email']) || strlen($data['register_email'])>50 ) $this->error[] = "Îøèáêà ââîäà ïîëÿ E-mail, äî 50 ñèìâîëîâ."; } if(isset($data['register_name'])){ if( !preg_match("/^.{1,30}$/i",$data['register_name']) ) $this->error[] = "Îøèáêà ââîäà ïîëÿ Èìÿ, îò 1 äî 30 ñèìâîëîâ."; } if(isset($data['title'])){ if( !preg_match("/^.{1,250}$/i",$data['title']) ) $this->error[] = "Îøèáêà ââîäà ïîëÿ Íàçâàíèå òåìû, îò 1 äî 250 ñèìâîëîâ."; } if(isset($data['about'])){ if( !preg_match("/.+/is",$data['about']) ) $this->error[] = "Îøèáêà ââîäà ïîëÿ Îïèñàíèå."; } if(isset($upload['pic']['name']) && $upload['pic']['name']!=null){ $type = substr(strrchr($upload['pic']['name'],"."),1); if( !preg_match("/^(jpeg|jpg|gif|png)$/i",$type) ) $this->error[] = "Îøèáêà ââîäà ïîëÿ Èçîáðàæåíèÿ, òîëüêî jpg,png,gif."; } if(isset($data['login'])){ if( !preg_match("/.{1,50}/i",$data['login']) ) $this->error[] = "Îøèáêà ââîäà ïîëÿ Èìÿ."; elseif($this->isLogin($data['login'],$user_id))$this->error[] = "Îøèáêà ââîäà, òàêîé Ëîãèí óæå åñòü!"; } if(isset($data['about_comment'])){ if( !preg_match("/.+/is",$data['about_comment']) ) $this->error[] = "Îøèáêà ââîäà ïîëÿ Êîììåíòàðèè."; } if(isset($data['treeID'])){ if( !preg_match("/^([0-9]+)$/",$data['treeID']) && $data['treeID']>0 ) $this->error[] = "Îøèáêà íîìåðà âåòêè!!!."; } if(isset($data['topicID'])){ if( !preg_match("/^([0-9]+)$/",$data['topicID']) && $data['topicID']>0 ) $this->error[] = "Îøèáêà íîìåðà òåìû ôîðóìà!!!."; } return ( count($this->error) ) ? true : false; } function isLogin($login,$user_id){ $sql = "select count(*) from forum_user where login=?"; if($user_id>0)$sql .= "and id<>'$user_id'"; return $this->db->getOne($sql,array($login)); } function isUser($login,$psw){ $sql = "select id from forum_user where login=? and psw=?"; $user_id = $this->db->getOne($sql,array($login,$psw)); return $user_id; } function viewUser($id){ $sql = "select * from forum_user where id=?"; $row = $this->db->getRow($sql,array($id),DB_FETCHMODE_ASSOC); $this->tpl->assign("user",$row); } function saveUser($data,$upload,$user_id = false){ $table_name = "forum_user"; $DB_AUTOQUERY = ($user_id>0) ? DB_AUTOQUERY_UPDATE : DB_AUTOQUERY_INSERT; $where = ($user_id>0) ? "id='$user_id'" : ''; $fields_values = array('login' => $data['register_login'],'psw' => $data['register_psw'],'email' => $data['register_email'],'name' => $data['register_name'],'about' => $data['register_about']); if($upload['pic']['tmp_name']){ if($user_id>0){$this->deleteUserPic($user_id);} $fields_values['pic'] = upload_ImageResize($upload['pic'],array('width'=>"90",'height'=>"90",'upload_path'=>"./uploaded/pic/forum/user/")); } $this->db->autoExecute($table_name,$fields_values,$DB_AUTOQUERY,$where); } function deleteUserPic($id){ $sql = "select pic from forum_user where id=?"; $pic = $this->db->getOne($sql,array($id)); @unlink("./uploaded/pic/forum/user/$pic"); } function delete($id){ $sql = "select tree_id,pic from topic where id=?"; $topic_row = $this->db->getRow($sql,array($id),DB_FETCHMODE_ASSOC); if($topic_row['pic']){@unlink("./pic/forum/{$topic_row['pic']}");} $this->tree->deleteAll($topic_row['tree_id']); $sql = "delete from topic where id=?"; $this->db->query($sql,array($id)); } function deleteParentElemant($parent_table,$parent_id){ $sql = "select id,tree_id,pic from topic where parent_table=? and parent_table_id=?"; $topic_row = $this->db->getRow($sql,array($parent_table,$parent_id),DB_FETCHMODE_ASSOC); if($topic_row['pic']){@unlink("./pic/forum/{$topic_row['pic']}");} $this->tree->deleteAll($topic_row['tree_id']); $sql = "delete from topic where id=?"; $this->db->query($sql,array($topic_row['id'])); } function deleteComment($id){ $sql1 = "select topic_id,pic from tree where id=? limit 1"; $row = $this->db->getRow($sql1,array($id),DB_FETCHMODE_ASSOC); $topic_id = $row['topic_id']; if($row['pic']){@unlink("./uploaded/pic/forum/{$row['pic']}");} $this->tree->delete($id); $sql = "select id,mktime from tree where topic_id=? And _level>1 order by mktime desc limit 1"; $last = $this->db->getRow($sql,array($topic_id),DB_FETCHMODE_ASSOC); $sql2 = "update topic set comments=comments-1,comment_last_mktime=?,comment_last=? where id=?"; $this->db->query($sql2,array($last['mktime'],$last['id'],$topic_id)); } function updateTopic($data,$upload = null){ $table_name = "topic"; $fields_values = array("title"=>$data['data']['title'],"about"=>$data['data']['about'],"meta_title"=>$data['data']['meta_title'],"meta_description"=>$data['data']['meta_description'],"meta_keywords"=>$data['data']['meta_keywords'],"meta_about"=>$data['data']['meta_about']); $this->db->autoExecute($table_name, $fields_values, DB_AUTOQUERY_UPDATE,"id='".$data['update_id']."'"); } function SaveTopic($data,$upload = null,$user_id = 0){ $table_name = "topic"; $topic_next_id = $this->db->nextId('mySequenceTopic'); //Ñîçäàåì íà÷àëüíóþ âåòêó... $tree_parent_id = 1; $tree_next_id = $this->db->nextId('mySequenceTree'); $arrayData = array("id"=>$tree_next_id,"parent_id"=>$tree_parent_id,"topic_id"=>$topic_next_id,"user_id"=>$user_id,"mktime"=>mktime()); //print_r($arrayData); $this->tree->insert($tree_parent_id,$arrayData); //Êîíåö... //Ñîçäàåì òåìó ôîðóìà... switch($data['parent_table']){ case "rooms" : $fields_values = array("id"=>$topic_next_id,"tree_id"=>$tree_next_id,"user_id"=>$user_id, "parent_table"=>$data['parent_table'],"parent_table_id"=>$data['parent_table_id'], "title"=>$data['data']['company'],"about"=>$data['data']['about'], "mktime"=>mktime()); if($upload['pic']['tmp_name']){$fields_values['pic'] = upload_ImageResize($upload['pic'],array('width'=>"120",'height'=>"120",'upload_path'=>"./uploaded/pic/forum/topic/"));} break; case "product" : $fields_values = array("id"=>$topic_next_id,"tree_id"=>$tree_next_id,"user_id"=>$user_id, "parent_table"=>$data['parent_table'],"parent_table_id"=>$data['parent_table_id'], "title"=>$data['data']['name'],"about"=>$data['data']['about'], "mktime"=>mktime()); if($upload['pic']['tmp_name']){$fields_values['pic'] = upload_ImageResize($upload['pic'],array('width'=>"120",'height'=>"120",'upload_path'=>"./uploaded/pic/forum/topic/"));} break; case "articles" : $fields_values = array("id"=>$topic_next_id,"tree_id"=>$tree_next_id,"user_id"=>$user_id, "parent_table"=>$data['parent_table'],"parent_table_id"=>$data['parent_table_id'], "title"=>$data['data']['title'],"about"=>$data['data']['text'], "mktime"=>mktime()); if($upload['pic']['tmp_name']){$fields_values['pic'] = upload_ImageResize($upload['pic'],array('width'=>"200",'height'=>"200",'upload_path'=>"./uploaded/pic/forum/topic/"));} break; case "news" : $fields_values = array("id"=>$topic_next_id,"tree_id"=>$tree_next_id,"user_id"=>$user_id, "parent_table"=>$data['parent_table'],"parent_table_id"=>$data['parent_table_id'], "title"=>$data['data']['title'],"about"=>$data['data']['text'], "mktime"=>mktime()); if($upload['pic']['tmp_name']){$fields_values['pic'] = upload_ImageResize($upload['pic'],array('width'=>"200",'height'=>"200",'upload_path'=>"./uploaded/pic/forum/topic/"));} break; case "questioning" : $fields_values = array("id"=>$topic_next_id,"tree_id"=>$tree_next_id,"user_id"=>$user_id, "parent_table"=>$data['parent_table'],"parent_table_id"=>$data['parent_table_id'], "title"=>$data['data']['name'], "mktime"=>mktime()); break; default : //TOPIC $fields_values = array("id"=>$topic_next_id,"tree_id"=>$tree_next_id,"user_id"=>$user_id, "parent_table"=>$data['parent_table'],"parent_table_id"=>$data['parent_table_id'], "title"=>$data['data']['title'],"about"=>$data['data']['about'], "mktime"=>mktime(),"comment_last_mktime"=>mktime()); // if($upload = null && $upload['pic']['tmp_name']){$fields_values['pic'] = upload_ImageResize($upload['pic'],array('width'=>"120",'height'=>"120",'upload_path'=>"./pic/forum/"));} break; } //print_r($fields_values);exit; $this->db->autoExecute($table_name, $fields_values, DB_AUTOQUERY_INSERT); } function reload(){ print' '; } function displaySaveComment(){ $this->tpl->display("save_comment.tpl"); } function displayUpdateComment(){ $this->tpl->display("update_comment.tpl"); } function beginOneTreeID($id){ $sql = "select a.id from tree a, tree b where b.id=? and (a._leftb._right) and a._level=1 limit 1"; return $this->db->getOne($sql,$id); } function saveComment($data,$user_id = 0,$upload){ $tree_next_id = $this->db->nextId('mySequenceTree'); $arrayData = array("id"=>$tree_next_id,"user_id"=>$user_id,"parent_id"=>$data['treeID'],"topic_id"=>$data['topicID'],"about"=>$data['about_comment'],"login"=>$data['login'],"mktime"=>mktime()); if(isset($upload['pic']['tmp_name']) && $upload['pic']['tmp_name']){ $arrayData['pic'] = upload_ImageResize($upload['pic'],array('width'=>"300",'height'=>"300",'upload_path'=>"./uploaded/pic/forum/")); } $this->tree->insert($data['treeID'],$arrayData); $beginID = $this->beginOneTreeID($tree_next_id); $sql = "update topic set comments=comments+1,comment_last=?,comment_last_mktime=? where tree_id=?"; $this->db->query($sql, array($tree_next_id,mktime(),$beginID)); } function updateComment($data,$upload){ $table_name = "tree"; $fields_values = array("about"=>$data['about_comment']); if(isset($upload['pic']['tmp_name']) && $upload['pic']['tmp_name']){ $fields_values['pic'] = upload_ImageResize($upload['pic'],array('width'=>"300",'height'=>"300",'upload_path'=>"./uploaded/pic/forum/")); } $this->db->autoExecute($table_name,$fields_values,DB_AUTOQUERY_UPDATE,"id={$data['update_id']}"); } function viewComments($id){ $sql = "select a.*,forum_user.pic as pic1 from tree b, tree a LEFT JOIN forum_user ON forum_user.id=a.user_id where b.id=? and (a._left>b._left and a._right 'Sliding', 'delta' => 6, 'perPage' => 30, ); $res = Pager_Wrapper_DB($this->db, $sql, $pagerOptions, false, DB_FETCHMODE_ASSOC, array($id)); foreach($res['data'] as $key=>$row){ $sql = "select * from tree where parent_id=? order by mktime desc"; $res['data'][$key]['child'] = $this->db->getAll($sql,array($row['id']),DB_FETCHMODE_ASSOC); } //print_r($res); $this->tpl->assign('commentsData', $res); } function viewCommentOne($id){ $sql = "select * from tree where id=?"; $row = $this->db->getRow($sql,array($id),DB_FETCHMODE_ASSOC); $this->tpl->assign('comment',$row); } function viewTopicsCommentsLast(){ $sql = "select topic.*,tree.about as comment_str from topic left join tree on tree.id=topic.comment_last Where 1=1 order by topic.comment_last_mktime desc, topic.mktime desc limit 7"; $row = $this->db->getAll($sql,array(),DB_FETCHMODE_ASSOC); $this->tpl->assign('topics',$row); } function last_comment(){ $sql = "select tree.*,forum_user.login from tree LEFT JOIN forum_user ON forum_user.id=tree.user_id where tree._level>1 order by tree.mktime desc limit 3"; $row = $this -> db -> getAll($sql,array(),DB_FETCHMODE_ASSOC); $this -> tpl -> assign("last_comments",$row); } function viewTopics($param){ $search = array(); if(isset($param['firmID']) && $param['firmID']>0)$search[] = "topic.firm_id={$param['firmID']}"; $sql = "select topic.* from topic where 1=1 "; if(count($search))$sql .= " and " . implode(" and ",$search) . " "; $sql .= "order by topic.comment_last_mktime desc"; $pagerOptions = Array( 'mode' => 'Sliding', 'delta' => 6, 'perPage' => 20, 'linkClass'=>"link_class", 'curPageLinkClassName'=>"link_class_active", 'spacesBeforeSeparator' => 1, 'spacesAfterSeparator' => 1 ); $this->tpl->assign('topicData', Pager_Wrapper_DB($this->db, $sql, $pagerOptions)); } function viewFirmTopics($firm_id){ $sql = "select * from topic where firm_id=? order by mktime desc"; $pagerOptions = Array( 'mode' => 'Sliding', 'delta' => 6, 'perPage' => 10, 'spacesBeforeSeparator' => 1, 'spacesAfterSeparator' => 1 ); $this->tpl->assign('topicFirmData', Pager_Wrapper_DB($this->db, $sql, $pagerOptions, false, DB_FETCHMODE_ASSOC, array($firm_id))); } function viewTopic($id,&$row){ $sql = "select * from topic where id=? limit 1"; $row = $this->db->getRow($sql,array($id),DB_FETCHMODE_ASSOC); $this->tpl->assign('topic', $row); return $row['tree_id']; } function viewParentTopic($parent_table,$parent_id){ $sql = "select * from topic where parent_table=? and parent_table_id=? limit 1"; $row = $this->db->getRow($sql,array($parent_table,$parent_id),DB_FETCHMODE_ASSOC); $this->tpl->assign('topic_parent', $row); } function Click($id){ $sql = "update topic set view=view+1 where id=? limit 1"; $this->db->query($sql,$id); } function yourComments($firm_id,$parent_table = 'gallery'){ $mktime = mktime(0,0,0,date("m"),date("d"),date("Y")); $end_mktime = mktime(0,0,0,date("m"),date("d")+1,date("Y")); $sql = "select count(a.id) from tree a,tree b,topic where topic.parent_table=? AND topic.firm_id=? AND b.id=topic.tree_id AND (a._left>b._left and a._right=? and a.mktime<=?)"; $count = $this->db->getOne($sql,array($parent_table,$firm_id,$mktime,$end_mktime)); $this->tpl->assign('countCommensDays_'.$parent_table,$count); } function displayForum(){ $this->tpl->assign("tpl","forum.tpl"); } function displayTopic(){ $this->tpl->assign("tpl","topic.tpl"); } function displayRegister(){ $this->tpl->assign("tpl","forum_register.tpl"); } } ?>