evnine


files\path\ModelsFilesPath.php


<?php
/**
 * Функции по работе с эл-тами системы.
 * @package ModelsFilesPath
 * @author ev9eniy
 * @version 1.0
 * @updated 30-сен-2010 21:59:40
 */


if ($_SERVER["DOCUMENT_ROOT"]=='') $_SERVER["DOCUMENT_ROOT"]='/';

class ModelsFilesPath
{
       
        /** Cвязь с базой данных
         *
         */

var $database;
var $isGetDataFromPathID;

        /** Конструктор класса
         *
         */

        function __construct($database){
                        $this->database=$database;//Сохраняем досту
        }
        /**
         * Получить данные из древа полсе обновления
         *
         * @assert ($param) == $this->object->getDataForTest('getDataBefore',$param=array('test'=>'test'))
         * @param param
         */

        function getDataBefore($param)
        {        
                $query=
                'SELECT p.PathID,p.Title,p.Description '."\n"
                .'FROM `sa_models_files_path` `p`'."\n"
                .' WHERE p.PathID = \''.$param["form_data"]["PathID"].'\'';
                        return $this->database->query($query);
        }

        /**
         * Получить данные из древа полсе обновления
         *
         * @assert ($param) == $this->object->getDataForTest('getDataAfter',$param=array('test'=>'test'))
         * @param param
         */

        function getDataAfter($param)
        {        
                $query=
                'SELECT p.PathID,p.Title,p.Description '."\n"
                .'FROM `sa_models_files_path` `p`'."\n"
                .' WHERE p.PathID = \''.$param["form_data"]["PathID"].'\'';
                        return $this->database->query($query);
        }

        //Получить типов файловой системы для красвого склонения
        function getFilesTypeCount(&$param)
        {              
                if (isset($param['form_data']['PathID'])&&is_array($param['form_data']['PathID'])){
                        $path_id_array=$param['form_data']['PathID'];
                }else {
                        $path_id_array=$param['form_data']['PathIDArray'];
                }
                        $query='SELECT '
.' f.Type'
.',IF(f.Type=5
        ,\'files\'
                ,IF(f.Type=4,
                        \'folder\'
                        ,IF(f.Type=3,
                                \'subject\'
                                ,IF(f.Type=2,
                                        \'universty\'
                                        ,IF(f.Type=1,
                                                \'city\',\'\'))))) text '

                                .',COUNT(f.Type) Count'
                                .' FROM sa_models_files_path f '
                                .' WHERE f.PathID IN ('
                                                                                                                                                                                                                .$this->database->getFileIDForWhereQuery($path_id_array)
                                                                                                                                                                                                                                .')'
                        .'GROUP BY TYPE ORDER BY f.Type,Count'
                        .';';
                        return $this->database->getPluralFormForArray(
                                        $this->database->query($query),$param['method']
                                );
        }

        //сбросить параметр какие данные делать при выборке
        function setResetModifierParamFormDelete(&$param)
        {
                unset($param['form_data']['isDelete']);
        }

        /** Получить массив данных для ID
         * getPathIDArrayForSelect
         *
         * @param mixed $param
         * @access public
         * @return void
         */

function getPathIDArrayForSelect($param){
        $array_out= array();
        if (
                isset($param['form_data']['FileID'])&&
                is_array($param['form_data']['FileID'])&&
                !isset($param['form_data']['PathIDArray'])
        ){
                $count = count($param['form_data']['FileID']);
                foreach ($param['form_data']['FileID'] as $_title =>$_value){
                        $array_out[$_value]=$_value;
                }
                return $array_out;
        }else {
                $count = count($param['form_data']['PathIDArray']);
                foreach ($param['form_data']['PathIDArray'] as $_title =>$_value){
                        $array_out[$_value]=$_value;
                }
                return $array_out;
        }
        }

function getDirIDWithHideDoubleIDModiferParam(&$param) {
        if (empty($param['form_data']['DirID'])){
                return false;
        }
        $count = count($param['form_data']['DirID']);
        $array=array();
        for ( $i = 0; $i < $count; $i++ ){
                if (!isset($array[$param['form_data']['DirID'][$i]])){
                        $array[$param['form_data']['DirID'][$i]]= $i;
                }else {
                        unset($param['form_data']['DirID'][$array[$param['form_data']['DirID'][$i]]]);
                        unset($param['form_data']['DirID'][$i]);
                }
        }
        sort($param['form_data']['DirID']);
}

        /**
         * Получить данные из древа
         *
         * @assert ($param) == $this->object->getDataForTest('getData',$param=array('test'=>'test'))
         * @param param
         */

        function isGetDataFromPathID($param)
        {
                if ($param['form_data']['isDelete']=='') {
                        $param['form_data']['isDelete']=0;
                }
                $query=
                        //'#Получить данные из древа'."\n"
         ' SELECT'."\n"
         .' p.ParentName,p.Title,p.Description,'."\n"
         .' p.PathID,'."\n"
         .' p.`Level`,'."\n"
         .' p.`Type`,'."\n"
         .' p.Ext,'."\n"
         .' p.ParentID,'."\n"
         //.' #Если доступно для редкатирования текущему юзеру'."\n"
         .' IF(LOCATE(\'+'.$param['UserID'].'+\',p.`ModeratorID`),1,0)+IF(LOCATE(\'+'.$param['UserID'].'+\',p.`OwnerID`),1,0)+'.($param['PermissionLevel']==4?1:0).' edit,'."\n"
         .' p.`ModeratorID`,'."\n"
                .' p.`OwnerID`,'."\n"
                .' p.InfoSizeKb, '
                //TODO DELETE AFTER DEBUG
                .' p.InfoSizeString,'."\n"
         //.' #Выводим в зависимости от кол-ва файла, файлов, файл'."\n"
         //.' #Градации серого'."\n"
         .' IF(DownloadCounter>99,\'000000\','."\n"
         //.' #Максимальный цвет минус шаг'."\n"
         .' conv((15658734-1118481*FLOOR(DownloadCounter/100*10)), 10, 16)'."\n"
         .' ) DownloadCounterColor,'."\n"
         .' CONCAT(DownloadCounter,'."\n"
         //.' #Скачан раз-раза-раз'."\n"
         .' IF('."\n"
         //.'           #Проверям левая граница равна ли одному'."\n"
         .'               RIGHT(p.DownloadCounter,1)=1,\' раз\','."\n"
         .'               IF'."\n"
         .'               ('."\n"
         //.'                   #Проверяем если число больше 4 или число 0'."\n"
         .'                 RIGHT(p.DownloadCounter,1)>4 OR RIGHT(p.DownloadCounter,1)=0,'."\n"
         .'               \' раз\','."\n"
         .'           \' раза\''."\n"
         .'         )'."\n"
         .'     )'."\n"
         .' )'."\n"
                .' DownloadCounter,'."\n"
                //.$this->database->getSQLQueryForSize(array('table_alias'=> 'InfoSize','select_alias'=>'InfoSizeSize','select'=> 'SUM(p.InfoSizeKb)','type'=>'size'))
         .' p.AuthorID,'."\n"
         .' p.AuthorName,'."\n"
         .' CONCAT('."\n"
         //.'   #Объединяем с числом'."\n"
         .'     p.infoSubjCount,'."\n"
         .'     IF('."\n"
         //.'           #Проверям левая граница равна ли одному'."\n"
         .'               RIGHT(p.infoSubjCount,1)=1,\' предмет\','."\n"
         .'               IF'."\n"
         .'               ('."\n"
         //.'                   #Проверяем если число больше 4 или число 0'."\n"
         .'                 RIGHT(p.infoSubjCount,1)>4 OR RIGHT(p.infoSubjCount,1)=0,'."\n"
         .'               \' предметов\','."\n"
         .'           \' предмета\''."\n"
         .'         )'."\n"
         .'     )'."\n"
         .' ) infoSubjCount,'."\n"
         //.' #Выводим в зависимости от кол-ва файла, файлов, файл'."\n"
         .' CONCAT('."\n"
         //.'   #Объединяем с числом'."\n"
         .'     p.infoFilesCount,'."\n"
         .'     IF('."\n"
         //.'           #Проверям левая граница равна ли одному'."\n"
         .'               RIGHT(p.infoFilesCount,1)=1,\' файл\','."\n"
         .'               IF'."\n"
         .'               ('."\n"
         //.'                   #Проверяем если число больше 4 или число 0'."\n"
         .'                 RIGHT(p.infoFilesCount,1)>4 OR RIGHT(p.infoFilesCount,1)=0,'."\n"
         .'               \' файлов\','."\n"
         .'           \' файла\''."\n"
         .'         )'."\n"
         .'     )'."\n"
         .' ) infoFilesCount'."\n"
//       .' #Удаляем из родителя данные по файлам'."\n"
         //.',IF(\'sub\'=\'sub\','
//       .' CONCAT('."\n"
//       .'     #Если тип файла'."\n"
//       .'     IF(p.Type=5,'."\n"
//       .'     #Заменяем родителя'."\n"
//       .'       REPLACE(p.ParentID,'."\n"
//       .'       #Для удаление добавляем ++ к текущему Path.ID'."\n"
//       .'       CONCAT(\'+\',p.PathID,\'+\'),\'+\'),'."\n"
//       .'       #ELSE'."\n"
//       .'       p.ParentID'."\n"
//       .'      #ENDIF'."\n"
//       .'     ),p.Level'."\n"
//       .'     #ENDCONCAT'."\n"
//       .' )'
         //.',\'\') '
//       .' sub_sort'."\n"
         .' FROM sa_models_files_path p'."\n"
                .' WHERE'."\n";
                $query.=' p.isDelete=\''.$param['form_data']['isDelete'].'\' AND '."\n";
//       .' #p.Level> min_level p.Level>0'."\n"
         //$query.=' p.Level>0 '."\n"
                 //.' AND'."\n";
          //.' #Объединяем подзапрос'."\n"
         $query.=' p.ParentID like CONCAT('."\n"
         .'     ('."\n"
         //.'           #Узнаём ParentID под запроса, что бы уже по нему делать выборку'."\n"
         .'             SELECT sub_f.ParentID'."\n"
         .'               FROM sa_models_files_path sub_f'."\n"
         .'             WHERE sub_f.PathID=\''.$param['form_data']['PathID'].'\''."\n"
         .'     )'."\n"
         .'     ,\'%\''."\n"
         .' )'."\n"
       
         //.' ( p.Level<=3 or (p.ParentID like \'%+17+%\' and p.Level>0 ))'."\n"
         //.' p.Level<=p.Level+1 '."\n"
         .' AND (';
         if ($param['form_data']['isDelete']==1){
                 $query.='p.Level>0';
         }else {
         $query.='      p.Level<=(SELECT sub_f2.Level+1 FROM sa_models_files_path sub_f2 '."\n"
         .'     WHERE sub_f2.PathID=\''.$param['form_data']['PathID'].'\''."\n"
         .')';
         }
         //echo '#$param["form_data"]["DirID"]: <pre>'; print_r($param["form_data"]["DirID"]); echo "</pre><br />\r\n";
         if (!empty($param['form_data']['DirID']['0'])){
                 //echo '#$param["form_data"]["DirID"]: <pre>'; print_r($param["form_data"]["DirID"]); echo "</pre><br />\r\n";
                 //if(function_exists(print_r))$query[ '#$param["form_data"]["DirID"]' ]=$param["form_data"]["DirID"];else echo '<pre>'.print_r($param["form_data"]["DirID"]).'</pre>';
                 $count = count($param['form_data']['DirID']);
                 for ( $i = 0; $i < $count; $i++ ) {
                         $query.=' OR (p.ParentID LIKE \'%+'.$param['form_data']['DirID'][$i].'+%\' '
                                 .' AND p.Level<=(SELECT sub_f2.Level FROM sa_models_files_path sub_f2 '
                                 .' WHERE sub_f2.PathID=\''.$param['form_data']['DirID'][$i].'\')+1)';
                 }
         }
         $query.=')';
         $query.=$param['WHERE']
//       .' #Сортировка по имени'."\n"
         .' ORDER BY BINARY p.ParentName ASC'."\n"
//       .' #Кода сортировка в папке по Дате, размеру итд'."\n"
//       .' ORDER BY sub_sort,BINARY p.Title ASC
         .'
;';
                $query = $this->database->queryOrFalse($query);
                 //echo '
#$query: <pre>'; print_r($query); echo "</pre><br />\r\n";
                if ($query){
                        $this->isGetDataFromPathID=array('Title'=>$query['0']['Title'],'PathID'=>$query['0']['PathID']);
                        if ($query['0']['Level']>2){
                        $param['ModeratorID']=$this->database->getSplitClearForParentID($query['0']['ModeratorID']);
                        $param['OwnerID']=$this->database->getSplitClearForParentID($query['0']['OwnerID']);
                        //if(function_exists(print_r2))$query[ '#$param["OwnerID"]' ]=$param["OwnerID"];else print_r($param["OwnerID"]);
                        $query['0']['ParentNameID'] = $this->database->getSplitAndClearFolderByID(
                                array(
                                        'ParentID'=>$query['0']['ParentID'],
                                        'ParentName'=>$query['0']['ParentName']
                                ));
                        }
                }
                return $query;
        }

        /**
         * Поиск в древе с указанием вуза
         *
         * @assert ($param) == $this->object->getDataForTest('isGetDataSearchFromPathID',$param=array('test'=>'test'))
         * @param param
         */

        function isGetDataSearchFromPathID($param)
        {
        $param['WHERE']=' AND p.ParentName like \'%'.$param['form_data']['SearchTitle'].'%\'';
                $query = $this->isGetDataFromPathID($param);
                if (!isset($query['0'])){
                        return false;
                }else {
                        return $query;
                }
        }

        /**
         * Отменить закачку
         *
         * @assert ($param) == $this->object->getDataForTest('TODO_getDataForUpload',$param=array('test'=>'test'))
         * @param param
         */

        function TODO_setCancelUpload($param)
        {
                $query='';
        }

        /**
         * Информация по оперируемым файлам
         *
         * @assert ($param) == $this->object->getDataForTest('getFileOperationInfo',$param=array('test'=>'test'))
         * @param param
         */

        function isGetFileOperationInfoModifierParamInfoUnsetNotAllowPath(&$param)
        {
                $not_has_access= array();
                $form_data_count = count($param['form_data']['PathIDArray']);
                for ( $i = 0; $i < $form_data_count; $i++ ) {
                        if (!isset($param['old_data'][$param['form_data']['PathIDArray'][$i]])){
                                $not_has_access[]= $param['form_data']['PathIDArray'][$i];
                                unset($param['form_data']['PathIDArray'][$i]);
                        }
                }
               
                if (count($not_has_access)>0){
                        $param['info_array'] = $this->getTitleByPathIDArray($param,$not_has_access);
                        return false;
                }else {
                        return true;
                }
        }      

/** getTitleByPathID - получить название для сохраненного пути из этого же класса
 *
 *
 * @param mixed $param
 * @access public
 * @return void
 */

function getTitleByPathID($param){
        if (isset($this->isGetDataFromPathID)){
                return $this->isGetDataFromPathID;
        }else {
                return '';
        }
}

/** getTitleByPathIDArray - вывести список объектов где нет доступа к операциям над ними, например не хватает уровня доступа
 *
 *
 * @param mixed $param
 * @param mixed $array
 * @access public
 * @return void
 */

function getTitleByPathIDArray($param,$array){
        $query = 'SELECT '
                .$this->database->getSQLQueryForType(array('first' => true,'select_alias'=>'PathType'))
                .' ,f.Title,f.PathID,\'no_access\' InfoType,\''.$param['method'].'\' Method'
  .' FROM sa_models_files_path f'
                .' WHERE PathID IN ('.$this->database->getFileIDForWhereQuery($array).')'
                .' ORDER BY Type'
                .';';
        return $this->database->query($query);
        //return $query;
}

        /**
         * Получить данные из корзины.
         *
         * @assert ($param) == $this->object->getDataForTest('isGetDataFromRecycleBin',$param=array('test'=>'test'))
         * @param param
         */

        function isGetDataFromRecycleBin($param)
        {
                $param['form_data']['isDelete']= 1;
                return $this->isGetDataFromPathID($param);
        }


function isGetDataFromPathIDBeforeUnsetItemFromDB($param) {
        return $this->isGetDataFromPathIDBefore($param);
}
function isGetDataFromPathIDAfterUnsetItemFromDB($param) {
        return $this->isGetDataFromPathIDBefore($param);
}

        //Проверочные данные
function isGetDataFromPathIDBefore($param) {
        if (empty($param['form_data']['PathID']))
                $param['form_data']['PathID']=$param['form_data']['PathIDTo'];
        return $this->isGetDataFromPathID($param);
}

function isGetDataFromPathIDAfter($param) {
        if (empty($param['form_data']['PathID']))
                $param['form_data']['PathID']=$param['form_data']['PathIDTo'];
        return $this->isGetDataFromPathID($param);
}


        //Проверочные данные, что в корзине
        function isGetDataFromRecycleBinAfter($param)
        {
                return $this->isGetDataFromRecycleBin($param);
        }

        //Проверочные данные, что в корзине
        function isGetDataFromRecycleBinBefore($param)
        {
                return $this->isGetDataFromRecycleBin($param);
        }
        /**
         * Получить размер корзины
         *
         * @assert ($param) == $this->object->getDataForTest('getSizeFromRecycleBin',$param=array('test'=>'test'))
         * @param param
         */

        function getSizeFromRecycleBin($param)
        {
                $query=' SELECT'."\n"
                .$this->database->getSQLQueryForCounter(
                        array(
                                'first'=>true,
                                'table_alias'=> '',
                                'select'=> 'COUNT(*)',
                                'select_alias'=>'infoFilesCount',
                                'type'=>'files'
                        )
                )
                .$this->database->getSQLQueryForSize(array('table_alias'=> '','select_alias'=>'InfoSizeSize','select'=> 'SUM(p.InfoSizeKb)','type'=>'size'))
         .' FROM sa_models_files_path p'."\n"
                .' WHERE'."\n"
         .' p.ParentID like CONCAT('."\n"
//       .' #Объединяем подзапрос'."\n"
         .'     ('."\n"
//       .'             #Узнаём ParentID под запроса, что бы уже по нему делать выборку'."\n"
         .'             SELECT sub_f.ParentID'."\n"
         .'               FROM sa_models_files_path sub_f'."\n"
         .'             WHERE sub_f.PathID=\''.$param['form_data']['PathID'].'\''."\n"
         .'     )'."\n"
         .'     ,\'%\''."\n"
                .' )'."\n"
                .' AND'."\n"
                .' p.Type=5 '
                .' AND'."\n"
                .' p.isDelete=1 '
                .';'."\n";
                $query =  $this->database->queryZeroLevel($query);
                $query['infoFilesCount']= trim($query['infoFilesCount']);
                return $query;
        }

        /**
         * Установить новое имя и описание
         *
         * @assert ($param) == $this->object->getDataForTest('setTitleAndDescription',$param=array('test'=>'test'))
         * @param param
         */

        function setNewTitleAndDescription(&$param)
        {
                $param['PHPUnitTestStopReset']=false;
                $query='UPDATE sa_models_files_path f'
         .' SET ';
                if (isset($param['form_data']['Title']))
                 $query.=' f.Title=\''.$param['form_data']['Title'].'\' ,';
                if (isset($param['form_data']['Description']))
                 $query.=' f.Description=\''.$param['form_data']['Description'].'\',';
                $query.=' f.`DateEdit`=\''.$param['DateNow'].'\' '
                        .' WHERE f.PathID=\''.$param['form_data']['PathID'].'\';';
                $this->database->query($query);
        }

        /**
         * Установить новое имя
         *
         * @assert ($param) == $this->object->getDataForTest('setTitleAndDescription',$param=array('test'=>'test'))
         * @param param
         */

        function setNewTitle(&$param)
        {
                $param['PHPUnitTestStopReset']=false;
                unset($param['form_data']['Description']);
                $this->setNewTitleAndDescription($param);
        }

        /**
         * Установить новое описание
         *
         * @assert ($param) == $this->object->getDataForTest('setTitleAndDescription',$param=array('test'=>'test'))
         * @param param
         */

        function setNewDescription(&$param)
        {
                $param['PHPUnitTestStopReset']=false;
                unset($param['form_data']['Title']);
                $this->setNewTitleAndDescription($param);
        }

        /**
         * Проверить новое ли название и новое ли описание?
         *
         * @assert ($param) == $this->object->getDataForTest('isNewTitleAndDescriptionModifierParamEvent',$param=array('test'=>'test'))
         * @param param
         */

function isNewTitleAndDescriptionModifierParamEvent(&$param){
                $save_event = $param['event'];
                if (
                        isset($param['form_data']['Title'])
                        &&isset($param['form_data']['Description'])
                        &&$this->isNewTitleModifierParamEvent($param)
                        &&$this->isNewDescriptionModifierParamEvent($param)
                ) {
                        return true;
                } else {
                        $param['event']=$save_event;
                        return false;
                }
        }

/**
 * Изменилось ли название? Для вызова случая обновления древа PathName
 *
 * @param mixed $param
 * @access public
 * @return void
 */

function isNewTitleModifierParamEvent(&$param){
        if ($param['old_data'][$param['form_data']['PathID']]['Title']===
                $param['form_data']['Title']
                ||!isset($param['form_data']['Title'])
        ){
                        return false;
        }else {
                //Добавляем событие
                $param['event'][$param['form_data']['PathID']][]=array(
                        'Type' => 'ren_t',
                        'Before'=>$param['old_data'][$param['form_data']['PathID']]['Title'],
                        'After'=>$param['form_data']['Title'],
                        'form_data'=>array('f' => 'title',),
                );
                return true;
        }
}
           
/**
 * Изменилось ли название? Для вызова случая обновления древа PathName
 *
 * @param mixed $param
 * @access public
 * @return void
 */

function isNewDescriptionModifierParamEvent(&$param){
        if ($param['old_data'][$param['form_data']['PathID']]['Description']===
                $param['form_data']['Description']||
                !isset($param['form_data']['Description'])
        ){
                        return false;
        }else {
                        //Добавляем событие
                $param['event'][$param['form_data']['PathID']][]=array(
                        'Type' => 'ren_d',
                        'Before'=>$param['old_data'][$param['form_data']['PathID']]['Description'],
                        'After'=>$param['form_data']['Description'],
                        'form_data'=>array('f' => 'description',),
                        );
                        return true;
        }
}
/**
 * Обновить древо назвний после переименования
*/

function setUpdateParentNameTreeAfterUpdateTitle($param){
        //Получаем данные для обновления родителя
        $query = 'SELECT CONCAT(sub_f.ParentID,\'%\') ParentID,sub_f.Title,sub_f.ParentName ParentName'
  .' FROM sa_models_files_path sub_f'
        .' WHERE sub_f.PathID LIKE \''.$param['form_data']['PathID'].'\';';
        $query = $this->database->query($query);
        //Если ответ получен
        if (isset($query[0])){
                $ParentID = $query[0]['ParentID'];
                $ParentName = $query[0]['ParentName'];
                //Заменяем старого родителя
                $ParentName = preg_replace("/{$param['old_data'][$param['form_data']['PathID']]['Title']}\/$/","",$ParentName);
                $query = 'UPDATE sa_models_files_path '
                        .'SET ParentName = REPLACE(ParentName,\''
                        //Старый родитель без название, плюс старое название
                        .$ParentName.$param['old_data'][$param['form_data']['PathID']]['Title'].'/\',\''
                        //Заменяем на родителя, плюс новое название
                        .$ParentName.$param['form_data']['Title'].'/\')'
                        //Где родители с захватом всего древа '+777+%'
                        .'WHERE ParentID LIKE \''.$ParentID.'\';';
                $query = $this->database->query($query);

        }

}
        /**
         * Поставить флаг что объект в корзине
         *
         * @assert ($param) == $this->object->getDataForTest('setToRecycle',$param=array('test'=>'test'))
         * @param param
         */

        function setToRecycle(&$param)
        {
                $param['form_data']['isDelete']=1;
                $query='UPDATE sa_models_files_path f '
                        .'SET '
                        .' f.isDelete=\''.$param['form_data']['isDelete'].'\' '
                        .' ,f.infoFilesCount=\'0\''
                        .' ,f.infoSubjCount=IF(f.Type=3,1,0)'
                        .' ,f.InfoSizeKb=IF(f.Type=5,f.InfoSizeKb,0)'
                        .' ,f.InfoSizeString=IF(f.Type=5,f.InfoSizeString,\'0 Kb\')'
                        .' ,f.DateEdit=\''.$param['DateNow'].'\''
                        .' WHERE f.PathID IN ('
                        .$this->database->getFileIDForWhereQuery(
                                $param['form_data']['PathIDArray']
                        ).');';
                $this->database->query($query);
                if ($param['isPHPUnitDebug']){//TODO DELETE
                        $param['PHPUnitTestStopReset']= false;
                        $param['form_data']['isDelete']='1';
                        return $this->isGetDataFromRecycleBinAfter($param);
                }
        }

/**
 * Обновить потереных детей при восстановлении
 * Например когда сначала восстановили файлы
 * И только потом родительскую папку
 *
 * @param mixed $param
 * @access public
 * @return void
 */

function setUpdateParentIfHasUnlinkChildren($param) {
//Для всех старых деррикторий переданных при проверки прав
        foreach ($param['old_data'] as $old_title =>$old_value)
        if ($old_value['Type']!='5'){//Только если объект не файл, у которого нет потомков
        //Узнаём а есть ли не удаленные дете для нашей дериктории
        //с группировкой по типу и суммированием если тип файл
        //А так же с расчётом кол-во предметов
                        $query = 'SELECT Type,IF(Type=5,SUM(infoSizeKb),0) infoSizeKb,COUNT(*) COUNT FROM sa_models_files_path '
                                .' WHERE'
                                .' PathID !=\''
                                .$old_value['PathID']
                                .'\''
                                .' AND '
                                .' ParentID LIKE '
                                .' \''.$old_value["ParentID"].'%\''
                                .' AND '
                                .' (Type=5 OR Type=3)'."\r\n"
                                .' AND '
                                .' isDelete=0 '
                                .' GROUP BY Type'
                                .' ORDER BY Type'
                                .'; ';
                                //Парсим полученный ответ по ключу тип, что бы сразу иметь доступ
                        $query = $this->database->getKeyForArrayFromQuery($this->database->query($query),'Type');
                        //На всякий случай обнуляем данные
                        $infoFilesCount=$infoSubjCount=$infoSizeKb= 0;
                        if (isset($query['5'])){//Если есть файлы
                                $infoSizeKb= $query['5']['infoSizeKb'];
                                $infoFilesCount = $query['5']['COUNT'];
                        }
                        if (isset($query['3']))//Если есть придметы
                                $infoSubjCount= $query['3']['COUNT'];
                        if (isset($query['3'])||isset($query['5'])){//Если данные есть, обновляем
                                $query='UPDATE sa_models_files_path f SET '
                                        .'infoFilesCount=\''.$infoFilesCount.'\''
                                        .',infoSizeKb=\''.$infoSizeKb.'\''
                                        .',infoSubjCount=\''.$infoSubjCount.'\''
                                        .',InfoSizeString='.$this->database->getSQLQueryForSize(array('first' => true,'table_alias'=> '','select_alias'=>'','select'=> 'InfoSizeKb','type'=>'size'))
                                        .' WHERE '
                                        .' PathID =\''
                                        .$old_value['PathID']
                                        .'\';';
                        $this->database->query($query);
                        }
        }
        if ($param['isPHPUnitDebug']){//TODO DELETE
                        $param['PHPUnitTestStopReset']= false;
                        $param['form_data']['isDelete']= 0;
                        return $this->isGetDataFromPathID($param);
                }      
}
//Установить событие что было восстановление
function setEventRecoverModifierParamEvent(&$param) {
        $count= count($param['form_data']['PathIDArray']);
        for ( $i = 0; $i < $count; $i++ ) {
                $path_id = $param["form_data"]["PathIDArray"][$i];
                $param['event'][$path_id][]=array(
                        'Type' => 'recover',
                        'Before'=>$path_id,
                        'After'=>$param['old_data'][$path_id]['Title'],
                        'form_data'=>array('f' => 'file_id','m'=>'delete'),
                );
        }
}


//Установить событие что было удаление
function setEventCopyModifierParamEvent(&$param) {
        $count= count($param['form_data']['PathIDArray']);
        for ( $i = 0; $i < $count; $i++ ) {
                $path_id = $param["form_data"]["PathIDArray"][$i];
                $param['event'][$path_id][]=array(
                        'Type' => 'copy',
                        //'Before'=>$path_id,
                        'Before'=>$param['save_data_for_event'][$path_id],
                        'After'=>$param['old_data'][$path_id]['Title'],
                        'form_data'=>array('f' => 'file_id','m'=>'delete','t' => 'recycle',),
                );
        }
}

//Установить событие что было удаление
function setEventMoveModifierParamEvent(&$param) {
        $count= count($param['form_data']['PathIDArray']);
        for ( $i = 0; $i < $count; $i++ ) {
                $path_id = $param["form_data"]["PathIDArray"][$i];
                $param['event'][$path_id][]=array(
                        'Type' => 'move',
                        'Before'=>$param['save_data_for_event'][$path_id],
                        'After'=>$param['old_data'][$path_id]['Title'],
                        'form_data'=>array('f' => 'file_id','m'=>'move','t' => 'operation',),
                        //'Before'=>$param['save_data_for_event'][$path_id],
                        //'After'=>$param['old_data'][$path_id]['Title'],
                        //'form_data'=>array('f' => 'path_to','m'=>'move','t' => 'operation',),
                );
        }
        if ($param['isPHPUnitDebug']){
                return $param['event'];
        }
}

function setClearModifierFormDataPathIDArray(&$param) {
        unset($param['form_data']['PathIDArray']);
}


//Установить событие что было удаление
function setEventDeleteModifierParamEvent(&$param) {
        $count= count($param['form_data']['PathIDArray']);
        for ( $i = 0; $i < $count; $i++ ) {
                $path_id = $param["form_data"]["PathIDArray"][$i];
                $param['event'][$path_id][]=array(
                        'Type' => 'del',
                        'Before'=>$path_id,
                        'After'=>$param['old_data'][$path_id]['Title'],
//                      'form_data'=>array('f' => 'recover_array','m'=>'recover'),
                        'form_data'=>array('f' => 'file_id','m'=>'recover'),
                );
        }
}

//Установить событие что было удаление из базы и с HDD
function setEventDeleteFromHDDModifierParamEvent(&$param) {
        $count= count($param['form_data']['PathIDArray']);
        for ( $i = 0; $i < $count; $i++ ) {
        $path_id = $param["form_data"]["PathIDArray"][$i];
        $param['event'][$path_id][]=array(
                'Type' => 'delhdd',
                'form_data'=>array('f' => '',),
        );
        }
}





        /**
         * Обновить счётчики родителей при добавлении файла
         *
         * @assert ($param) == $this->object->getDataForTest('setUpdateParentAfterAddFile',$param=array('test'=>'test'))
         * @param param
         */

        function setUpdateParentAfterAdd(&$param)
        {
                //$param['old_data'];
                $param['UpdateType']= '+';
                return $this->setUpdateParentAfterMinus($param);
        }

        /**
         * Вычисть объём при удалении файла
         *
         * @assert ($param) == $this->object->getDataForTest('setUpdateParentAfterMinusFile',$param=array('test'=>'test'))
         * @param param
         */

        function setUpdateParentAfterMinus(&$param)
        {        
                if (empty($param['UpdateType']))
                        $param['UpdateType']='-';
                foreach ($param['old_data'] as $old_title =>$old_value){
                        $param_id_array = $this->database->getSplitClearForParentID($old_value['ParentID']);
                        unset($param_id_array[count($param_id_array)-1]);//DELETE +CHILD+
                $query=
                ' UPDATE `sa_models_files_path` SET '."\n"
                .' infoSubjCount=IF('.$old_value['Type'].'=3,infoSubjCount'.$param['UpdateType'].'1,infoSubjCount)'."\r\n"
                .' ,infoFilesCount=IF('.$old_value['Type'].'=5,'
                                        .'IF(infoFilesCount'.$param['UpdateType'].'1<0,0,infoFilesCount'.$param['UpdateType'].'1)'
                                .',infoFilesCount)'."\n"
                                .' ,InfoSizeKb=IF('.$old_value['Type'].'=5,'
                       
                                .'IF(InfoSizeKb'.$param['UpdateType'].'\''.$old_value['InfoSizeKb'].'\'<0,0,InfoSizeKb'.$param['UpdateType'].'\''.$old_value['InfoSizeKb'].'\')'
                                .',InfoSizeKb)'."\n"
                .' ,InfoSizeString=IF('.$old_value['Type'].'=5,'
                .$this->database->getSQLQueryForSize(array('first' => true,'table_alias'=> '','select_alias'=>'','select'=> 'InfoSizeKb','type'=>'size'))
                .',InfoSizeString)'."\n"
                .'   WHERE '."\n"
                .' isDelete=\'0\' AND '
                .'     PathID IN ('
                        .$this->database->getFileIDForWhereQuery($param_id_array)
                .');'."\n";
                        $this->database->query($query);
                }
                if ($param['isPHPUnitDebug']){//TODO DELETE
                        //$param['PHPUnitTestStopReset']= false;
                        //$param['form_data']['isDelete']= 0;
                        //return $debug_array;
                        return $this->isGetDataFromPathID($param);
                }
        }


        /**
         * Поставить флаг что объект в корзине
         *
         * @assert ($param) == $this->object->getDataForTest('unsetFromRecycle',$param=array('test'=>'test'))
         * @param param
         */

        function unsetFromRecycle(&$param)
        {

                $param['form_data']['isDelete']= 0;
                $query='UPDATE sa_models_files_path f SET f.isDelete=\''.$param['form_data']['isDelete'].'\' WHERE f.PathID IN ('.$this->database->getFileIDForWhereQuery($param['form_data']['PathIDArray']).');';
//              echo '#$query: <pre>'; print_r($query); echo "</pre><br />\r\n";
                $this->database->query($query);
                if ($param['isPHPUnitDebug']){//TODO DELETE
                        $param['PHPUnitTestStopReset']= false;
                        return $this->isGetDataFromRecycleBinAfter($param);
                }
        }


/**
         * Удалить с харда
         *
         * @assert ($param) == $this->object->getDataForTest('unsetItemFromHDD',$param=array('test'=>'test'))
         * @param param
         */

        function unsetItemFromDBPathIDFromSaveDataForEvent(&$param)
        {
                //$this->unsetItemFromHDD($param);
                if ($param['form_data']['isDelete']=='')
                        $param['form_data']['isDelete']= 0;
                if ($param['isPHPUnitDebug']){
                        $param['PHPUnitTestStopReset']= false;
                }
                $query_sql='DELETE FROM sa_models_files_path '
                        .' WHERE PathID IN ('
                                                                                                                                                                                                        .$this->database->getFileIDForWhereQuery(
                                                                                                                                                                                                                $param['save_data_for_delete']
                                                                                                                                                                                                        )
                                                                                                                                                                                                .');';
                $this->database->query($query_sql);
                if ($param['isPHPUnitDebug']){//TODO DELETE
                        return $query;
                        //return $this->isGetDataFromRecycleBinAfter($param);
                }
        }

        /**
         * Удалить с харда
         *
         * @assert ($param) == $this->object->getDataForTest('unsetItemFromHDD',$param=array('test'=>'test'))
         * @param param
         */

        function unsetItemFromDB(&$param)
        {
                //$this->unsetItemFromHDD($param);
                if ($param['form_data']['isDelete']=='')
                        $param['form_data']['isDelete']= 0;
                if ($param['isPHPUnitDebug']){
                        $param['PHPUnitTestStopReset']= false;
                }
                $query_sql='DELETE FROM sa_models_files_path '
                        .' WHERE PathID IN ('
                                                                                                                                                                                                        .$this->database->getFileIDForWhereQuery(
                                                                                                                                                                                                                $param['form_data']['PathIDArray']
                                                                                                                                                                                                        )
                                                                                                                                                                                                        .');';
                $this->database->query($query_sql);
                if ($param['isPHPUnitDebug']){//TODO DELETE
                        $param['PHPUnitTestStopReset']=false;
                        return $query;
                        //return $this->isGetDataFromRecycleBinAfter($param);
                }
        }


function setServerFilePathModifierParamOldData(&$param) {
        if ($param['isPHPUnitDebug']){
                        $param['PHPUnitTestStopReset']= false;
                }
                $query='SELECT f.ServerPack,f.ServerMD5,f.PathID FROM sa_models_files_path f '
                        .' WHERE '
                        .' f.Type=5 '
                        .' AND '
                        .'f.PathID IN ('
                                .$this->database->getFileIDForWhereQuery(
                                        $param['form_data']['PathIDArray']
                                ).');';
                $query = $this->database->query($query);
                $query_count = count($query);
                for ( $i = 0; $i < $query_count; $i++ ) {
                        $param['old_data'][$query[$i]['PathID']]['ServerPack']= $query[$i]['ServerPack'];
                        $param['old_data'][$query[$i]['PathID']]['ServerMD5']= $query[$i]['ServerMD5'];
                       
                }
                if ($param['isPHPUnitDebug']){//TODO DELETE
                        return $query;
                }
}

function isGetFileNotExists($param) {
        $file_dir = $param['ServerPath'].DIRECTORY_SEPARATOR;
        $not_exist= array();
        foreach ($param['old_data'] as $param_title =>$param_value)if ($param_value['Type']==5){
                $this_file = $file_dir.$param_value['ServerPack'].DIRECTORY_SEPARATOR.$param_value['ServerMD5'];
                if (!file_exists($this_file)){
                        $not_exist[$param_value['PathID']]=$file_dir.$param_value['ServerPack'].DIRECTORY_SEPARATOR.$param_value['ServerMD5'].' ('.$param_value['PathID'].' - '.$param_value['Title'].')';
                }
        }
        return $not_exist;
}

function isGetFileNotDeletedModifierParamDataOld(&$param) {
        $file_dir = $param['ServerPath'].DIRECTORY_SEPARATOR;
        $exist= array();
        foreach ($param['old_data'] as $param_title =>$param_value)if ($param_value['Type']==5){
                $this_file = $file_dir.$param_value['ServerPack'].DIRECTORY_SEPARATOR.$param_value['ServerMD5'];
                if (file_exists($this_file)){
                        $not_exist[$param_value['PathID']]=$file_dir.$param_value['ServerPack'].DIRECTORY_SEPARATOR.$param_value['ServerMD5'].' ('.$param_value['PathID'].' - '.$param_value['Title'].')';
                        unset($param['old_data'][$param_title]);
                }
        }
        return $exist;
}

        /**
         * Удалить с HDD файл
         *
         * @assert ($param) == $this->object->getDataForTest('unsetItemFromDB',$param=array('test'=>'test'))
         * @param param
         */

        function unsetItemFromHDD($param)
        {
                include_once($_SERVER["DOCUMENT_ROOT"].DIRECTORY_SEPARATOR.'components/com_sa/models/files/ModelsFilesServerCMD.php');//TODO REAL PATH
                $this->ModelsFilesArchive = new ModelsFilesServerCMD($this->database);
                $this->ModelsFilesArchive->setDeleteFromServer($param);
        }

function getNewPathIDToModifierParamOldData($path_id,&$param) {
        $param_id_array = $this->database->getSplitClearForParentID($param['old_data'][$path_id]['ParentID']);
        unset($param_id_array[count($param_id_array)-1]);//DELETE +CHILD+
        krsort($param_id_array);
        $param_id_array_count=count($param_id_array);
        for ( $i = $param_id_array_count; $i >=0 ; $i-- ) {
                $parent=$param_id_array[$i];
                if (!empty($param['old_data'][$parent]['NewPathID'])){
                        return $param['old_data'][$parent]['NewPathID'];
                }
        }
        return $param['form_data']['PathIDTo'];
}

function getParentIDForEventRestore($path_id,&$param) {
        $param_id_array = $this->database->getSplitClearForParentID($param['old_data'][$path_id]['ParentID']);
        unset($param_id_array[count($param_id_array)-1]);//DELETE +CHILD+      
        $parent_id = $param_id_array[count($param_id_array)-1];
        if (empty($parent_id)){
                return $path_id;
        }else {
                return $parent_id;
        }
}

function getParentID($path_id,&$param) {
        $param_id_array = $this->database->getSplitClearForParentID($param['old_data'][$path_id]['ParentID']);
        //unset($param_id_array[count($param_id_array)-1]);//DELETE +CHILD+    
        //$parent_id = $param_id_array[count($param_id_array)-1];
        if (empty($parent_id)){
                return $path_id;
        }else {
                return $parent_id;
        }
}

//Получить владельцев и модераторов вуза с названием и модифицировать параметры
        function isGetTitleOwnerAndModeratorModifierParam(&$param){
                $query = $this->isGetTitleInArray($param);
                $query[0]['ModeratorID'] = $param['ModeratorID']= $this->database->getParseUserID($query,'ModeratorID');
                $query[0]['OwnerID'] = $param['OwnerID']= $this->database->getParseUserID($query,'OwnerID');;
                return $query[0];
        }


/**
 * Существует ли вуз?
 * @assert ($param) == $this->object->getDataForTest('isGetUniverstyTitle',$param=array('test'=>'test'))
 */

        function isGetTitleInArray($param)
        {
                $query_sql=
                ' SELECT'."\n"
                .' p.ModeratorID,p.OwnerID'."\n"
                .' FROM sa_models_files_path p'."\n"
                .' WHERE'."\n"
                .' p.PathID IN ('.$this->database->getFileIDForWhereQuery($param['form_data']['PathIDArray']).');'."\n";
                return $this->database->queryOrFalse($query_sql);
        }

        /**
         * Копировать
         *
         * @assert ($param) == $this->object->getDataForTest('setCopyTo',$param=array('test'=>'test'))
         * @param param
         */

        function setCopyToModifierParamReplaceOldPathIDArrayToNewPathID(&$param)
        {
                $count_path_from= count($param['form_data']['PathIDArray']);
                $new_items= array();
                foreach ($param['old_data'] as $old_data_path_id =>$param_old_data_value){
                        $new_items[]=$last_id = $this->database->getLastID(array('Table'=>'sa_models_files_path'));
                        $param['old_data'][$old_data_path_id]['NewPathID']= $last_id;
                        $param['save_data_for_event'][$last_id]=$this->getParentIDForEventRestore($old_data_path_id,$param);
                        $param['save_data_for_delete'][$last_id]=$this->getParentID($old_data_path_id,$param);
                        $copy_id= $old_data_path_id;
                        $copy_to=$this->getNewPathIDToModifierParamOldData($old_data_path_id,$param);
                        $query=
         //' #Копировать в папку'."\n"
         //' #array(01=>array(path_id:int=>\'\',path_id_to:int=>\'\')'."\n"
         ' INSERT INTO sa_models_files_path'."\n"
         .' ('."\n"
         .'     `PathID`,'."\n"
         .'     `ParentID`,'."\n"
         .'     `ParentName`, `Level`, `Type`,'."\n"
         .'  `Title`, `Description`, `ModeratorID`, `OwnerID`, `AuthorID`,'."\n"
         .'  `AuthorName`, `isDelete`, `DateAdd`, `DateEdit`,'."\n"
         .'  `DownloadCounter`, `infoFilesCount`, `infoSubjCount`,'."\n"
         .'  `InfoSizeKb`, `InfoSizeString`, `ServerPack`, `ServerMD5`,`Ext`'."\n"
         .' )'."\n"
         //.' #Вставляем данные копируемого значения'."\n"
         .' SELECT'."\n"
         //.' #Последнее занчение в базе'."\n"
         .'    \''.$last_id.'\','."\n"
         //.'    #Получаем подпаку в которую копируем'."\n"
                .'    CONCAT(t.ParentID,\''.$last_id.'+\'),'."\n"
         .'    CONCAT(t.ParentName,f.Title,"/"),'."\n"//TODO FOR FILE NAME?
         .'    (t.`Level`+1), f.`Type`,'."\n"
         .'    f.`Title`, f.`Description`, t.`ModeratorID`, '
         .'CONCAT(REPLACE(t.`OwnerID`,\'+'.$param['UserID'].'+\',\'+\'),\''.$param['UserID'].'+\')'
         .', f.`AuthorID`,'."\n"
         .'    f.`AuthorName`, \'0\''/*f.`isDelete`*/.', f.`DateAdd`, \''.$param['DateNow'].'\','."\n"
         .''."\n"
                .'    f.`DownloadCounter`, \'0\''./*'f.`infoFilesCount`*/', \'0\''./*f.`infoSubjCount`*/','."\n"
         .'    f.`InfoSizeKb`, f.`InfoSizeString`, f.`ServerPack`, f.`ServerMD5`, f.`Ext`'."\n"
         .'  FROM sa_models_files_path f, sa_models_files_path t'."\n"
         //.'  #Что копируем'."\n"
                .'  WHERE f.PathID=\''.$copy_id.'\' AND t.PathID=\''.$copy_to.'\';'."\n";
                $query = $this->database->query($query);
                }
                unset($param['old_data']);
               
                $param['form_data']['PathIDArray']=$new_items;
                if ($param['isPHPUnitDebug']){//TODO DELETE
                        $param['PHPUnitTestStopReset']= false;
                }
        }

function getDataForFormDataPathIDInArray($param) {
        return $this->getDataForPathIDInArray($param['form_data']['PathIDArray']);
}


function getDataForFormDataPathIDInArrayBefore($param) {
        return $this->getDataForPathIDInArray($param['form_data']['PathIDArray']);
}

function getDataForFormDataPathIDInArrayAfter($param) {
        return $this->getDataForFormDataPathIDInArrayBefore($param);
}

function getDataForPathIDInArray($path_id_array) {
                $query=
                'SELECT * '."\n"
                .'FROM `sa_models_files_path` `p`'."\n"
                .' WHERE p.PathID IN ('.$this->database->getFileIDForWhereQuery($path_id_array).');';
                return $this->database->query($query);
}

/**
 * getMinTypeForPathIDArray
 *
 * @param mixed $param
 * @access public
 * @return void
 */

function getMinTypeForPathIDArray($param){
        $param_id_array = $param['old_data'];
        $save_min_type=array('save_type'=>'999');
        foreach ($param_id_array as $param_id_array_title =>$param_id_array_value){
                if ($param_id_array_value['Type']<$save_min_type['save_type']){
                        $save_min_type['PathID']=$param_id_array_value['PathID'];
                        $save_min_type['save_type']=$param_id_array_value['Type'];
                }
        }              
        return  array($save_min_type['PathID']);
}

function getTypeForPathID($param) {
        $query_sql='SELECT p.Type '."\n"
        .' FROM sa_models_files_path p '
        .' WHERE '
        .' p.PathID IN ('.$this->database->getFileIDForWhereQuery(array($param['form_data']['PathIDTo'])).');';
        return $this->database->queryZeroLevel($query_sql);
}

function isAllowTypeForOperationForFolder($param) {
        $query = $this->getTypeForPathID($param);
        if ($query['Type']>=3&&$query['Type']<5){
                return true;
        }else {
                return false;
        }
}

function isAllowTypeForOperationForSubj($param) {
        $query = $this->getTypeForPathID($param);
        if ($query['Type']==2){
                return true;
        }else {
                return false;
        }
}


        /**
         * Допускает ли глубина перемещение, нельзя копировать уровень более высокий в
         * более низке
         * т.е. Нельзя копировать Вуз в папку
         *
         * @assert ($param) == $this->object->getDataForTest('isAllowTypeForOperation',$param=array('test'=>'test'))
         * @param param
         */

        function isAllowTypeForOperation($param)
        {
                $param_id_array= $this->getMinTypeForPathIDArray($param);
                $query_sql=
//SERV FIX              'SELECT p.PathID ToPathID,p.Type ToType,MAX(c.Type) FromType,c.PathID FromPathID,IF(p.PathID,true,false) isAllowTypeForOperation  FROM sa_models_files_path p, sa_models_files_path c'."\n"
'SELECT p.PathID ToPathID,p.Type ToType,MAX(c.Type) FromType,c.PathID FromPathID,IF(p.PathID,true,false) isAllowTypeForOperation  FROM sa_models_files_path p, sa_models_files_path c'."\n"
.'WHERE '
.'c.PathID IN ('.$this->database->getFileIDForWhereQuery($param_id_array).')'
.' AND p.PathID=\''.$param['form_data']['PathIDTo'].'\''."\n"
.'AND ('."\n"
//.'('."\n"
//.'#Когда уровень родителя, куда копируем равен уровня ребенка плю один'."\n"
//.'#IF c.Type=5 разрешаем копировать файлы в предметы, приравнивая файл к папке'."\n"
.'  IF(c.Type=5,4,c.Type)=p.Type+1'."\n"
.'  OR('."\n"
//.'  #Запрешаем копировать файл в файл'."\n"
.'      p.Type+c.Type-10!=0 '."\n"
.'      AND('."\n"
//.'        ('."\n"
//.'        #Разрешаем копировать папку в папку'."\n"
//.'        #IF c.Type=5 приравнивая файлы к папке'."\n"
.'          IF(c.Type=5,4,c.Type)=4 '."\n"
.'          AND '."\n"
//.'        #IF c.Type=5 приравнивая файлы к папке'."\n"
.'          IF(p.Type=5,4,p.Type)=4'."\n"
.'        )'."\n"
.'      )'."\n"
.' ) GROUP BY c.Type';

//echo '#$query_sql: <pre>'; print_r($query_sql); echo "</pre><br />\r\n";
$query = $this->database->query($query_sql);
//echo '#$query: <pre>'; print_r($query); echo "</pre><br />\r\n";
                if ($query['0']['isAllowTypeForOperation']){
                        return $query['0'];
                }else {
                        return false;
                }
}

        /**
         * Проверяем, что бы не копировать папку в саму себя
         *
         * @assert ($param) == $this->object->getDataForTest('isAllowRecursionForOperation',$param=array('test'=>'test'))
         * @param param
         */

        function isAllowRecursionForOperation($param)
        {
                $query_sql=
         //' #Проверяем, что бы не копировать папку в саму себя'."\n"
         ' SELECT f.PathID,f.ParentID,\'1\' isAllowRecursionForOperation'."\n"
         .'  FROM sa_models_files_path f'."\n"
                .' WHERE'."\n"
                .' f.PathID IN ('.$this->database->getFileIDForWhereQuery($param['form_data']['PathIDArray']).')'
         .'  AND'."\n"
         //.'  #Если'."\n"
         .'     IF'."\n"
         .'     ('."\n"
         //.'           #Есть вхождения выбраного  f.PathID из f таблицы с sub.PathID в под запросе'."\n"
         .'             LOCATE('."\n"
         //.'           ('."\n"
         .'                     f.ParentID,'."\n"
         .'               ('."\n"
         .'                     SELECT sub.ParentID'."\n"
         .'            FROM sa_models_files_path sub'."\n"
                .'            WHERE sub.'
                .'PathID=\''.$param['form_data']['PathIDTo'].'\''."\n"
         .'               )'."\n"
         .'             ),1,0'."\n"
         .'     )=0;'."\n";
                //echo '#$query_sql: <pre>'; print_r($query_sql); echo "</pre><br />\r\n";
                $query = $this->database->queryOrFalse($query_sql);
                //echo '#$query: <pre>'; print_r($query); echo "</pre><br />\r\n";
                //if (count($query)!=count($param['form_data']['PathIDArray'])){//TODO COMMENT
                        //return false;
                //}
                return $query;
        }


                function setResetForTest()
                {
                        include_once($_SERVER["DOCUMENT_ROOT"].'/components/com_sa/models/base/ModelsBaseDatabaseInstallTables.php');
                        $ModelsBaseDatabaseInstallTables = new ModelsDatabaseInstallTables($this->database);
                        $ModelsBaseDatabaseInstallTables->setResetFilesPath();
                }
        /**
         * Обнулить данные перед тестированием
   *
         * @assert () == $this->object->getDataForTest('setResetForTest')
         */

        function setCreateTableClass()
        {
                include_once($_SERVER["DOCUMENT_ROOT"].'/components/com_sa/models/base/ModelsBaseDatabaseInstallTables.php');
                $ModelsBaseDatabaseInstallTables = new ModelsDatabaseInstallTables($this->database);
                $ModelsBaseDatabaseInstallTables->setCreateFilesPath();
        }
        function setDropTableClass()
        {
                include_once($_SERVER["DOCUMENT_ROOT"].'/components/com_sa/models/base/ModelsBaseDatabaseInstallTables.php');
                $ModelsBaseDatabaseInstallTables = new ModelsDatabaseInstallTables($this->database);
                $ModelsBaseDatabaseInstallTables->setDropFilesPath();
        }
}
?>
 

evnine