<?php

use ProcessMaker\Plugins\PluginRegistry;

$filter = new InputFilter();
$_POST = $filter->xssFilterHard($_POST);
$_GET = $filter->xssFilterHard($_GET);
$_REQUEST = $filter->xssFilterHard($_REQUEST);
if (! isset ($_SESSION ['USER_LOGGED'])) {
    $res ['success'] = false;
    $res ['error'] = G::LoadTranslation('ID_LOGIN_AGAIN');
    $res ['login'] = true;
    print G::json_encode ($res);
    die ();
}

$search = isset($_REQUEST ['search']) ? $_REQUEST ['search'] : null;

if (isset ($_REQUEST ['action']) && isset($_REQUEST['sort']) && isset($_REQUEST['dir'])) {
    sortContent();
}


if (! isset ($_REQUEST ['action'])) {
    $res ['success'] = false;
    $res ['message'] = 'You may request an action';
    print G::json_encode ($res);
    die ();
}

$_REQUEST['action'] = ($_REQUEST['action'] == 'rename') ? 'renameFolder' : $_REQUEST['action'];

if (! function_exists ($_REQUEST['action']) || !G::isUserFunction($_REQUEST['action'])) {
    $res ['success'] = false;
    $res ['message'] = 'The requested action does not exist';
    print G::json_encode ($res);
    die ();
}

if (($_REQUEST['action']) != 'renameFolder') {
    $functionName = $_REQUEST ['action'];
    $functionParams = isset ($_REQUEST ['params']) ? $_REQUEST ['params'] : array ();

    $functionName ($functionParams);
} else {
    if (!isset($_REQUEST['item']) ||
            !isset($_REQUEST['newitemname']) ||
            !isset($_REQUEST['selitems'])) {
        exit();
    }
    $functionName = 'renameFolder';
    $functionParams = isset ($_REQUEST ['params']) ? $_REQUEST ['params'] : array ();
    $oldname = $_REQUEST ['item'];
    $newname = $_REQUEST ['newitemname'];
    $oUid = $_REQUEST ['selitems'];

    if (isset($oUid[0])) {
        $uid = $oUid[0];
    } else {
        $uid = $oUid;
    }

    renameFolder ($oldname, $newname, $uid);
}

/////////////////////////////////////////////

function renameFolder($oldname, $newname, $uid)
{
    $folder = new AppFolder();
    //Clean Folder name (delete spaces...)
    $newname = trim( $newname );

    $fields = array();

    $fields['FOLDER_UID'] = $uid;
    $fields['FOLDER_NAME'] = $newname;
    $fields['FOLDER_UPDATE_DATE'] = date('Y-m-d H:i:s');

    $folder->update($fields);

    $msgLabel= G::LoadTranslation ('ID_EDIT_SUCCESSFULLY');
    echo "{action: '', error:'error',message: '$msgLabel', success: 'success',folderUID: 'root'}";
}

/**
 * delete folders and documents
 * created by carlos pacha carlos@colosa.com, pckrlos@gmail.com
 * @param void
 * @return true
**/
function delete()
{
    include_once ("classes/model/AppDocument.php");
    include_once ("classes/model/AppFolder.php");

    switch ($_REQUEST['option']) {
        case 'documents':
            deleteDocuments($_REQUEST['selitems'], $_REQUEST['option']);
            break;
        case 'directory':
            $oAppFoder    = new AppFolder ();
            $oAppDocument = new AppDocument ();
            $aDocuments   = $oAppDocument->getDocumentsinFolders($_REQUEST['item']);

            if (count($aDocuments) > 0) {
                deleteDocuments($aDocuments, $_REQUEST['option']);
            }

            $oAppFoder->remove($_REQUEST['item'],'');
            break;
    }
    $msgLabel= G::LoadTranslation ('ID_DELETED_SUCCESSFULLY');
    echo "{action: '', error:'error',message: '$msgLabel', success: 'success',folderUID: 'root'}";
}

/**
 * delete docuements
 * created by carlos pacha carlos@colosa.com, pckrlos@gmail.com
 * @param array $aDocuments
 * @param string $opt
 * @return true
**/
function deleteDocuments($aDocuments, $opt)
{
    include_once ("classes/model/AppDocument.php");
    $oAppDocument = new AppDocument ();
    foreach ($aDocuments as $key => $val) {
        if ($opt == 'documents') {
            list($sFileUID,$docVersion) = explode('_',$val);
        } else {
            $sFileUID   = $val['sAppDocUid'];
            $docVersion = $val['iVersion'];
        }
        $oAppDocument->remove($sFileUID,$docVersion);
    }
    return true;
}
/////////////////////////////////////////////
function getExtJSParams()
{
    $validParams = array('callback' => '', 'dir' => 'DESC', 'sort' => '', 'start' => 0, 'limit' => 25, 'filter' => '',
        'search' => '', 'action' => '', 'xaction' => '', 'data' => '', 'status' => '', 'query' => '', 'fields' => "");
    $result = array();
    foreach ($validParams as $paramName => $paramDefault) {
        $result[$paramName] = isset($_REQUEST[$paramName]) ?
        $_REQUEST[$paramName] : isset($_REQUEST[$paramName]) ? $_REQUEST[$paramName] : $paramDefault;
    }
    return $result;
}

function sendJsonResultGeneric($response, $callback)
{
    header("Content-Type: application/json");
    $finalResponse = G::json_encode($response);
    if ($callback != '') {
        print $callback . "($finalResponse);";
    } else {
        print $finalResponse;
    }
}

function expandNode()
{
    extract(getExtJSParams());

    $oPMFolder = new AppFolder();

    $rootFolder = "/";

    if ($_POST ['node']=="") {
        $_POST ['node'] ="/";
    }

    if ($_POST ['node']=="root") {
        $_POST ['node'] ="/";
    }

    if (!(isset($_POST['sendWhat']))) {
        $_POST['sendWhat']="both";
    }

    if (isset($_POST['renderTree'])) {
        $limit = 1000000;
    }

    $totalItems=0;
    $totalFolders=0;
    $totalDocuments=0;

    if (($_POST['sendWhat'] == "dirs") || ($_POST['sendWhat'] == "both")) {
        $folderListObj = $oPMFolder->getFolderList(
            ($_POST["node"] != "root")? (($_POST["node"] == "NA")? "" : $_POST["node"]) : $rootFolder,
            $limit,
            $start,
            'ASC',
            'name'
        );

        $folderList=$folderListObj['folders'];
        $totalFolders=$folderListObj['totalFoldersCount'];
        $totalItems+=count($folderList);
    }

    if (($_POST['sendWhat'] == "files") || ($_POST['sendWhat'] == "both")) {
        global $RBAC;

        $user = ($RBAC->userCanAccess('PM_ALLCASES') == 1)? '' : $_SESSION['USER_LOGGED'];

        $folderContentObj = $oPMFolder->getFolderContent(
            ($_POST["node"] != "root")? (($_POST["node"] == "NA")? "" : $_POST["node"]) : $rootFolder,
            array(),
            null,
            null,
            $limit,
            $start,
            $user,
            true,
            $search
        );

        $folderContent=$folderContentObj['documents'];
        $totalDocuments=$folderContentObj['totalDocumentsCount'];
        $totalItems+=count($folderContent);
    }

    $processListTree = array();
    $tempTree = array();

    if (isset($folderList) && sizeof($folderList)>0) {
        //$tempTree=array();
        foreach ($folderList as $key => $obj) {
            //$tempTree ['all-obj'] = $obj;
            $tempTree ['text'] = $obj['FOLDER_NAME'];
            $tempTree ['id'] = $obj['FOLDER_UID'];
            $tempTree ['folderID'] = $obj['FOLDER_UID'];
            $tempTree ['cls'] = 'folder';
            $tempTree ['draggable'] = true;
            $tempTree ['name'] = $obj['FOLDER_NAME'];
            $tempTree ['type'] = "Directory";
            $tempTree ['is_file'] = false;
            $tempTree ['appDocCreateDate'] = $obj['FOLDER_CREATE_DATE'];
            $tempTree ['qtip'] ='<strong>Directory: </strong>'.$obj['FOLDER_NAME'].
                '<br /><strong>Create Date:</strong> '.$obj['FOLDER_CREATE_DATE'].'';
            $tempTree ['is_writable'] =true;
            $tempTree ['is_chmodable'] =true;
            $tempTree ['is_readable'] =true;
            $tempTree ['is_deletable'] =true;

            if ((isset($_POST['option']) )&& ($_POST['option'] == "gridDocuments")) {
                $tempTree ['icon'] = "/images/documents/extension/folder.png";
            }
            //$tempTree ['leaf'] = true;
            //$tempTree ['optionType'] = "category";
            //$tempTree['allowDrop']=false;
            //$tempTree ['singleClickExpand'] = false;
            /*
            if ($key != "No Category") {
                $tempTree ['expanded'] = true;
            } else {
                //$tempTree ['expanded'] = false;
                $tempTree ['expanded'] = true;
            }
            */
            $processListTree [] = $tempTree;
            $tempTree=array();
        }
        /*if ($_POST ['node'] == '/') {
            $notInFolderLabel = G::LoadTranslation ('ID_NOT_IN_FOLDER');
            $tempTree ['text'] = $notInFolderLabel;
            $tempTree ['id'] = "NA";
            $tempTree ['folderID'] = "NA";
            $tempTree ['cls'] = 'folder';
            $tempTree ['draggable'  ] = true;
            $tempTree ['name'] = $notInFolderLabel;
            $tempTree ['type'] = "Directory";
            $tempTree ['is_file'] = false;
            $tempTree ['qtip'] ='<strong>Directory: </strong>'.$notInFolderLabel.'<br /><i>Unfiled Files</i> ';
            $tempTree ['is_writable'] =true;
            $tempTree ['is_chmodable'] =true;
            $tempTree ['is_readable'] =true;
            $tempTree ['is_deletable'] =true;

            if ((isset($_POST['option']))&&($_POST['option']=="gridDocuments")) {
                $tempTree ['icon'] = "/images/documents/extension/bz2.png";
            }*/
            //$tempTree ['leaf'] = true;
            //$tempTree ['optionType'] = "category";
            //$tempTree['allowDrop']=false;
            //$tempTree ['singleClickExpand'] = false;
            /*
            if ($key != "No Category") {
                $tempTree ['expanded'] = true;
            } else {
                //$tempTree ['expanded'] = false;
                $tempTree ['expanded'] = true;
            }
            */
            /*$processListTree [] = $tempTree;
            $tempTree=array();
        }*/
    } else {
        if ($_POST ['node'] == '/') {
            //$tempTree=array();
            //$processListTree [] = array();
        }
    }

    if (isset($folderContent)) {
        foreach ($folderContent as $key => $obj) {
            $mimeInformation = getMime($obj["APP_DOC_FILENAME"]);

            $tempTree["text"] = $obj["APP_DOC_FILENAME"];
            $tempTree["name"] = $obj["APP_DOC_FILENAME"];
            $tempTree["type"] = $mimeInformation["description"];
            $tempTree["icon"] = $mimeInformation["icon"];

            /*
            if (isset($obj['OUT_DOC_GENERATE'])) {
                if ($obj['OUT_DOC_GENERATE'] == "BOTH") {
                    $arrayType=array("PDF","DOC");
                } else {
                    $arrayType=array($obj['OUT_DOC_GENERATE']);
                }
                foreach ($arrayType as $keyType => $fileType) {
                    $tempTree ['text'.$fileType] = $obj['APP_DOC_FILENAME'].".".strtolower($fileType);
                    $tempTree ['name'.$fileType] = $obj['APP_DOC_FILENAME'].".".strtolower($fileType);
                    $mimeInformation=getMime($obj['APP_DOC_FILENAME'].".".strtolower($fileType));
                    $tempTree ['type'.$fileType] = $mimeInformation['description'];
                    $tempTree ['icon'.$fileType] = $mimeInformation['icon'];
                }
            }
            */

            $tempTree ['appdocid'] = $obj['APP_DOC_UID'];
            $tempTree ['id'] = $obj['APP_DOC_UID_VERSION'];
            $tempTree ['cls'] = 'file';
            //$tempTree ['draggable'] = true;
            $tempTree ['leaf'] = true;
            $tempTree ['is_file'] = true;
            //if ((isset($_POST['option']))&&($_POST['option']=="gridDocuments")) {
            //}
            $tempTree ['docVersion'] = $obj['DOC_VERSION'];
            $tempTree ['appUid'] = $obj['APP_UID'];
            $tempTree ['usrUid'] = $obj['USR_UID'];
            $tempTree ['appDocType'] = ucfirst(strtolower($obj['APP_DOC_TYPE']));
            $tempTree ['appDocCreateDate'] = $obj['APP_DOC_CREATE_DATE'];
            $tempTree ['appDocPlugin'] = $obj['APP_DOC_PLUGIN'];
            $tempTree ['appDocTags'] = $obj['APP_DOC_TAGS'];
            $tempTree ['appDocTitle'] = $obj['APP_DOC_TITLE'];
            $tempTree ['appDocComment'] = $tempTree ['qtip'] = $obj['APP_DOC_COMMENT'];
            $tempTree ['appDocFileName'] = $obj['APP_DOC_FILENAME'];
            if (isset($obj['APP_NUMBER'])) {
                $tempTree ['appLabel'] = sprintf("%s '%s' (%s)",$obj['APP_NUMBER'],$obj['APP_TITLE'],$obj['STATUS']);
            } else {
                $tempTree ['appLabel'] = "No case related";
            }
            $tempTree ['proTitle'] = $obj['PRO_TITLE'];
            $tempTree ['appDocVersionable'] = 0;
            if (isset($obj['OUT_DOC_VERSIONING'])) {
                $tempTree ['appDocVersionable'] = $obj['OUT_DOC_VERSIONING'];
            } elseif (isset($obj['INP_DOC_VERSIONING'])) {
                $tempTree ['appDocVersionable'] = $obj['INP_DOC_VERSIONING'];
            }
            if (isset($obj['USR_LASTNAME']) && isset($obj['USR_LASTNAME'])) {
                $tempTree ['owner'] = $obj['USR_USERNAME'];
                $tempTree ['owner_firstname'] = $obj['USR_FIRSTNAME'];
                $tempTree ['owner_lastname'] = $obj['USR_LASTNAME'];
            } else {
                $tempTree ['owner'] = $obj['USR_USERNAME'];
                $tempTree ['owner_firstname'] = "";
                $tempTree ['owner_lastname'] = "";
            }
            $tempTree ['deletelabel'] = $obj['DELETE_LABEL'];

            if ((isset($obj['DOWNLOAD_LABEL'])) && ($obj['DOWNLOAD_LABEL']!="")) {
                $labelgen=strtoupper(str_replace(".","",$obj['DOWNLOAD_LABEL']));
                $tempTree ['downloadLabel'.$labelgen] = $obj['DOWNLOAD_LABEL'];
                $tempTree ['downloadLink'.$labelgen] = $obj['DOWNLOAD_LINK'];
            }
            $tempTree ['downloadLabel'] = $obj['DOWNLOAD_LABEL'];
            $tempTree ['downloadLink'] = $obj['DOWNLOAD_LINK'];

            if ((isset($obj['DOWNLOAD_LABEL1'])) && ($obj['DOWNLOAD_LABEL1']!="")) {
                $labelgen=strtoupper(str_replace(".","",$obj['DOWNLOAD_LABEL1']));
                $tempTree ['downloadLabel'.$labelgen] = $obj['DOWNLOAD_LABEL1'];
                $tempTree ['downloadLink'.$labelgen] = $obj['DOWNLOAD_LINK1'];
            }
            $tempTree ['downloadLabel1'] = $obj['DOWNLOAD_LABEL1'];
            $tempTree ['downloadLink1'] = $obj['DOWNLOAD_LINK1'];

            $tempTree ['appDocUidVersion'] = $obj['APP_DOC_UID_VERSION'];

            $tempTree ['is_readable'] = true;
            $tempTree ['is_file'] = true;

            //$tempTree ['optionType'] = "category";
            //$tempTree['allowDrop']=false;
            //$tempTree ['singleClickExpand'] = true;
            /*
            if ($key != "No Category") {
                $tempTree ['expanded'] = true;
            } else {
                //$tempTree ['expanded'] = false;
                $tempTree ['expanded'] = true;
            }
            */

            $tempTree["outDocGenerate"] = "";

            if (isset($obj["OUT_DOC_GENERATE"])) {
                switch ($obj["OUT_DOC_GENERATE"]) {
                    case "PDF":
                    case "DOC":
                        $mimeInformation = getMime($obj["APP_DOC_FILENAME"] . "." . strtolower($obj["OUT_DOC_GENERATE"]));

                        $tempTree["text"] = $obj["APP_DOC_FILENAME"] . "." . strtolower($obj["OUT_DOC_GENERATE"]);
                        $tempTree["name"] = $obj["APP_DOC_FILENAME"] . "." . strtolower($obj["OUT_DOC_GENERATE"]);
                        $tempTree["type"] = $mimeInformation["description"];
                        $tempTree["icon"] = $mimeInformation["icon"];
                        $tempTree["appDocFileName"] = $tempTree["name"];

                        $tempTree["downloadLabel"] = $tempTree["downloadLabel" . $obj["OUT_DOC_GENERATE"]];
                        $tempTree["downloadLink"] = $tempTree["downloadLink" . $obj["OUT_DOC_GENERATE"]];

                        $tempTree["id"] = $tempTree["id"] . "_" . $obj["OUT_DOC_GENERATE"];

                        $processListTree[] = $tempTree;
                        break;
                    case "BOTH":
                        $strExpander = null;
                        $mimeInformation = getMime($obj["APP_DOC_FILENAME"] . ".pdf");
                        $strExpander = $strExpander . "<a href=\"javascript:;\" onclick=\"openActionDialog(this, 'download', 'pdf'); return false;\" style=\"color: #000000; text-decoration: none;\"><img src=\"/images/documents/extension/pdf.png\" style=\"margin-left: 25px; border: 0;\" alt=\"\" /> <b>" . $obj["APP_DOC_FILENAME"] . ".pdf</b> (" . $mimeInformation["description"] . ")</a>";
                        $strExpander = $strExpander . "<br />";
                        $mimeInformation = getMime($obj["APP_DOC_FILENAME"] . ".doc");
                        $strExpander = $strExpander . "<a href=\"javascript:;\" onclick=\"openActionDialog(this, 'download', 'doc'); return false;\" style=\"color: #000000; text-decoration: none;\"><img src=\"/images/documents/extension/doc.png\" style=\"margin-left: 25px; border: 0;\" alt=\"\" /> <b>" . $obj["APP_DOC_FILENAME"] . ".doc</b> (" . $mimeInformation["description"] . ")</a>";

                        $tempTree["outDocGenerate"] = $strExpander;

                        $tempTree["text"] = $obj["APP_DOC_FILENAME"];
                        $tempTree["name"] = $obj["APP_DOC_FILENAME"];
                        $tempTree["type"] = "";
                        $tempTree["icon"] = "/images/documents/extension/document.png";
                        $tempTree["appDocFileName"] = $tempTree["name"];

                        //$tempTree["downloadLabel"] = $obj["DOWNLOAD_LABEL"];
                        //$tempTree["downloadLink"] = $obj["DOWNLOAD_LINK"];

                        $tempTree["id"] = $tempTree["id"] . "_" . $obj["OUT_DOC_GENERATE"];

                        $processListTree[] = $tempTree;
                        break;
                    //case "NOFILE":
                    //    break;
                }
            } else {
                if ($obj["APP_DOC_TYPE"] == "OUTPUT" &&
                    $tempTree["type"] == G::LoadTranslation("MIME_DES_FILE") &&
                    preg_match("/^.+&ext=(.+)&.+$/", $tempTree["downloadLink"], $arrayMatch)
                ) {
                    $ext = $arrayMatch[1];
                    $mimeInformation = getMime($obj["APP_DOC_FILENAME"] . ".$ext");

                    $tempTree["text"] = $obj["APP_DOC_FILENAME"] . ".$ext";
                    $tempTree["name"] = $obj["APP_DOC_FILENAME"] . ".$ext";
                    $tempTree["type"] = $mimeInformation["description"];
                    $tempTree["icon"] = $mimeInformation["icon"];
                }

                $processListTree[] = $tempTree;
            }

            $tempTree = array();
        }
    }

    if ((isset($_POST['option'])) && ($_POST['option'] == "gridDocuments")) {
        $processListTreeTemp["totalCount"] = $totalFolders + $totalDocuments;
        $processListTreeTemp['msg']='correct reload';
        $processListTreeTemp['items']=$processListTree;
        $processListTree = $processListTreeTemp;
    }

    echo G::json_encode($processListTree);
}

function sortContent()
{
    extract(getExtJSParams());

    $rootFolder = "/";

    $oPMFolder = new AppFolder();

    global $RBAC;

    $user = ($RBAC->userCanAccess('PM_ALLCASES') == 1)? '' : $_SESSION['USER_LOGGED'];

    $totalItems = 0;
    $totalFolders = 0;
    $totalDocuments = 0;

    if (!(isset($_POST['sendWhat']))) {
        $_POST['sendWhat'] = "both";
    }

    if (isset($_POST['renderTree'])) {
        $limit = 1000000;
    }

    $direction = "DESC";
    if (isset($_POST['dir'])) {
        $direction = $_POST['dir'];
    }

    if (($_POST['sendWhat'] == "dirs") || ($_POST['sendWhat'] == "both")) {
        $folderListObj = $oPMFolder->getFolderList(
                        ($_POST["node"] != "root")? (($_POST["node"] == "NA")? "" : $_POST["node"]) : $rootFolder,
                        $limit,
                        $start,
                        $direction,
                        (isset($_POST["sort"]))? $_POST["sort"]:"appDocCreateDate",
                        $search
        );

        $folderList=$folderListObj['folders'];
        $totalFolders=$folderListObj['totalFoldersCount'];
        $totalItems+=count($folderList);
    }

    if (($_POST['sendWhat'] == "files") || ($_POST['sendWhat'] == "both")) {
        global $RBAC;

        $user = ($RBAC->userCanAccess('PM_ALLCASES') == 1)? '' : $_SESSION['USER_LOGGED'];

        $folderContentObj = $oPMFolder->getDirectoryContentSortedBy(
                        ($_POST["node"] != "root")? (($_POST["node"] == "NA")? "" : $_POST["node"]) : $rootFolder,
                        array(),
                        null,
                        null,
                        $limit,
                        $start,
                        $user,
                        true,
                        $direction,
                        (isset($_POST["sort"]))? $_POST["sort"]:"appDocCreateDate",
                        $search
        );

        $folderContent = $folderContentObj['documents'];
        $totalDocuments = $folderContentObj['totalDocumentsCount'];
        $totalItems += count($folderContent);
    }

    $processListTree = array();
    $tempTree = array();

    if (isset($folderList) && sizeof($folderList)>0) {
        //$tempTree=array();
        foreach ($folderList as $key => $obj) {
            //$tempTree ['all-obj'] = $obj;
            $tempTree ['text'] = $obj['FOLDER_NAME'];
            $tempTree ['id'] = $obj['FOLDER_UID'];
            $tempTree ['folderID'] = $obj['FOLDER_UID'];
            $tempTree ['cls'] = 'folder';
            $tempTree ['draggable'] = true;
            $tempTree ['name'] = $obj['FOLDER_NAME'];
            $tempTree ['type'] = "Directory";
            $tempTree ['is_file'] = false;
            $tempTree ['appDocCreateDate'] = $obj['FOLDER_CREATE_DATE'];
            $tempTree ['qtip'] ='<strong>Directory: </strong>'.$obj['FOLDER_NAME'].
            '<br /><strong>Create Date:</strong> '.$obj['FOLDER_CREATE_DATE'].'';
            $tempTree ['is_writable'] =true;
            $tempTree ['is_chmodable'] =true;
            $tempTree ['is_readable'] =true;
            $tempTree ['is_deletable'] =true;

            if ((isset($_POST['option']) )&& ($_POST['option'] == "gridDocuments")) {
                $tempTree ['icon'] = "/images/documents/extension/folder.png";
            }
            $processListTree [] = $tempTree;
            $tempTree=array();
        }
    } else {
        if ($_POST ['node'] == '/') {
        }
    }

    if (isset($folderContent)) {
        foreach ($folderContent as $key => $obj) {
            $mimeInformation = getMime($obj["APP_DOC_FILENAME"]);

            $tempTree["text"] = $obj["APP_DOC_FILENAME"];
            $tempTree["name"] = $obj["APP_DOC_FILENAME"];
            $tempTree["type"] = $mimeInformation["description"];
            $tempTree["icon"] = $mimeInformation["icon"];

            $tempTree ['appdocid'] = $obj['APP_DOC_UID'];
            $tempTree ['id'] = $obj['APP_DOC_UID_VERSION'];
            $tempTree ['cls'] = 'file';
            //$tempTree ['draggable'] = true;
            $tempTree ['leaf'] = true;
            $tempTree ['is_file'] = true;
            //if ((isset($_POST['option']))&&($_POST['option']=="gridDocuments")) {
            //}
            $tempTree ['docVersion'] = $obj['DOC_VERSION'];
            $tempTree ['appUid'] = $obj['APP_UID'];
            $tempTree ['usrUid'] = $obj['USR_UID'];
            $tempTree ['appDocType'] = ucfirst(strtolower($obj['APP_DOC_TYPE']));
            $tempTree ['appDocCreateDate'] = $obj['APP_DOC_CREATE_DATE'];
            $tempTree ['appDocPlugin'] = $obj['APP_DOC_PLUGIN'];
            $tempTree ['appDocTags'] = $obj['APP_DOC_TAGS'];
            $tempTree ['appDocTitle'] = $obj['APP_DOC_TITLE'];
            $tempTree ['appDocComment'] = $tempTree ['qtip'] = $obj['APP_DOC_COMMENT'];
            $tempTree ['appDocFileName'] = $obj['APP_DOC_FILENAME'];
            if (isset($obj['APP_NUMBER'])) {
                $tempTree ['appLabel'] = sprintf("%s '%s' (%s)",$obj['APP_NUMBER'],$obj['APP_TITLE'],$obj['STATUS']);
            } else {
                $tempTree ['appLabel'] = "No case related";
            }
            $tempTree ['proTitle'] = $obj['PRO_TITLE'];
            $tempTree ['appDocVersionable'] = 0;
            if (isset($obj['OUT_DOC_VERSIONING'])) {
                $tempTree ['appDocVersionable'] = $obj['OUT_DOC_VERSIONING'];
            } elseif (isset($obj['INP_DOC_VERSIONING'])) {
                $tempTree ['appDocVersionable'] = $obj['INP_DOC_VERSIONING'];
            }
            if (isset($obj['USR_LASTNAME']) && isset($obj['USR_LASTNAME'])) {
                $tempTree ['owner'] = $obj['USR_USERNAME'];
                $tempTree ['owner_firstname'] = $obj['USR_FIRSTNAME'];
                $tempTree ['owner_lastname'] = $obj['USR_LASTNAME'];
            } else {
                $tempTree ['owner'] = $obj['USR_USERNAME'];
                $tempTree ['owner_firstname'] = "";
                $tempTree ['owner_lastname'] = "";
            }
            $tempTree ['deletelabel'] = $obj['DELETE_LABEL'];

            if ((isset($obj['DOWNLOAD_LABEL'])) && ($obj['DOWNLOAD_LABEL']!="")) {
                $labelgen=strtoupper(str_replace(".","",$obj['DOWNLOAD_LABEL']));
                $tempTree ['downloadLabel'.$labelgen] = $obj['DOWNLOAD_LABEL'];
                $tempTree ['downloadLink'.$labelgen] = $obj['DOWNLOAD_LINK'];
            }
            $tempTree ['downloadLabel'] = $obj['DOWNLOAD_LABEL'];
            $tempTree ['downloadLink'] = $obj['DOWNLOAD_LINK'];

            if ((isset($obj['DOWNLOAD_LABEL1'])) && ($obj['DOWNLOAD_LABEL1']!="")) {
                $labelgen=strtoupper(str_replace(".","",$obj['DOWNLOAD_LABEL1']));
                $tempTree ['downloadLabel'.$labelgen] = $obj['DOWNLOAD_LABEL1'];
                $tempTree ['downloadLink'.$labelgen] = $obj['DOWNLOAD_LINK1'];
            }
            $tempTree ['downloadLabel1'] = $obj['DOWNLOAD_LABEL1'];
            $tempTree ['downloadLink1'] = $obj['DOWNLOAD_LINK1'];

            $tempTree ['appDocUidVersion'] = $obj['APP_DOC_UID_VERSION'];

            $tempTree ['is_readable'] = true;
            $tempTree ['is_file'] = true;
            $tempTree["outDocGenerate"] = "";

            if (isset($obj["OUT_DOC_GENERATE"])) {
                switch ($obj["OUT_DOC_GENERATE"]) {
                    case "PDF":
                    case "DOC":
                        $mimeInformation = getMime($obj["APP_DOC_FILENAME"] . "." . strtolower($obj["OUT_DOC_GENERATE"]));

                        $tempTree["text"] = $obj["APP_DOC_FILENAME"] . "." . strtolower($obj["OUT_DOC_GENERATE"]);
                        $tempTree["name"] = $obj["APP_DOC_FILENAME"] . "." . strtolower($obj["OUT_DOC_GENERATE"]);
                        $tempTree["type"] = $mimeInformation["description"];
                        $tempTree["icon"] = $mimeInformation["icon"];
                        $tempTree["appDocFileName"] = $tempTree["name"];

                        $tempTree["downloadLabel"] = $tempTree["downloadLabel" . $obj["OUT_DOC_GENERATE"]];
                        $tempTree["downloadLink"] = $tempTree["downloadLink" . $obj["OUT_DOC_GENERATE"]];

                        $tempTree["id"] = $tempTree["id"] . "_" . $obj["OUT_DOC_GENERATE"];

                        $processListTree[] = $tempTree;
                        break;
                    case "BOTH":
                        $strExpander = null;
                        $mimeInformation = getMime($obj["APP_DOC_FILENAME"] . ".pdf");
                        $strExpander = $strExpander . "<a href=\"javascript:;\" onclick=\"openActionDialog(this, 'download', 'pdf'); return false;\" style=\"color: #000000; text-decoration: none;\"><img src=\"/images/documents/extension/pdf.png\" style=\"margin-left: 25px; border: 0;\" alt=\"\" /> <b>" . $obj["APP_DOC_FILENAME"] . ".pdf</b> (" . $mimeInformation["description"] . ")</a>";
                        $strExpander = $strExpander . "<br />";
                        $mimeInformation = getMime($obj["APP_DOC_FILENAME"] . ".doc");
                        $strExpander = $strExpander . "<a href=\"javascript:;\" onclick=\"openActionDialog(this, 'download', 'doc'); return false;\" style=\"color: #000000; text-decoration: none;\"><img src=\"/images/documents/extension/doc.png\" style=\"margin-left: 25px; border: 0;\" alt=\"\" /> <b>" . $obj["APP_DOC_FILENAME"] . ".doc</b> (" . $mimeInformation["description"] . ")</a>";

                        $tempTree["outDocGenerate"] = $strExpander;

                        $tempTree["text"] = $obj["APP_DOC_FILENAME"];
                        $tempTree["name"] = $obj["APP_DOC_FILENAME"];
                        $tempTree["type"] = "";
                        $tempTree["icon"] = "/images/documents/extension/document.png";
                        $tempTree["appDocFileName"] = $tempTree["name"];

                        //$tempTree["downloadLabel"] = $obj["DOWNLOAD_LABEL"];
                        //$tempTree["downloadLink"] = $obj["DOWNLOAD_LINK"];

                        $tempTree["id"] = $tempTree["id"] . "_" . $obj["OUT_DOC_GENERATE"];

                        $processListTree[] = $tempTree;
                        break;
                        //case "NOFILE":
                        //    break;
                }
            } else {
                if ($obj["APP_DOC_TYPE"] == "OUTPUT" &&
                                $tempTree["type"] == G::LoadTranslation("MIME_DES_FILE") &&
                                preg_match("/^.+&ext=(.+)&.+$/", $tempTree["downloadLink"], $arrayMatch)
                ) {
                    $ext = $arrayMatch[1];
                    $mimeInformation = getMime($obj["APP_DOC_FILENAME"] . ".$ext");

                    $tempTree["text"] = $obj["APP_DOC_FILENAME"] . ".$ext";
                    $tempTree["name"] = $obj["APP_DOC_FILENAME"] . ".$ext";
                    $tempTree["type"] = $mimeInformation["description"];
                    $tempTree["icon"] = $mimeInformation["icon"];
                }

                $processListTree[] = $tempTree;
            }

            $tempTree = array();
        }
    }

    if ((isset($_POST['option'])) && ($_POST['option'] == "gridDocuments")) {
        $processListTreeTemp["totalCount"] = $totalFolders + $totalDocuments;
        $processListTreeTemp['msg']='correct reload';
        $processListTreeTemp['items']=$processListTree;
        $processListTree = $processListTreeTemp;
    }

    echo G::json_encode($processListTree);
}

function openPMFolder()
{
    $WIDTH_PANEL = 350;
    $folderContent = $oPMFolder->getFolderList ($_POST ['folderID'] != '0' ?
        $_POST ['folderID'] == 'NA' ? "" : $_POST ['folderID'] : $rootFolder);
    //krumo($folderContent);
    if (! is_array ($folderContent)) {
        echo $folderContent;
        exit ();
    }

    $tree = new PmTree ();
    $tree->name = 'DMS';
    $tree->nodeType = "blank";

    //$tree->width="350px";
    $tree->value = '';
    $tree->showSign = false;

    $i = 0;
    foreach ($folderContent as $key => $obj) {
        $i ++;
        //if ($obj->item_type=="F") {

        $RowClass = ($i % 2 == 0) ? 'Row1' : 'Row2';
        $id_delete = G::LoadTranslation('ID_DELETE');
        $id_edit = G::LoadTranslation('ID_EDIT');

        $htmlGroup = <<<GHTML
        <table cellspacing='0' cellpadding='0' border='1' style='border:0px;' width="100%" class="pagedTable">
        <tr id="{$i}"  onmouseout="setRowClass(this, '{$RowClass}')" onmouseover="setRowClass(this, 'RowPointer')"
        class="{$RowClass}" style="cursor:hand">
        <td width='' class='treeNode' style='border:0px;background-color:transparent;'><a href="#"
        onclick="focusRow(this, 'Selected');openPMFolder('{$obj['FOLDER_UID']}','{$_POST['rootfolder']}');">
        <img src="/images/folderV2.gif" border = "0" valign="middle" />&nbsp;{$obj['FOLDER_NAME']}</a>
        <a href="#" onclick="deletePMFolder('{$obj['FOLDER_UID']}','{$_POST['rootfolder']}');">&nbsp; {$id_delete}</a>
        </td>
        </tr>
        </table>
        <div id="child_{$obj['FOLDER_UID']}"></div>
        GHTML;

        $ch = & $tree->addChild ($key, $htmlGroup, array ('nodeType' => 'child'));
        $ch->point = ' ';
        }
        $RowClass = ($i % 2 == 0) ? 'Row1' : 'Row2';
        $key = 0;
        if ($_POST ['folderID'] == '0') {
            $notInFolderLabel = G::LoadTranslation ('ID_NOT_IN_FOLDER');
            $htmlGroup = <<<GHTML
        <table cellspacing='0' cellpadding='0' border='1' style='border:0px;' width="100%" class="pagedTable">
        <tr id="{$i}" onclick="focusRow(this, 'Selected');openPMFolder('NA');"
        onmouseout="setRowClass(this, '{$RowClass}')" onmouseover="setRowClass(this, 'RowPointer')" class="{$RowClass}">
        <td width='' class='treeNode' style='border:0px;background-color:transparent;'><a href="#" onclick="">
        <img src="/images/folderV2.gif" border = "0" valign="middle" />&nbsp;- {$notInFolderLabel} -</a>&nbsp;</td>

        </tr>
        </table>
        <div id="child_NA"></div>
GHTML;

        $ch = & $tree->addChild ($key, $htmlGroup, array ('nodeType' => 'child'));
        $ch->point = ' ';
    }

    print ($tree->render ()) ;

}

function getPMFolderContent()
{
    $swSearch = false;

    if (isset ($_POST ['folderID'])) {
        //Render content of a folder
        $folderID = $_POST ['folderID'] != '0' ? $_POST ['folderID'] == 'NA' ? "" : $_POST ['folderID'] : $rootFolder;
        $folderContent = $oPMFolder->getFolderContent ($folderID);
    } else {
        // Perform a Search
        $swSearch = true;
        $folderContent = $oPMFolder->getFolderContent (null, array (), $_POST ['searchKeyword'], $_POST ['type']);
    }
    array_unshift ($folderContent, array ('id' => 'char'));
    if (! is_array ($folderContent)) {
        echo $folderContent;
        exit ();
    }

    $_DBArray ['PM_FOLDER_DOC'] = $folderContent;
    $_SESSION ['_DBArray'] = $_DBArray;

    $c = new Criteria ('dbarray');
    $c->setDBArrayTable ('PM_FOLDER_DOC');
    $c->addAscendingOrderByColumn ('id');
    $G_PUBLISH = new Publisher ();

    $labelFolderAddFile = "";
    $labelFolderAddFolder = "";
    if ($RBAC->userCanAccess ('PM_FOLDERS_ADD_FILE') == 1) {
        $labelFolderAddFile = G::LoadTranslation ('ID_ATTACH');
    }
    if ($RBAC->userCanAccess ('PM_FOLDERS_ADD_FOLDER') == 1) {
        $labelFolderAddFolder = G::LoadTranslation ('ID_NEW_FOLDER');
    }

    if (! $swSearch) {
        $G_PUBLISH->AddContent ('propeltable', 'paged-table', 'appFolder/appFolderDocumentList',
            $c, array ('folderID' => $_POST ['folderID'] != '0' ? $_POST ['folderID'] == 'NA' ?
            "/" : $_POST ['folderID'] : $rootFolder, 'labelFolderAddFile' => $labelFolderAddFile,
            'labelFolderAddFolder' => $labelFolderAddFolder));
        $G_PUBLISH->AddContent ('xmlform', 'xmlform', 'appFolder/appFolderDocumentListHeader', '',
            array (), 'appFolderList?folderID=' . $_POST ['folderID']);
    } else {
        $G_PUBLISH->AddContent ('propeltable', 'paged-table', 'appFolder/appFolderDocumentListSearch', $c, array ());
        $G_PUBLISH->AddContent ('xmlform', 'xmlform', 'appFolder/appFolderDocumentListHeader', '', array (),
            'appFolderList?folderID=/');
    }

    G::RenderPage ('publish', 'raw');
}

function getPMFolderTags()
{
    // Default font sizes
    $min_font_size = 12;
    $max_font_size = 30;

    $rootFolder = "/";
    $folderID = $_POST ['rootFolder'] != '0' ? $_POST ['rootFolder'] == 'NA' ? "" : $_POST ['rootFolder'] : $rootFolder;
    $tags = $oPMFolder->getFolderTags ($folderID);
    $minimum_count = 0;
    $maximum_count = 0;
    if ((is_array ($tags)) && (count ($tags) > 0)) {
        $minimum_count = min (array_values ($tags));
        $maximum_count = max (array_values ($tags));
    }
    $spread = $maximum_count - $minimum_count;

    if ($spread == 0) {
        $spread = 1;
    }

    $cloud_html = '';
    $cloud_tags = array (); // create an array to hold tag code
    foreach ($tags as $tag => $count) {
        $href = "#";
        //$href="?q="$tag;
        $size = $min_font_size + ($count - $minimum_count) * ($max_font_size - $min_font_size) / $spread;
        $cloud_tags [] = '<a style="font-size: ' . floor ($size) . 'px' . '" class="tag_cloud" href="' . $href .
            '" onClick="getPMFolderSearchResult(\'' . $tag . '\',\'TAG\')"' . ' title="\'' . $tag .
            '\' returned a count of ' . $count . '">' . htmlspecialchars (stripslashes ($tag)) . '</a>';
    }
    $cloud_html = join ("\n", $cloud_tags) . "\n";

    print "$cloud_html";

}

function uploadDocument()
{
    $uploadDocumentComponent=array();

    $uploadDocumentComponent["xtype"]= "tabpanel";
    $uploadDocumentComponent["stateId"]= "upload_tabpanel";
    $uploadDocumentComponent["activeTab"]= "uploadform";
    $uploadDocumentComponent["dialogtitle"]= G::LoadTranslation('ID_UPLOAD');
    $uploadDocumentComponent["stateful"]= true;

    $uploadDocumentComponent["stateEvents"]= array("tabchange");
    $uploadDocumentComponent["getState"]= "function_getState";
    $functionsToReplace['function_getState']="function() {
        return {
            activeTab:this.items.indexOf(this.getActiveTab())
        };
    }";
    $uploadDocumentComponent["listeners"]["resize"]["fn"]="function_listeners_resize";
    $functionsToReplace['function_listeners_resize'] = "function(panel) {
        panel.items.each(function(item) { item.setHeight(500);return true });
    }";
    $uploadDocumentComponent["items"]=array();

    $itemA=array();

    $itemA["xtype"]= "swfuploadpanel";
    $itemA["title"]= "flashupload";
    $itemA["height"]= "300";
    $itemA["id"]= "swfuploader";
    $itemA["viewConfig"]["forceFit"]=true;
    $itemA["listeners"]["allUploadsComplete"]["fn"]="function_listeners_allUploadsComplete";
    $functionsToReplace['function_listeners_allUploadsComplete'] = "function(panel) {
                                    datastore.reload();
                                    panel.destroy();
                                    Ext.getCmp('dialog').destroy();
                                    statusBarMessage('upload_completed', false, true);
                                }";

    // Uploader Params
    $itemA["upload_url"]= "../appFolder/appFolderAjax.php";
    $itemA["post_params"][session_name()]=session_id();
    $itemA["post_params"]["option"]="uploadFile";
    $itemA["post_params"]["action"]="upload";
    $itemA["post_params"]["dir"]="datastore.directory";
    $itemA["post_params"]["requestType"]="xmlhttprequest";
    $itemA["post_params"]["confirm"]="true";

    $itemA["flash_url"]="/scripts/extjs3-ext/ux.swfupload/swfupload.swf";
    $itemA["file_size_limit"]=get_max_file_size();
    // Custom Params
    $itemA["single_file_select"]=false; // Set to true if you only want to select one file from the FileDialog.
    $itemA["confirm_delete"]=false; // This will prompt for removing files from queue.
    $itemA["remove_completed"]=false; // Remove file from grid after uploaded.
    //$uploadDocumentComponent["items"][]=$itemA;

    //Standard Upload
    $itemA=array();
    $itemA["xtype"]="form";
    $itemA["autoScroll"]=true;
    $itemA["autoHeight"]=true;
    $itemA["id"]="uploadform";
    $itemA["fileUpload"]=true;
    $itemA["labelWidth"]="125";
    $itemA["url"]="URL_SCRIPT";
    $itemA["title"]=G::LoadTranslation('ID_UPLOAD');
    //$itemA["tooltip"]="Max File Size <strong>". ((get_max_file_size() / 1024) / 1024)." MB</strong><br />
    //Max Post Size<strong>". ((get_max_upload_limit() / 1024) / 1024)." MB</strong><br />";
    $itemA["frame"]=true;
    $itemA["items"]=array();
    $itemB=array();

    $itemB["xtype"]="displayfield";
    $itemB["value"]="Max File Size <strong>". ((get_max_file_size() / 1024) / 1024)." MB</strong><br />
    Max Post Size<strong>". ((get_max_upload_limit() / 1024) / 1024)." MB</strong><br />";
    //$itemA["items"][]=$itemB;

    for ($i=0; $i<7; $i++) {
        $itemB=array();

        $itemB["xtype"]="fileuploadfield";
        $itemB["fieldLabel"]="File ".($i+1);
        $itemB["id"]="uploadedFile[$i]";
        $itemB["name"]="uploadedFile[$i]";
        $itemB["width"]=275;
        $itemB["buttonOnly"]= false;
        $itemA["items"][]=$itemB;
    }

    $itemB=array();

    $itemB["xtype"]="checkbox";
    $itemB["fieldLabel"]="Overwrite";//G::LoadTranslation('ID_OVERWRITE');
    $itemB["name"]="overwrite_files";
    $itemB["checked"]=true;
    $itemA["items"][]=$itemB;

    $itemA["buttons"]=array();

    $buttonA=array();
    $buttonA["text"]=G::LoadTranslation('ID_SAVE');
    $buttonA["handler"]="function_standardupload_btnsave";
    $functionsToReplace["function_standardupload_btnsave"]=' function() {
                statusBarMessage("'.G::LoadTranslation('ID_UPLOADING_FILE').'", true, true);
                form = Ext.getCmp("uploadform").getForm();

                //Ext.getCmp("uploadform").getForm().submit();
                //console.log(form);
                //console.log(form.url);
                Ext.getCmp("uploadform").getForm().submit({
                    //reset: true,
                    reset: false,
                    waitTitle : "&nbsp;",
                    success: function(form, action) {

                        datastore.reload();
                        statusBarMessage(action.result.message, false, true);
                        Ext.getCmp("dialog").destroy();
                    },
                    failure: function(form, action) {

                        if(!action.result) return;
                        Ext.MessageBox.alert("error", action.result.error);
                        statusBarMessage(action.result.error, false, false);
                    },
                    scope: Ext.getCmp("uploadform"),
                    // add some vars to the request, similar to hidden fields
                    params: {
                        option: "standardupload",
                        action: "uploadExternalDocument",
                        dir: datastore.directory,
                        requestType: "xmlhttprequest",
                        confirm: "true",
                        docUid: "-1",
                        appId: "00000000000000000000000000000000"
                    }
                });
            }';

    $itemA["buttons"][]=$buttonA;

    $buttonA=array();

    $buttonA["text"]= G::LoadTranslation('ID_CANCEL');
    $buttonA["handler"]="function_standardupload_btncancel";
    $functionsToReplace["function_standardupload_btncancel"]=' function() { Ext.getCmp("dialog").destroy(); }';
    $itemA["buttons"][]=$buttonA;

    $uploadDocumentComponent["items"][]=$itemA;

    $itemA=array();

    $itemA["xtype"]="form";
    $itemA["id"]="transferform";
    $itemA["url"]="../appFolder/appFolderAjax.php";
    $itemA["hidden"]="true";
    $itemA["title"]="acttransfer";
    $itemA["autoHeight"]="true";
    $itemA["labelWidth"]=225;
    $itemA["frame"]= true;
    $itemA["items"]=array();


    for ($i=0; $i<7; $i++) {
        $itemB=array();
        $itemB["xtype"]= "textfield";
        $itemB["fieldLabel"]= "url_to_file";
        $itemB["name"]= "userfile[$i]";
        $itemB["width"]=275;
        $itemA["items"][]=$itemB;
    }
    $itemB=array();
    $itemB["xtype"]="checkbox";
    $itemB["fieldLabel"]="overwrite_files";
    $itemB["name"]="overwrite_files";
    $itemB["checked"]=true;
    $itemA["items"][]=$itemB;

    $itemA["buttons"]=array();

    $buttonA=array();

    $buttonA["text"]="btnsave";
    $buttonA["handler"]="function_transfer_btnsave";
    $functionsToReplace["function_transfer_btnsave"]='function() {
                statusBarMessage("transfer_processing", true, true);
                transfer = Ext.getCmp("transferform").getForm();
                transfer.submit({
                    //reset: true,
                    reset: false,
                    success: function(form, action) {
                        datastore.reload();
                        statusBarMessage(action.result.message, false, true);
                        Ext.getCmp("dialog").destroy();
                    },
                    failure: function(form, action) {
                        if(!action.result) return;
                        Ext.MessageBox.alert("error", action.result.error);
                        statusBarMessage(action.result.error, false, false);
                    },
                    scope: transfer,
                    // add some vars to the request, similar to hidden fields
                    params: {
                        "option": "com_extplorer",
                        "action": "transfer",
                        "dir": datastore.directory,
                        "confirm": "true"
                    }
                });
            }';

    $itemA["buttons"]=$buttonA;

    $buttonA=array();
    $buttonA["text"]="btncancel";
    $buttonA["handler"]="function_transfer_btncancel";
    $functionsToReplace["function_transfer_btncancel"]='function() { Ext.getCmp("dialog").destroy(); }';
    $itemA["buttons"]=$buttonA;

    //         $uploadDocumentComponent["items"][]=$itemA;

    $finalResponse=G::json_encode($uploadDocumentComponent);
    $finalResponse=str_replace("URL_SCRIPT","../appFolder/appFolderAjax.php",$finalResponse);
    foreach ($functionsToReplace as $key => $originalFunction) {
        $finalResponse=str_replace('"'.$key.'"',$originalFunction,$finalResponse);
    }
    echo ($finalResponse);
}
function copyAction()
{
    copyMoveAction("copy");
}
function moveAction()
{
    copyMoveAction("move");
}

function findChilds($uidFolder, $path, $arrayPath)
{
    $Criteria = new Criteria ();
    $Criteria->addSelectColumn ( AppFolderPeer::FOLDER_UID );
    $Criteria->addSelectColumn ( AppFolderPeer::FOLDER_PARENT_UID );
    $Criteria->addSelectColumn ( AppFolderPeer::FOLDER_NAME );
    $Criteria->addSelectColumn ( AppFolderPeer::FOLDER_CREATE_DATE );
    $Criteria->addSelectColumn ( AppFolderPeer::FOLDER_UPDATE_DATE );

    $Criteria->add(AppFolderPeer::FOLDER_PARENT_UID, $uidFolder);
    $Criteria->addAscendingOrderByColumn(AppFolderPeer::FOLDER_NAME);

    $rs = appFolderPeer::doSelectRS ( $Criteria );
    $rs->setFetchmode ( ResultSet::FETCHMODE_ASSOC );

    $folderResult = array ();
    $appFoder = new AppFolder ();
    while ($rs->next()) {
        $row = $rs->getRow();
        $path = ($uidFolder != '/')? $path : '';
        $path = $path."/".$row['FOLDER_NAME'];
        $arrayPath[] = array($row['FOLDER_UID'],$path);
        $arrayPath = findChilds($row['FOLDER_UID'], $path, $arrayPath);
    }
    return $arrayPath;
}
function copyMoveAction($type)
{
    $oPMFolder = new AppFolder ();

    $dir=$_REQUEST['dir'];
    $paths = array();
    $folderResult = findChilds('/', '', $paths);
    $withCombo = 30;
    $folderSelected = $oPMFolder->load($dir);

    $root = array("/","/");
    array_unshift ($folderResult, $root);
    $folderResultSel = array();
    foreach ($folderResult as $key => $value) {
        $count = strlen($value[1]);
        $withCombo = ($count>$withCombo) ? $count : $withCombo;
        if ($folderSelected['FOLDER_PARENT_UID'] != $value[0] && $dir != $value[0]) {
            $folderResultSel[] = $value;
        }
    }

    $dirCompletePath=$oPMFolder->getFolderStructure($dir);
    $copyDialog["xtype"]        = "form";
    $copyDialog["id"]           = "simpleform";
    $copyDialog["labelWidth"]   = 80;
    $copyDialog["width"]        = 500;
    $copyDialog["modal"]        = true;
    $copyDialog["url"]          = "URL_SCRIPT";
    if ($type=="copy") {
        $copyDialog["dialogtitle"]= G::LoadTranslation('ID_COPY');
    } else {
        $copyDialog["dialogtitle"]= G::LoadTranslation('ID_MOVE');
    }

    $copyDialog["frame"]= true;
    $copyDialog["items"]=array();

    $itemField=array();
    $itemField["xtype"]         = "combo";
    $itemField["hiddenName"]    = "new_dir";
    $itemField["id"]            = "new_dir_label";
    $itemField["name"]          = "new_dir_label";
    $itemField["mode"]          = "local";
    $itemField["triggerAction"] = "all";
    $itemField["store"]         = $folderResultSel;
    $itemField["valueField"]    = "FOLDER_UID";
    $itemField["editable"]    = false;
    $itemField["displayField"]  = "FOLDER_NAME";
    $itemField["selectOnFocus"] = true;
    $itemField["tpl"]           = '<tpl for="."><div ext:qtip="{field2}" class="x-combo-list-item">{field2}</div></tpl>';
    $itemField["fieldLabel"]    = G::LoadTranslation('ID_DESTINATION');
    $itemField["emptyText"]     = G::LoadTranslation('ID_SELECT_DIRECTORY');
    $itemField["width"] = 390;
    $itemField["allowBlank"]=false;
    $copyDialog["items"][]=$itemField;

    $itemField=array();
    $itemField["xtype"]="hidden";
    $itemField["fieldLabel"]="copyMove";
    $itemField["name"]="copyMove";
    $itemField["value"]="all";
    $itemField["width"]=175;
    $itemField["allowBlank"]=false;
    $copyDialog["items"][]=$itemField;

    $copyDialog["buttons"]=array();

    $itemButton=array();
    if ($type == "copy") {
        $itemButton["text"]= G::LoadTranslation('ID_COPY');
    } else {
        $itemButton["text"]= G::LoadTranslation('ID_MOVE');
    }
    $itemButton["handler"]="copyDialogCreateButtonFunction";
    $itemButton["id"]="buttonCopy";
    $functionsToReplace["copyDialogCreateButtonFunction"]="function() {
        form =  Ext.getCmp('simpleform').getForm();
        var requestParams = getRequestParams();
        requestParams.confirm = 'true';
        if (Ext.getCmp('new_dir_label').getValue() == '') {
            statusBarMessage('Select a Directory', false, false);
            return false;
        }
        requestParams.new_dir = Ext.getCmp('new_dir_label').getValue()
        statusBarMessage('Please wait...', true, true);
        Ext.getCmp('new_dir_label').disable();
        Ext.getCmp('buttonCopy').disable();
        Ext.getCmp('buttonCancel').disable();
        requestParams.action  = '".$type."Execute';
        form.submit({
            reset: false,
            success: function(form, action) {
                if(action.result.success){
                    if(action.result.success=='success'){
                        statusBarMessage(action.result.message, false, true);
                        var node = dirTree.getNodeById('root');
                        node.select();
                        datastore.directory = 'root';
                        datastore.reload();
                        dirTree.getRootNode().reload();
                        requestParams.dir = 'root';
                        Ext.getCmp('dialog').destroy();
                    }else{
                        statusBarMessage(action.result.message, false, false);
                    }
                }else{
                    if(!action.result) return;
                    Ext.MessageBox.alert('Error!', action.result.error);
                    statusBarMessage(action.result.error, false, false);
                }
            },
            failure: function(form, action) {
                if(!action.result) return;
                Ext.MessageBox.alert('Error!', action.result.error);
                statusBarMessage(action.result.error, false, false);
            },
            scope: form,
            // add some vars to the request, similar to hidden fields
            params: requestParams
        });
    }";
    $copyDialog["buttons"][]=$itemButton;

    $itemButton=array();
    $itemButton["text"]=G::LoadTranslation('ID_CANCEL');
    $itemButton["id"]="buttonCancel";
    $itemButton["handler"]= "copyDialogCancelButtonFunction";
    $functionsToReplace["copyDialogCancelButtonFunction"]="function() { Ext.getCmp('dialog').destroy(); }";
    $copyDialog["buttons"][]=$itemButton;

    $finalResponse=G::json_encode($copyDialog);
    foreach ($functionsToReplace as $key => $originalFunction) {
        $finalResponse=str_replace('"'.$key.'"',$originalFunction,$finalResponse);
    }
    $finalResponse=str_replace("URL_SCRIPT","../appFolder/appFolderAjax.php",$finalResponse);
    echo ($finalResponse);
}

function copyExecute()
{
    copyMoveExecute("copy");
}

function moveExecute()
{
    copyMoveExecute("move");
}

function copyMoveExecute($type)
{
    uploadExternalDocument();
}

function documentVersionHistory()
{
    $folderID = $_POST ['folderID'] != '0' ? $_POST ['folderID'] == 'NA' ? "" : $_POST ['folderID'] : $rootFolder;
    $folderContent = $oPMFolder->getFolderContent ($folderID, array ($_POST ['appDocId']));

    array_unshift ($folderContent, array ('id' => 'char'));
    if (! is_array ($folderContent)) {
        echo $folderContent;
        exit ();
    }

    $_DBArray ['PM_FOLDER_DOC_HISTORY'] = $folderContent;
    $_SESSION ['_DBArray'] = $_DBArray;

    $c = new Criteria ('dbarray');
    $c->setDBArrayTable ('PM_FOLDER_DOC_HISTORY');
    $c->addAscendingOrderByColumn ('id');
    $G_PUBLISH = new Publisher ();

    $G_PUBLISH->AddContent ('propeltable', 'paged-table', 'appFolder/appFolderDocumentListHistory', $c,
        array ('folderID' => $_POST ['folderID'] != '0' ? $_POST ['folderID'] == 'NA' ?
        "/" : $_POST ['folderID'] : $rootFolder));

    G::RenderPage ('publish', 'raw');
}

function overwriteFile($node, $fileName)
{
    global $RBAC;

    $appDocument = new AppDocument();
    $pMFolder = new AppFolder();
    $user = ($RBAC->userCanAccess('PM_ALLCASES') == 1) ? '' : $_SESSION['USER_LOGGED'];
    $folderContentObj = $pMFolder->getFolderContent ($node, array(), null, null, '', '', $user);
    foreach ($folderContentObj['documents'] as $key => $value) {
        if ($folderContentObj['documents'][$key]['APP_DOC_FILENAME'] == $fileName) {
            $appDocument->remove(trim($folderContentObj['documents'][$key]['APP_DOC_UID']), $folderContentObj['documents'][$key]['DOC_VERSION']);
        }
    }
}


function copyMoveExecuteTree($uidFolder, $newUidFolder)
{
    $appFoder = new AppFolder ();
    $folderContent = $appFoder->getFolderContent($uidFolder);
    $folderOrigin = $appFoder->getFolderStructure($uidFolder);

    if ($newUidFolder == $folderOrigin[$uidFolder]['PARENT'] && $_REQUEST['action'] == 'moveExecute') {
        return $uidFolder;
    }

    $FolderParentUid = trim($newUidFolder);//$form['FOLDER_PARENT_UID'];
    $FolderName = $folderOrigin[$uidFolder]['NAME'];
    $newFolderContent = $appFoder->createFolder ($FolderName, $FolderParentUid, "new");

    $appDocument = new AppDocument();
    if ($_REQUEST['action'] == 'moveExecute') {
        $appFoder->remove($uidFolder,$folderOrigin[$uidFolder]['PARENT']);
    }
    $action = $_REQUEST['action'];
    foreach ($folderContent['documents'] as $keys => $value) {
        $docInfo = $appDocument->load($value['APP_DOC_UID'],$value['DOC_VERSION']);
        $docInfo['FOLDER_UID'] = $newFolderContent['folderUID'];
        $docInfo['APP_DOC_CREATE_DATE'] = date('Y-m-d H:i:s');
        $docInfo['APP_DOC_STATUS'] = 'ACTIVE';
        if ($action == 'copyExecute') {
            $path = PATH_DOCUMENT . G::getPathFromUID($docInfo["APP_UID"]) . PATH_SEP;

            $arrayInfo = pathinfo($docInfo["APP_DOC_FILENAME"]);
            $extension = (isset($arrayInfo["extension"])? $arrayInfo["extension"] : "");

            $arrayPathFromFile = G::getPathFromFileUID($docInfo["APP_UID"], $docInfo["APP_DOC_UID"]);
            $originFile = $arrayPathFromFile[0] . PATH_SEP . $arrayPathFromFile[1] . "_" . $docInfo["DOC_VERSION"] . "." . $extension;

            //Create Document
            unset($docInfo['APP_DOC_UID']);

            $docUid = $appDocument->create($docInfo);

            //Copy file
            $arrayPathFromFile = G::getPathFromFileUID($docInfo["APP_UID"], $docUid);
            $newFile = $arrayPathFromFile[0] . PATH_SEP . $arrayPathFromFile[1] . "_" . $docInfo["DOC_VERSION"] . "." . $extension;

            if(!file_exists($path . $arrayPathFromFile[0])) {
                mkdir( $path . $arrayPathFromFile[0], 0777, true );
            }

            copy($path . $originFile, $path . $newFile);
        } else {
            $appDocument->update($docInfo);
        }
    }
    return $newFolderContent['folderUID'];
}

function checkTree ($uidOriginFolder, $uidNewFolder)
{
    $appFoder = new AppFolder ();
    $newFoldercontent = copyMoveExecuteTree($uidOriginFolder, $uidNewFolder);
    $listfolder = $appFoder->getFolderList($uidOriginFolder);

    if (count($listfolder)>0) {
        foreach ($listfolder['folders'] as $key => $value) {
            checkTree($value["FOLDER_UID"], $newFoldercontent);
        }
    } else {
        return;
    }
}

function uploadExternalDocument()
{
    $response['action']=$_POST['action']. " - ".$_POST['option'];
    $response['error']="error";
    $response['message']="error";
    $response['success']=false;
    $overwrite = (isset($_REQUEST['overwrite_files'])) ? $_REQUEST['overwrite_files'] : false;
    if (isset($_POST["confirm"]) && $_POST["confirm"] == "true") {
        if (isset($_FILES['uploadedFile'])) {
            $uploadedInstances=count($_FILES['uploadedFile']['name']);
            $sw_error=false;
            $sw_error_exists=isset($_FILES['uploadedFile']['error']);
            $emptyInstances=0;
            $quequeUpload=array();
            //overwrite files
            if ($overwrite) {
                for ($i=0; $i<$uploadedInstances; $i++) {
                    overwriteFile($_REQUEST['dir'], stripslashes($_FILES['uploadedFile']['name'][$i]));
                }
            }
            // upload files & check for errors
            for ($i=0; $i<$uploadedInstances; $i++) {
                $errors[$i] = null;
                $tmp = $_FILES['uploadedFile']['tmp_name'][$i];
                $items[$i] = stripslashes($_FILES['uploadedFile']['name'][$i]);
                if ($sw_error_exists) {
                    $up_err = $_FILES['uploadedFile']['error'][$i];
                } else {
                    $up_err=(file_exists($tmp)?0:4);
                }
                if ($items[$i]=="" || $up_err==4) {
                    $emptyInstances++;
                    continue;
                }
                if ($up_err==1 || $up_err==2) {
                    $errors[$i]='miscfilesize';
                    $sw_error = true;
                    continue;
                }
                if ($up_err==3) {
                    $errors[$i]='miscfilepart';
                    $sw_error=true;
                    continue;
                }
                if (!@is_uploaded_file($tmp)) {
                    $errors[$i]='uploadfile';
                    $sw_error=true;
                    continue;
                }
                //The uplaoded files seems to be correct and ready to be uploaded. Add to the Queque
                $fileInfo=array("tempName"=>$tmp,"fileName"=>$items[$i]);
                $quequeUpload[]=$fileInfo;
            }
        } elseif (isset($_POST['selitems'])) {
            $response="";
            $response['msg']= "correct reload";
            $response['success']=true;
            if (isset($_REQUEST['option']) && isset($_REQUEST['copyMove'])) {
                if ($_REQUEST['option'] == 'directory' && $_REQUEST['copyMove'] == 'all') {
                    $response['action'] = $_POST['action']. " - ".$_POST['option'];
                    $response['error']  = "Complete";
                    $response['message']= str_replace("Execute", "", $_POST['action']). " ". "Complete";
                    $response['success']= 'success';
                    $response['node']   = '';
                    $_POST ['node']     = "";
                    $newFolderUid = checkTree($_REQUEST['dir'], ($_REQUEST['new_dir'] == 'root')? '/' : $_REQUEST['new_dir']);
                }
                $_POST['selitems'] = array();
            } else {
                $oAppDocument = new AppDocument();
                if (isset($_POST['selitems']) && is_array($_POST['selitems'])) {
                    foreach ($_POST['selitems'] as $docId) {
                        $arrayDocId = explode ('_',$docId);
                        $docInfo=$oAppDocument->load($arrayDocId[0]);
                        $docInfo['FOLDER_UID'] =  $_POST['new_dir'];
                        $docInfo['APP_DOC_CREATE_DATE'] = date('Y-m-d H:i:s');
                        $oAppDocument->update($docInfo);
                    }
                }
            }
        }
        //G::pr($quequeUpload);

        //Read. Instance Document classes
        if (!empty($quequeUpload)) {
            foreach ($quequeUpload as $key => $fileObj) {
                $extension = pathinfo($fileObj['fileName'], PATHINFO_EXTENSION);
                if (\Bootstrap::getDisablePhpUploadExecution() === 1 && $extension === 'php') {
                    $message = \G::LoadTranslation('THE_UPLOAD_OF_PHP_FILES_WAS_DISABLED');
                    \Bootstrap::registerMonologPhpUploadExecution('phpUpload', 550, $message, $fileObj['fileName']);
                    $response['error'] = $message;
                    $response['message'] = $message;
                    $response['success'] = false;
                    print_r(G::json_encode($response));
                    exit();
                }
            }
            $docUid=$_POST['docUid'];
            $appDocUid=isset($_POST['APP_DOC_UID'])?$_POST['APP_DOC_UID']:"";
            $docVersion=isset($_POST['docVersion'])?$_POST['docVersion']:"";
            $actionType=isset($_POST['actionType'])?$_POST['actionType']:"";
            $folderId=$_POST['dir']==""?"/":$_POST['dir'];
            $appId=$_POST['appId'];
            $docType=isset($_POST['docType'])?$_GET['docType']:"INPUT";
            //save info

            $oInputDocument = new InputDocument();
            if ($docUid != -1) {
                $aID = $oInputDocument->load($docUid);
            } else {
                $oFolder=new AppFolder();
                $folderStructure=$oFolder->getFolderStructure($folderId);
                $aID=array('INP_DOC_DESTINATION_PATH'=>$folderStructure['PATH']);
            }



            //Get the Custom Folder ID (create if necessary)
            $oFolder=new AppFolder();
            if ($docUid!=-1) {
                //krumo("jhl");
                $folderId=$oFolder->createFromPath($aID['INP_DOC_DESTINATION_PATH'],$appId);
                //Tags
                $fileTags=$oFolder->parseTags($aID['INP_DOC_TAGS'],$appId);
            } else {
                $folderId=$folderId;
                $fileTags="EXTERNAL";
            }
            foreach ($quequeUpload as $key => $fileObj) {
                $oAppDocument = new AppDocument();
                switch ($actionType) {
                    case "R":
                        //replace
                        $aFields = array(
                            'APP_DOC_UID'           => $appDocUid,
                            'APP_UID'               => $appId,
                            'DOC_VERSION'           => $docVersion,
                            'DEL_INDEX'             => 1,
                            'USR_UID'               => $_SESSION['USER_LOGGED'],
                            'DOC_UID'               => $docUid,
                            'APP_DOC_TYPE'          => $docType,
                            'APP_DOC_CREATE_DATE'   => date('Y-m-d H:i:s'),
                            'APP_DOC_COMMENT'       => isset($_POST['form']['APP_DOC_COMMENT']) ?
                                $_POST['form']['APP_DOC_COMMENT'] : '',
                            'APP_DOC_TITLE'         => '',
                            'APP_DOC_FILENAME'      => $fileObj['fileName'],
                            'FOLDER_UID'            => $folderId,
                            'APP_DOC_TAGS'          => $fileTags
                        );
                        $oAppDocument->update($aFields);
                        break;
                    case "NV":
                        //New Version
                        $aFields = array(
                            'APP_DOC_UID'           => $appDocUid,
                            'APP_UID'               => $appId,
                            'DEL_INDEX'             => 1,
                            'USR_UID'               => $_SESSION['USER_LOGGED'],
                            'DOC_UID'               => $docUid,
                            'APP_DOC_TYPE'          => $docType,
                            'APP_DOC_CREATE_DATE'   => date('Y-m-d H:i:s'),
                            'APP_DOC_COMMENT'       => isset($_POST['form']['APP_DOC_COMMENT']) ?
                                $_POST['form']['APP_DOC_COMMENT'] : '',
                            'APP_DOC_TITLE'         => '',
                            'APP_DOC_FILENAME'      => $fileObj['fileName'],
                            'FOLDER_UID'            => $folderId,
                            'APP_DOC_TAGS'          => $fileTags
                        );
                        $oAppDocument->create($aFields);
                        break;
                    default:
                        //New
                        $aFields = array(
                            'APP_UID'               => $appId,
                            'DEL_INDEX'             => isset($_SESSION['INDEX'])?$_SESSION['INDEX']:1,
                            'USR_UID'               => $_SESSION['USER_LOGGED'],
                            'DOC_UID'               => $docUid,
                            'APP_DOC_TYPE'          => $docType,
                            'APP_DOC_CREATE_DATE'   => date('Y-m-d H:i:s'),
                            'APP_DOC_COMMENT'       => isset($_POST['form']['APP_DOC_COMMENT']) ?
                                $_POST['form']['APP_DOC_COMMENT'] : '',
                            'APP_DOC_TITLE'         => '',
                            'APP_DOC_FILENAME'      => $fileObj['fileName'],
                            'FOLDER_UID'            => $folderId,
                            'APP_DOC_TAGS'          => $fileTags
                        );
                        $oAppDocument->create($aFields);
                        break;
                }
                $sAppDocUid = $oAppDocument->getAppDocUid();
                $iDocVersion = $oAppDocument->getDocVersion();

                $info = pathinfo($oAppDocument->getAppDocFilename());
                $ext = (isset($info['extension']) ? $info['extension'] : '');
                //save the file
                //if (!empty($_FILES['form'])) {
                //if ($_FILES['form']['error']['APP_DOC_FILENAME'] == 0) {
                $sPathName = PATH_DOCUMENT . G::getPathFromUID($appId) . PATH_SEP;
                $file = G::getPathFromFileUID($appId, $sAppDocUid);
                $sPathName .= $file[0];
                $sFileName = $file[1] . "_" . $iDocVersion . '.' . $ext;

                G::uploadFile($fileObj['tempName'], $sPathName, $sFileName); //upload

                //Plugin Hook PM_UPLOAD_DOCUMENT for upload document
                $oPluginRegistry = PluginRegistry::loadSingleton();
                if ($oPluginRegistry->existsTrigger (PM_UPLOAD_DOCUMENT) && class_exists ('uploadDocumentData')) {
                    $oData['APP_UID']   = $appId;
                    $documentData = new uploadDocumentData (
                        $appId,
                        $_SESSION['USER_LOGGED'],
                        $sPathName . $sFileName,
                        $fileObj['fileName'],
                        $sAppDocUid
                    );
                    //$oPluginRegistry->executeTriggers (PM_UPLOAD_DOCUMENT , $documentData);
                    //unlink ($sPathName . $sFileName);
                }
                //end plugin
                if ($sw_error) {
                    // there were errors
                    $err_msg="";
                    for ($i=0; $i<$uploadedInstances; $i++) {
                        if ($errors[$i]==null) {
                            continue;
                        }
                        $err_msg .= $items[$i]." : ".$errors[$i]."\n";
                    }
                    $response['error']=$err_msg;
                    $response['message']=$err_msg;
                    $response['success']=false;
                } elseif ($emptyInstances==$uploadedInstances) {
                    $response['error']= G::LoadTranslation('ID_UPLOAD_LEAST_FILE');
                    $response['message']= G::LoadTranslation('ID_UPLOAD_LEAST_FILE');
                    $response['success']=false;
                } else {
                    $response['error']= G::LoadTranslation('ID_UPLOAD_COMPLETE');
                    $response['message']="Upload complete";
                    $response['success']=true;
                }
            }
        }
    }
    print_r(G::json_encode($response));
}

function newFolder()
{
    $oPMFolder = new AppFolder ();
    //G::pr($_POST);
    if ($_POST ['dir']=="") {
        $_POST ['dir']="/";
    }
    if ($_POST ['dir']=="root") {
        $_POST ['dir']="/";
    }
    $folderStructure = $oPMFolder->getFolderStructure ($_POST ['dir']);
    //G::pr($folderStructure);
    $folderPath = $folderStructure ['PATH'];
    $parentUid = $_POST ['dir'];
    $folderUid = G::GenerateUniqueID ();

    $formNewFolder=array();

    $formNewFolder["xtype"]="form";
    $formNewFolder["id"]= "simpleform";
    $formNewFolder["labelWidth"]=125;
    $formNewFolder["url"]="../appFolder/appFolderAjax.php";
    $formNewFolder["dialogtitle"]= G::LoadTranslation('ID_CREATE_FOLDER');
    $formNewFolder["frame"]= true;
    $formNewFolder["items"]= array();

    $field=array();
    $field["xtype"]= "label";
    $field["fieldLabel"]= G::LoadTranslation('ID_CREATE_FOLDER_PATH_FOLDER');
    $field["name"]= "form[FOLDER_PATH]";
    $field["id"]= "form[FOLDER_PATH]";
    $field["width"]=175;
    $field["allowBlank"]=false;
    $field["value"]=$folderPath;
    $field["text"]=$folderPath;
    $formNewFolder["items"][]= $field;

    $field=array();
    $field["xtype"]= "hidden";
    $field["fieldLabel"]= "Uid";
    $field["name"]= "form[FOLDER_UID]";
    $field["id"]= "form[FOLDER_UID]";
    $field["width"]=175;
    $field["allowBlank"]=false;
    $field["value"]=$folderUid;
    $formNewFolder["items"][]= $field;

    $field=array();
    $field["xtype"]= "hidden";
    $field["fieldLabel"]= "Parent";
    $field["name"]= "form[FOLDER_PARENT_UID]";
    $field["id"]= "form[FOLDER_PARENT_UID]";
    $field["width"]=175;
    $field["allowBlank"]=false;
    $field["value"]=$parentUid;
    $formNewFolder["items"][]= $field;

    $field=array();
    $field["xtype"]= "textfield";
    $field["fieldLabel"]= G::LoadTranslation('ID_CREATE_FOLDER_NAME_FOLDER');
    $field["name"]= "form[FOLDER_NAME]";
    $field["id"]= "form[FOLDER_NAME]";
    $field["width"]=175;
    $field["allowBlank"]=false;
    $formNewFolder["items"][]= $field;

    $formNewFolder["buttons"]= array();

    $button                     = array();
    $button["text"]             = G::LoadTranslation('ID_CREATE');
    $button["handler"]          = 'handlerCreate';
    $formNewFolder["buttons"][] = $button;

    $button=array();
    $button["text"]= G::LoadTranslation('ID_CANCEL');
    $button["handler"]= 'handlerCancel';
    $formNewFolder["buttons"][]= $button;

    $handlerCreate='function() {
                statusBarMessage("Please wait...", true,true);
                Ext.getCmp("simpleform").getForm().submit({
                    //reset: true,
                    reset: false,
                    waitTitle : "&nbsp;",
                    success: function(form, action) {
                        statusBarMessage(action.result.message, false, true);
                        try{
                            dirTree.getSelectionModel().getSelectedNode().reload();
                        } catch(e) {}
                        datastore.reload();
                        Ext.getCmp("dialog").destroy();
                    },
                    failure: function(form, action) {
                        if(!action.result) return;
                        Ext.Msg.alert("Error!", action.result.error);
                        statusBarMessage(action.result.error, false, false);
                    },
                    scope: Ext.getCmp("simpleform"),
                    // add some vars to the request, similar to hidden fields
                    params: {option: "new",
                            action: "appFolderSave",
                            dir: datastore.directory,
                            confirm: "true"}
                })
            }';

    $handlerCancel='function() { Ext.getCmp("dialog").destroy(); }';

    $response=G::json_encode($formNewFolder);
    //This will add the functions to the Json response without quotes!
    $response=str_replace('"handlerCreate"',$handlerCreate,$response);
    $response=str_replace('"handlerCancel"',$handlerCancel,$response);
    print_r($response);

}

function appFolderSave()
{
    $oPMFolder = new AppFolder ();
    $form = $_POST['form'];
    $FolderUid = $form['FOLDER_UID'];
    $FolderParentUid = $form['FOLDER_PARENT_UID'];
    $FolderName = $form['FOLDER_NAME'];
    $FolderCreateDate = 'now';
    $FolderUpdateDate = 'now';
    $response['action']=$_POST['action']. " - ".$_POST['option'];
    $response['error']="error";
    $response['message']="error";
    $response['success']=false;
    $folderCreateResponse = $oPMFolder->createFolder ($FolderName, $FolderParentUid, "new");

    $response=array_merge($response,$folderCreateResponse);

    print_r(G::json_encode($response));
}

function documentInfo()
{
    $oFolder = new AppFolder ();
    $Fields = $oPMFolder->getCompleteDocumentInfo ($_POST ['appId'], $_POST ['appDocId'], $_POST ['docVersion'],
        $_POST ['docID'], $_POST ['usrUid']);
    $G_PUBLISH = new Publisher ();

    $G_PUBLISH->AddContent ('xmlform', 'xmlform', 'appFolder/appFolderDocumentInfo', '', $Fields, '');
    G::RenderPage ('publish', 'raw');
}

function documentdelete()
{
    include_once ("classes/model/AppDocument.php");
    $oAppDocument = new AppDocument ();
    $oAppDocument->remove($_POST['sFileUID'],$_POST['docVersion']);
    /*we need to delete fisicaly the file use the follow code
     $appId= "00000000000000000000000000000000";
     $sPathName = PATH_DOCUMENT . $appId . PATH_SEP;
     unlink($sPathName.$_POST['sFileUID'].'_1.jpg');*/
}

function deletePMFolder()
{
    include_once ("classes/model/AppFolder.php");
    $oAppFoder = new AppFolder ();
    $oAppFoder->remove($_POST['sFileUID'],$_POST['rootfolder']);

}

function getMime($fileName)
{
    $fileName=basename($fileName);
    $fileNameA=explode(".",$fileName);
    $return['description']=G::LoadTranslation("MIME_DES_FILE");
    $return['icon']="/images/documents/extension/document.png";
    if (count($fileNameA)>1) {
        $extension=$fileNameA[count($fileNameA)-1];
        if (file_exists(PATH_HTML."images/documents/extension/".strtolower($extension).".png")) {
            $return['description']=G::LoadTranslation("MIME_DES_".strtoupper($extension));
            $return['icon']="/images/documents/extension/".strtolower($extension).".png";
        }
    }
    return $return;
}

function get_max_file_size()
{
    // get php max_upload_file_size
    return calc_php_setting_bytes(ini_get("upload_max_filesize"));
}

function get_max_upload_limit()
{
    return calc_php_setting_bytes(ini_get('post_max_size'));
}

function calc_php_setting_bytes($value)
{
    //if(@eregi("G$",$value)) {
    //    $value = substr($value,0,-1);
    //    $value = round($value*1073741824);
    //} elseif (@eregi("M$",$value)) {
    //    $value = substr($value,0,-1);
    //    $value = round($value*1048576);
    //} elseif (@eregi("K$",$value)) {
    //    $value = substr($value,0,-1);
    //    $value = round($value*1024);
    //}
    if (@preg_match("/G$/i", $value)) {
        $value = substr($value, 0, -1);
        $value = round($value * 1073741824);
    } else {
        if (@preg_match("/M$/i", $value)) {
            $value = substr($value, 0, -1);
            $value = round($value * 1048576);
        } else {
            if (@preg_match("/K$/i", $value)) {
                $value = substr($value, 0, -1);
                $value = round($value * 1024);
            }
        }
    }
    return $value;
}

function get_abs_item($dir, $item)
{
    // get absolute file+path
    if (is_array($item)) {
        // FTP Mode
        $abs_item = '/' . get_abs_dir($dir)."/".$item['name'];
        if (get_is_dir($item)) {
            $abs_item.='/';
        }
        return extPathName($abs_item);
    }
    return extPathName(get_abs_dir($dir)."/".$item);
}

function extPathName($p_path, $p_addtrailingslash = false)
{
    $retval = "";

    $isWin = (substr(PHP_OS, 0, 3) == 'WIN');

    if ($isWin) {
        $retval = str_replace('/', '\\', $p_path);
        if ($p_addtrailingslash) {
            if (substr($retval, -1) != '\\') {
                $retval .= '\\';
            }
        }

        // Check if UNC path
        $unc = substr($retval,0,2) == '\\\\' ? 1 : 0;

        // Remove double \\
        $retval = str_replace('\\\\', '\\', $retval);

        // If UNC path, we have to add one \ in front or everything breaks!
        if ($unc == 1) {
            $retval = '\\'.$retval;
        }
    } else {
        $retval = str_replace('\\', '/', $p_path);
        if ($p_addtrailingslash) {
            if (substr($retval, -1) != '/') {
                $retval .= '/';
            }
        }

        // Check if UNC path
        $unc = substr($retval,0,2) == '//' ? 1 : 0;

        // Remove double //
        $retval = str_replace('//','/',$retval);

        // If UNC path, we have to add one / in front or everything breaks!
        if ($unc == 1) {
            $retval = '/'.$retval;
        }
    }
    return $retval;
}
