*
*/
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;
}
}
?>