* */ class folders { //Function used by the other bellow recursively to help to check //if the folder that`s being opened is son of the one being displayed. private function checkParents($folder_id, $folder_current,$folder_parents) { $conn = new dbquery(); $conn->connect(); $conn->query("select * from ".$_SESSION['tablename']['folders']." where FOLDER_ID = '".$folder_id ."' and USER_ID = '".$_SESSION['user']['UserId']."' order by DESCRIPTION"); $nb_total = $conn->nb_result(); if ($nb_total != 0) { while($res = $conn->fetch_object()) { $folder_parents[]=$res->FOLDER_ID; $this->checkParents($res->PARENT_ID, $folder_current, &$folder_parents); } } } //Function used to check if the folder that`s being opened //is son of the one being displayed. private function openFolder($folder_id,$folder_current) { $this->checkParents($folder_id, $folder_current, &$folder_parents); if (is_array($folder_parents)) { if (in_array($folder_current, $folder_parents)) { return true; } } } //This was the most difficult of all the functions cause it //calculates and organize the hierarchy of the opened folders... //A pain in the ass, literally. I had night mares and woke up //in the middle of the night because of this son of a b* private function drawBlanksIntersecs($folder_id) { $conn = new dbquery(); $conn->connect(); $conn->query("select * from ".$_SESSION['tablename']['folders']." where FOLDER_ID = ".$folder_id." and USER_ID = '".$_SESSION['user']['UserId']."'"); $res = $conn->fetch_object(); $conn->query("select * from ".$_SESSION['tablename']['folders']." where FOLDER_ID = ".$res->PARENT_ID." and USER_ID = '".$_SESSION['user']['UserId']."'"); $res2 = $conn->fetch_object(); $conn->query("select * from ".$_SESSION['tablename']['folders']." where PARENT_ID = '".$res2->PARENT_ID."' and USER_ID = '".$_SESSION['user']['UserId']."' order by DESCRIPTION"); $res3 = $conn->fetch_object(); $nb_total = $conn->nb_result(); $i=0; $is_last = 1; if ($res3 != 0) { while ($res3 = $conn->fetch_object()) { $i++; if ($res3->FOLDER_ID == $res->PARENT_ID ) { $is_last=1; } else { $is_last=0; } } } //echo $is_last.": ".$res->PARENT_ID." / "; if ($res->PARENT_ID != -1) { $this->drawBlanksIntersecs($res->PARENT_ID); //echo $is_last == 1; if ($is_last == 1) { echo "\n"; } elseif ($is_last == 0) { echo "\n"; } } } //Function that builds the tree from root to the last opened folder //I`m very proud of it, `cause it works!!! Don`t care if it is too //messy or has too many ifs. At least idention is right, so if you //want go ahead and fix it yourself. public function buildTreeView($action, $folder_id=-1, $link, $do='', $folder_parents=-1,$depth=0,$parent_last=0) { $conn = new dbquery(); $conn->connect(); $conn->query("select * from ".$_SESSION['tablename']['folders']." where PARENT_ID = ".$folder_parents." and USER_ID = '".$_SESSION['user']['UserId']."' order by DESCRIPTION"); //$conn->show(); $conn2 = new dbquery(); $conn2->connect(); $depth++; $i=1; while ($parent = $conn->fetch_object()) { echo "\n"; echo "\n"; if ($parent->PARENT_ID !=-1) { $this->drawBlanksIntersecs($parent->FOLDER_ID); } $conn2->query("select * from ".$_SESSION['tablename']['folders']." where PARENT_ID = ".$parent->FOLDER_ID." and USER_ID = '".$_SESSION['user']['UserId']."' order by DESCRIPTION"); if ($conn2->nb_result() != 0) { if ($action == "expand" && $this->openFolder($folder_id, $parent->FOLDER_ID)) { echo "PARENT_ID."\">"; if ($conn->nb_result() == $i) { echo "\n"; } else { echo "\n"; } } else { echo "FOLDER_ID."\">"; //$class="class=\"folderSelect\""; if ($conn->nb_result() == $i) { echo "\n"; } else { echo "\n"; } } } else { //$class="class=\"folderSelect\""; if ($conn->nb_result() == $i) { echo "\n"; } else { echo "\n"; } } if ($action=="expand" && $this->openFolder($folder_id,$parent->FOLDER_ID)) { if ((isset($do) && !empty($do)) && ($do == "CUT" || $do == "COPY") && ($parent->FOLDER_ID == $folder_id)) { $class="class=\"folderDo\""; }else { $class="class=\"folderSelect\""; } echo "\n"; } else if ($action=="" && $this->openFolder($folder_id,$parent->FOLDER_ID)) { if ((isset($do) && !empty($do)) && ($do == "CUT" || $do == "COPY") && ($parent->FOLDER_ID == $folder_id)) { $class="class=\"folderDo\""; }else { $class="class=\"folderSelect\""; } echo "\n"; } else { $class=""; echo "\n"; } echo ""; //Here you can change where the link of the folder points too. //You really should to edit it... echo "FOLDER_ID."\" >"; echo "  ".$parent->DESCRIPTION." (".$this->countDoc ($parent->FOLDER_ID).")   "; echo "\n"; echo "\n"; if ($action=="expand" && $this->openFolder($folder_id, $parent->FOLDER_ID)) { $this->buildTreeView($action, $folder_id, $link, $do, $parent->FOLDER_ID, $depth, $parent_last); } $i++; } } //Function to add folder public function addFolder($description, $folder_parents=-1) { $conn = new dbquery(); $conn->connect(); $conn->query("INSERT INTO ".$_SESSION['tablename']['folders']." ( DESCRIPTION, USER_ID, PARENT_ID) VALUES ('".addslashes($description)."', '".$_SESSION['user']['UserId']."', '".$folder_parents."')"); $_SESSION['info'] = _FOLDER_ADDED; } //Function public function upFolder($folder_id, $description) { $conn = new dbquery(); $conn->connect(); $conn->query("select PARENT_ID from ".$_SESSION['tablename']['folders']." where FOLDER_ID = '".$folder_id."' and USER_ID = '".$_SESSION['user']['UserId']."'"); //$conn->show(); if ($conn->nb_result() == 0) { $_SESSION['error'] = _FOLDER_MISSING; } else { $conn->query("update ".$_SESSION['tablename']['folders']." set DESCRIPTION = '".addslashes($description)."' where USER_ID = '".$_SESSION['user']['UserId']."' and FOLDER_ID = '".$folder_id."'"); $_SESSION['info'] = _FOLDER_MODIFIED; } } //Function to delete folder, same recursive f..cking things !!! //To fix man !!! public function delFolder($folder_id, $mode) { $conn = new dbquery(); $conn->connect(); $conn->query("select PARENT_ID from ".$_SESSION['tablename']['folders']." where FOLDER_ID = '".$folder_id."' and USER_ID = '".$_SESSION['user']['UserId']."'"); //$conn->show(); if ($conn->nb_result() == 0) { $_SESSION['error'] = _FOLDER_MISSING; } else { if ($mode == "FLH") { $conn->query("delete from ".$_SESSION['tablename']['folderres']." where FOLDER_ID = '".$folder_id."'"); $_SESSION['info'] = _FOLDER_FLUSHED; return $folder_id; } elseif ($mode == "DEL") { $parent = ""; //On recuper le parent pour pouvoir se positionnerdessus apres suppression $line = $conn->fetch_object(); $parent = $line->PARENT_ID; $conn->query("select * from ".$_SESSION['tablename']['folders']." where PARENT_ID = '".$folder_id."' and USER_ID = '".$_SESSION['user']['UserId']."'"); if ($conn->nb_result() == 0) { //On supprime a niveau n on verra pour la recursivité hein!! $conn->query("delete from ".$_SESSION['tablename']['folders']." where USER_ID = '".$_SESSION['user']['UserId']."' and FOLDER_ID = '".$folder_id."'"); $conn->query("delete from ".$_SESSION['tablename']['folderres']." where FOLDER_ID = '".$folder_id."'"); $_SESSION['info'] = _FOLDER_DELETED; return $parent; } else { $_SESSION['error'] = _FOLDER_NOT_EMPTY; } } } } //This function put document into folder public function putFolder($folder_id, $res_id) { $tab_resid = array(); if (empty($folder_id)) { $_SESSION['error'] = _FOLDER_MISSING; } elseif (empty($res_id)) { $_SESSION['error'] = _GED_NUM_MISSING; } if (empty ($_SESSION['error'])) { if($folder_id == -1) { $_SESSION['error'] = _CANT_CLASSIFIED_ON_ROOT; } else { $conn = new dbquery(); $conn->connect(); $conn->query("select * from ".$_SESSION['tablename']['folders']." where FOLDER_ID = '".$folder_id."' and USER_ID = '".$_SESSION['user']['UserId']."'"); //$conn->show(); if ($conn->nb_result() == 0) { $_SESSION['error'] = _FOLDER_MISSING; } else { $conn->query("select * from ".$_SESSION['tablename']['folderres']." where FOLDER_ID = '".$folder_id."' and RES_ID = '".$res_id."'"); if ($conn->nb_result() >0) { $_SESSION['error'] .= _NUM." ".$res_id.": "._MAIL_ALREADY_CLASSIFIED."
"; } else { $conn->query("INSERT INTO ".$_SESSION['tablename']['folderres']." ( FOLDER_ID, RES_ID) VALUES ('".$folder_id."', '".$res_id."')"); //$_SESSION['info'] = _MAIL_CLASSIFIED; } } } } } //This function get the information oft the copied or cuted folder public function getFolder($folder_id, $do) { $tab_folder = array(); $conn = new dbquery(); $conn->connect(); $conn->query("select * from ".$_SESSION['tablename']['folders']." where FOLDER_ID = '".$folder_id."' and USER_ID = '".$_SESSION['user']['UserId']."'"); //$conn->show(); if ($conn->nb_result() == 0) { $_SESSION['error'] = _FOLDER_MISSING; } else { while ($line = $conn->fetch_object()) { array_push( $tab_folder, array('ACTION'=> $do, 'ID'=>$line->FOLDER_ID, 'DESCRIPTION'=>$line->DESCRIPTION, 'PARENT_ID'=>$line->PARENT_ID)); } return $tab_folder; } } //Function to copy or cut folders //I have to upgrade it for recursive copy, but i dont have time now :( public function moveFolder($tab_folder, $folder_id) { if (empty($folder_id)) { $_SESSION['error'] = _FOLDER_MISSING; exit; } $conn = new dbquery(); $conn->connect(); $conn->query("select * from ".$_SESSION['tablename']['folders']." where FOLDER_ID = '".$folder_id."' and USER_ID = '".$_SESSION['user']['UserId']."'"); //$conn->show(); if ($conn->nb_result() == 0 && $folder_id != -1) { $_SESSION['error'] = _FOLDER_MISSING; } else { if ($tab_folder[0]['ACTION'] == "CUT") { if ($tab_folder[0]['ID'] == $folder_id) { $_SESSION['error'] = _CANT_MOVE_FOLDER_HIMSELF; } else { $conn->query("select FOLDER_ID from ".$_SESSION['tablename']['folders']." where PARENT_ID = '".$tab_folder[0]['ID']."' and USER_ID = '".$_SESSION['user']['UserId']."'"); $line = $conn->fetch_object(); $child_folder = $line->FOLDER_ID; if ($folder_id == $child_folder) { $_SESSION['error'] = _CANT_MOVE_FOLDER_IN_CHILD; } else { $conn->query("UPDATE ".$_SESSION['tablename']['folders']." SET PARENT_ID = '".$folder_id."' where FOLDER_ID = '".$tab_folder[0]['ID']."' and USER_ID = '".$_SESSION['user']['UserId']."'"); $_SESSION['info'] = _FOLDER_MOVED; } } } elseif ($tab_folder[0]['ACTION'] == "COPY") { $conn->query("select * from ".$_SESSION['tablename']['folders']." where PARENT_ID = '".$tab_folder[0]['ID']."' and USER_ID = '".$_SESSION['user']['UserId']."'"); if ($conn->nb_result() == 0) { $conn->query("INSERT INTO ".$_SESSION['tablename']['folders']." ( DESCRIPTION, USER_ID, PARENT_ID) VALUES ('".$tab_folder[0]['DESCRIPTION']."', '".$_SESSION['user']['UserId']."', '".$folder_id."')"); //Recupere le last ID $conn->query("select last_insert_id() as LAST_ID from ".$_SESSION['tablename']['folders'] ); $line = $conn->fetch_object(); $last_id = $line->LAST_ID; //Recupere les courriers classés $conn->query("select RES_ID from ".$_SESSION['tablename']['folderres']." where FOLDER_ID = ".$tab_folder[0]['ID']); //Les copie dans le nouveau classeur if ($conn->nb_result() > 0) { while ($line = $conn->fetch_object()) { $conn->query("INSERT INTO ".$_SESSION['tablename']['folderres']." ( RES_ID, FOLDER_ID) VALUES ('".$line->RES_ID."', '".$last_id."')"); } } $_SESSION['info'] = _FOLDER_COPIED; } else { $_SESSION['error'] = _MOVE_ONLY_ONE_FOLDER; } } } $tab_folder = array(); } //Function to draw the Root of The treeview //If the root is empty, the picture is not the same public function drawRoot($folder_id, $link) { $conn = new dbquery(); $conn->connect(); $conn->query("select * from ".$_SESSION['tablename']['folders']." where PARENT_ID = '-1' and USER_ID = '".$_SESSION['user']['UserId']."' order by DESCRIPTION"); //$conn->show(); echo "\n"; echo "\n"; if ( (isset($folder_id) && !empty($folder_id)) || $folder_id ==-1) { $class="class=\"folderSelect\""; }else { $class=""; } echo ""; if ($conn->nb_result() == 0) { echo "\n"; } else { echo "\n"; } echo "  /  "; echo " \n"; echo "\n"; } private function countDoc($folder_id) { $count_doc = 0; $conn = new dbquery(); $conn->connect(); $conn->query("select count(*) as TOTAL from ".$_SESSION['tablename']['folderres']." where FOLDER_ID = '".$folder_id."'"); //$conn->show(); $line = $conn->fetch_object(); $count_doc = $line->TOTAL; return $count_doc; } } ?>