Skip to content
Snippets Groups Projects
docservers_controler.php 65 KiB
Newer Older
  • Learn to ignore specific revisions
  • *   Copyright 2008-2011 Maarch
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
    *   This file is part of Maarch Framework.
    
    *
    *   Maarch Framework is free software: you can redistribute it and/or modify
    *   it under the terms of the GNU General Public License as published by
    *   the Free Software Foundation, either version 3 of the License, or
    *   (at your option) any later version.
    *
    *   Maarch Framework is distributed in the hope that it will be useful,
    *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    *   GNU General Public License for more details.
    *
    *   You should have received a copy of the GNU General Public License
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
    *   along with Maarch Framework. If not, see <http://www.gnu.org/licenses/>.
    
    * @brief Contains the docservers_controler Object
    
    * (herits of the BaseObject class)
    
    * @file
    * @author Luc KEULEYAN - BULL
    * @author Laurent Giovannoni
    * @date $date$
    * @version $Revision$
    * @ingroup core
    */
    
    
    //Loads the required class
    
        require_once 'core/class/class_request.php';
    
        require_once 'core/class/docservers.php';
        require_once 'core/docservers_tools.php';
        require_once 'core/core_tables.php';
        require_once 'core/class/ObjectControlerAbstract.php';
        require_once 'core/class/ObjectControlerIF.php';
        require_once 'core/class/class_security.php';
        require_once 'core/class/class_resource.php';
        require_once 'core/class/class_history.php';
    
    } catch (Exception $e) {
    
        functions::xecho($e->getMessage()) . ' // ';
    
    }
    
    /**
     * Class for controling docservers objects from database
     */
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
    class docservers_controler
        extends ObjectControler
        implements ObjectControlerIF
    {
    
        /**
         * Save given object in database:
         * - make an update if object already exists,
         * - make an insert if new object.
         * Return updated object.
         * @param docservers $docservers
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
         * @return array
    
        public function save($docserver, $mode='')
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
        {
    
            //var_dump($docserver);
            $control = array();
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            if (!isset($docserver) || empty($docserver)) {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $control = array(
    
                    'status' => 'ko',
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    'value' => '',
                    'error' => _DOCSERVER_EMPTY,
                );
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $docserver = $this->isADocserver($docserver);
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $this->set_foolish_ids(
                array(
    
                    'docserver_id',
                    'docserver_type_id',
                    'coll_id',
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    'docserver_location_id',
                )
            );
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $this->set_specific_id('docserver_id');
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            if ($mode == 'up') {
                $control = $this->control($docserver, 'up');
                if ($control['status'] == 'ok') {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    if ($this->update($docserver)) {
    
                        $this->createPackageInformation($docserver);
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                        $control = array(
    
                            'status' => 'ok',
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                            'value' => $docserver->docserver_id,
                        );
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                        if ($_SESSION['history']['docserversadd'] == 'true') {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                            $history->add(
    
                                _DOCSERVERS_TABLE_NAME,
                                $docserver->docserver_id,
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                                'UP','docserversadd',
    
                                _DOCSERVER_UPDATED . ' : '
                                . $docserver->docserver_id,
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                                $_SESSION['config']['databasetype']
                            );
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                        $control = array(
    
                            'status' => 'ko',
                            'value' => '',
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                            'error' => _PB_WITH_DOCSERVER,
                        );
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $control = $this->control($docserver, 'add');
                if ($control['status'] == 'ok') {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    if ($this->insert($docserver)) {
    
                        $this->createPackageInformation($docserver);
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                        $control = array(
    
                            'status' => 'ok',
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                            'value' => $docserver->docserver_id,
                        );
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                        if ($_SESSION['history']['docserversadd'] == 'true') {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                            $history->add(
    
                                _DOCSERVERS_TABLE_NAME,
                                $docserver->docserver_id,
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                                'ADD','docserversadd',
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                                _DOCSERVER_ADDED . ' : ' . $docserver->docserver_id,
                                $_SESSION['config']['databasetype']
                            );
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                        $control = array(
    
                            'status' => 'ko',
                            'value' => '',
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                            'error' => _PB_WITH_DOCSERVER,
                        );
    
                    }
                }
            }
            return $control;
        }
    
        /**
        * control the docserver object before action
        *
        * @param  $docserver docserver object
        * @return array ok if the object is well formated, ko otherwise
        */
    
        private function control($docserver, $mode)
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
        {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $error = '';
            if ($mode == 'add') {
    
                if (isset($docserver->docserver_id)
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    && $docserver->docserver_id <> ''
                ) {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    $docserver->docserver_id = 
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                        $f->wash(
    
                            $docserver->docserver_id,
                            'nick',
                            _DOCSERVER_ID . ' ',
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                            'yes', 0, 32
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                        );
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    $error .= _DOCSERVER_ID . ' ' . _IS_EMPTY . '#';
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $docserver->docserver_type_id = 
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $f->wash(
    
                    $docserver->docserver_type_id,
                    'no',
                    _DOCSERVER_TYPES . ' ',
                    'yes',
                    0,
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    32
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                );
            $docserver->device_label = 
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $f->wash(
    
                    $docserver->device_label,
                    'no',
                    _DEVICE_LABEL . ' ',
                    'yes',
                    0,
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    255
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                );
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            if ($docserver->is_readonly == '') {
                $docserver->is_readonly = 'false';
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $docserver->is_readonly = 
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $f->wash(
    
                    $docserver->is_readonly,
                    'no',
                    _IS_READONLY . ' ',
                    'yes',
                    0,
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    5
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                );
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            if ($docserver->is_readonly == 'false') {
    
                $docserver->is_readonly = false;
            } else {
                $docserver->is_readonly = true;
            }
    
            if (isset($docserver->size_limit_number)
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                && !empty($docserver->size_limit_number)
            ) {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $docserver->size_limit_number = 
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    $f->wash(
    
                        $docserver->size_limit_number,
                        'no',
                        _SIZE_LIMIT . ' ',
                        'yes',
                        0,
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                        255
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    );
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                if ($docserver->size_limit_number == 0) {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    $error .= _SIZE_LIMIT . ' ' . _IS_EMPTY . '#';
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                if ($this->sizeLimitControl($docserver)) {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    $error .= _SIZE_LIMIT_UNAPPROACHABLE . '#';
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                if ($this->actualSizeNumberControl($docserver)) {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    $error .= _SIZE_LIMIT_LESS_THAN_ACTUAL_SIZE . '#';
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            } else {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $error .= _SIZE_LIMIT . ' ' . _IS_EMPTY . '#';
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $docserver->path_template = 
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $f->wash(
    
                    $docserver->path_template,
                    'no',
                    _PATH_TEMPLATE . ' ',
                    'yes',
                    0,
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    255
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                );
    
            if (!is_dir($docserver->path_template)) {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $error .= _PATH_OF_DOCSERVER_UNAPPROACHABLE . '#';
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                // $Fnm = $docserver->path_template . 'test_docserver.txt';
    
                if (!is_writable($docserver->path_template)
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    || !is_readable($docserver->path_template)
                ) {
    
                    $error .= _THE_DOCSERVER_DOES_NOT_HAVE_THE_ADEQUATE_RIGHTS;
                }
            }
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $docserver->coll_id = 
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $f->wash(
    
                    $docserver->coll_id,
                    'no',
                    _COLLECTION . ' ',
                    'yes',
                    0,
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    32
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                );
            $docserver->priority_number = 
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $f->wash(
    
                    $docserver->priority_number,
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    'num',
    
                    _PRIORITY . ' ',
                    'yes',
                    0,
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    6
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                );
            $docserver->docserver_location_id = 
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $f->wash(
    
                    $docserver->docserver_location_id,
                    'no',
                    _DOCSERVER_LOCATIONS . ' ',
                    'yes',
                    0,
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    32
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                );
            $docserver->adr_priority_number = 
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $f->wash(
    
                    $docserver->adr_priority_number,
                    'num',
                    _ADR_PRIORITY . ' ',
                    'yes',
                    0,
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    6
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                );
    
            if ($mode == 'add'
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                && $this->docserversExists($docserver->docserver_id)
            ) {
                $error .= $docserver->docserver_id . ' ' . _ALREADY_EXISTS . '#';
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            if (!$this->adrPriorityNumberControl($docserver)) {
    
                $error .= _PRIORITY . ' ' . $docserver->adr_priority_number . ' '
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                        . _ALREADY_EXISTS_FOR_THIS_TYPE_OF_DOCSERVER . '#';
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            if (!$this->priorityNumberControl($docserver)) {
    
                $error .= _ADR_PRIORITY . $docserver->priority_number . '  '
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                        . _ALREADY_EXISTS_FOR_THIS_TYPE_OF_DOCSERVER . '#';
    
            }
            $error .= $_SESSION['error'];
            //TODO:rewrite wash to return errors without html
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $error = str_replace('<br />', '#', $error);
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            if (!empty($error)) {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    $return = array(
    
                        'status' => 'ko',
                        'value' => $docserver->docserver_id,
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                        'error' => $error,
                    );
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $return = array(
    
                    'status' => 'ok',
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    'value' => $docserver->docserver_id,
                );
    
        * method to create package information file on the root of the docserver
    
        * @param  $docserver docserver object
        */
    
        private function createPackageInformation($docserver)
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
        {
    
            if (is_writable($docserver->path_template)
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                && is_readable($docserver->path_template)
            ) {
    
                require_once('core' . DIRECTORY_SEPARATOR . 'class'
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    . DIRECTORY_SEPARATOR . 'docserver_types_controler.php');
    
                $docserverTypeControler = new docserver_types_controler();
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $docserverTypeObject = $docserverTypeControler->get(
                    $docserver->docserver_type_id
                );
    
                $Fnm = $docserver->path_template . DIRECTORY_SEPARATOR
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                     . 'package_information';
    
                if (file_exists($Fnm)) {
                    unlink($Fnm);
                }
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $inF = fopen($Fnm, 'a');
                fwrite(
    
                    $inF,
                    _DOCSERVER_TYPE_ID . ' : '
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    . $docserverTypeObject->docserver_type_id . '\r\n'
                );
                fwrite(
    
                    $inF,
                    _DOCSERVER_TYPE_LABEL . ' : '
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    . $docserverTypeObject->docserver_type_label . '\r\n'
                );
                fwrite(
    
                    $inF,
                    _IS_CONTAINER . ' : ' . $docserverTypeObject->is_container
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    . '\r\n'
                );
                fwrite(
    
                    $inF,
                    _CONTAINER_MAX_NUMBER . ' : '
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    . $docserverTypeObject->container_max_number . '\r\n'
                );
                fwrite(
    
                    $inF,
                    _IS_COMPRESSED . ' : ' . $docserverTypeObject->is_compressed
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    . '\r\n'
                );
                fwrite(
    
                    $inF,
                    _COMPRESS_MODE . ' : '
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    . $docserverTypeObject->compression_mode . '\r\n'
                );
                fwrite(
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    _IS_META . ' : ' . $docserverTypeObject->is_meta . '\r\n'
                );
                fwrite(
    
                    $inF,
                    _META_TEMPLATE . ' : ' . $docserverTypeObject->meta_template
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    . '\r\n'
                );
                fwrite(
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    _IS_LOGGED . ' : ' . $docserverTypeObject->is_logged . '\r\n'
                );
                fwrite(
    
                    $inF,
                    _LOG_TEMPLATE . ' : ' . $docserverTypeObject->log_template
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    . '\r\n'
                );
                fwrite(
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    _IS_SIGNED . ' : ' . $docserverTypeObject->is_signed . '\r\n'
                );
                fwrite(
    
                    $inF,
                    _FINGERPRINT_MODE . ' : '
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    . $docserverTypeObject->fingerprint_mode . '\r\n'
                );
    
        /**
        * Inserts in the database (docservers table) a docserver object
        *
        * @param  $docserver docserver object
        * @return bool true if the insertion is complete, false otherwise
        */
    
        private function insert($docserver)
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
        {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $db = new Database();
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $docserver->enabled = 'Y';
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $docserver->creation_date = $db->current_datetime();
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $result = $this->advanced_insert($docserver);
    
            return $result;
        }
    
        /**
        * Updates in the database (docserver table) a docservers object
        *
        * @param  $docserver docserver object
        * @return bool true if the update is complete, false otherwise
        */
    
        private function update($docserver)
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
        {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            return $this->advanced_update($docserver);
    
        }
    
        /**
         * Get docservers with given id.
         * Can return null if no corresponding object.
         * @param $id Id of docservers to get
         * @return docservers
         */
    
        public function get($docserver_id)
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
        {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $this->set_foolish_ids(array('docserver_id'));
            $this->set_specific_id('docserver_id');
            $docserver = $this->advanced_get($docserver_id, _DOCSERVERS_TABLE_NAME);
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            if (get_class($docserver) <> 'docservers') {
    
                return null;
            } else {
                //var_dump($docserver);
                return $docserver;
            }
        }
    
        /**
         * get docservers with given id for a ws.
         * Can return null if no corresponding object.
         * @param $docserver_id of docservers to send
         * @return docservers
         */
    
        public function getWs($docserver_id)
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
        {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $this->set_foolish_ids(array('docserver_id'));
            $this->set_specific_id('docserver_id');
            $docserver = $this->advanced_get($docserver_id, _DOCSERVERS_TABLE_NAME);
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            if (get_class($docserver) <> 'docservers') {
    
                return null;
            } else {
                $docserver = $docserver->getArray();
                return $docserver;
            }
        }
    
        /**
         * Delete given docserver from database.
         * @param docservers $docservers
         */
    
        public function delete($docserver)
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
        {
    
            if ($docserver->docserver_id <> 'TEMPLATES') {
                $func = new functions();
                $control = array();
                if (!isset($docserver) || empty($docserver)) {
                    $control = array(
                        'status' => 'ko',
                        'value' => '',
                        'error' => _DOCSERVER_EMPTY,
                    );
                    return $control;
                }
                $docserver = $this->isADocserver($docserver);
                if (!$this->docserversExists($docserver->docserver_id)) {
                    $control = array(
                        'status' => 'ko',
                        'value' => '',
                        'error' => _DOCSERVER_NOT_EXISTS,
                    );
                    return $control;
                }
                if ($this->adrxLinkExists(
                    $docserver->docserver_id,
                    $docserver->coll_id
                    )
                ) {
                    $control = array('status' => 'ko', 'value' => '',
                    'error' => _DOCSERVER_ATTACHED_TO_ADR_X);
                    return $control;
                }
                if ($this->resxLinkExists(
                    $docserver->docserver_id,
                    $docserver->coll_id
    
                ) {
                    $control = array(
                        'status' => 'ko',
                        'value' => '',
                        'error' => _DOCSERVER_ATTACHED_TO_RES_X,
                    );
                    return $control;
                }
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $db = new Database();
    
                $query = "delete from " . _DOCSERVERS_TABLE_NAME
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                       . " where docserver_id = ?";
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    $stmt = $db->query($query, array($docserver->docserver_id));
    
                } catch (Exception $e) {
                    $control = array(
                        'status' => 'ko',
                        'value' => '',
                        'error' => _CANNOT_DELETE_DOCSERVER_ID
                        . ' ' . $docserver->docserver_id,
                    );
                }
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $control = array(
    
                    'status' => 'ok',
                    'value' => $docserver->docserver_id,
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                );
    
                if ($_SESSION['history']['docserversdel'] == 'true') {
                    $history = new history();
                    $history->add(
                        _DOCSERVERS_TABLE_NAME,
                        $docserver->docserver_id,
                        'DEL','docserversdel',
                        _DOCSERVER_DELETED . ' : ' . $docserver->docserver_id,
                        $_SESSION['config']['databasetype']
                    );
                }
            } else {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $control = array(
    
                    'status' => 'ko',
                    'value' => '',
                    'error' => _CANNOT_DELETE_DOCSERVER_ID
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    . ' ' . $docserver->docserver_id,
                );
    
            }
            return $control;
        }
    
        /**
        * Disables a given docservers
        *
        * @param  $docserver docservers object
        * @return bool true if the disabling is complete, false otherwise
        */
    
        public function disable($docserver)
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
        {
    
            if ($docserver->docserver_id <> 'TEMPLATES') {
                $control = array();
                if (!isset($docserver) || empty($docserver)) {
                    $control = array(
                        'status' => 'ko',
                        'value' => '',
                        'error' => _DOCSERVER_EMPTY,
                    );
                    return $control;
                }
                $docserver = $this->isADocserver($docserver);
                $this->set_foolish_ids(array('docserver_id'));
                $this->set_specific_id('docserver_id');
                if ($this->advanced_disable($docserver)) {
                    $control = array(
                        'status' => 'ok',
                        'value' => $docserver->docserver_id,
                    );
                    if ($_SESSION['history']['docserversban'] == 'true') {
                        $history = new history();
                        $history->add(
                            _DOCSERVERS_TABLE_NAME,
                            $docserver->docserver_id,
                            'BAN','docserversban',
                            _DOCSERVER_DISABLED . ' : ' . $docserver->docserver_id,
                            $_SESSION['config']['databasetype']
                        );
                    }
                } else {
                    $control = array(
                        'status' => 'ko',
                        'value' => '',
                        'error' => _PB_WITH_DOCSERVER,
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    );
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $control = array(
    
                    'status' => 'ko',
                    'value' => '',
    
                    'error' => _CANNOT_SUSPEND_DOCSERVER . ' ' . $docserver->docserver_id,
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                );
    
            }
            return $control;
        }
    
        /**
        * Enables a given docserver
        *
        * @param  $docserver docservers object
        * @return bool true if the enabling is complete, false otherwise
        */
    
        public function enable($docserver)
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
        {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            if (!isset($docserver) || empty($docserver)) {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $control = array(
    
                    'status' => 'ko',
                    'value' => '',
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    'error' => _DOCSERVER_EMPTY,
                );
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $docserver = $this->isADocserver($docserver);
            $this->set_foolish_ids(array('docserver_id'));
            $this->set_specific_id('docserver_id');
            if ($this->advanced_enable($docserver)) {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $control = array(
    
                    'status' => 'ok',
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    'value' => $docserver->docserver_id,
                );
                if ($_SESSION['history']['docserversallow'] == 'true') {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    $history->add(
    
                        _DOCSERVERS_TABLE_NAME,
                        $docserver->docserver_id,
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                        'VAL','docserversallow',
    
                        _DOCSERVER_ENABLED . ' : ' . $docserver->docserver_id,
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                        $_SESSION['config']['databasetype']
                    );
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $control = array(
    
                    'status' => 'ko',
                    'value' => '',
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    'error' => _PB_WITH_DOCSERVER,
                );
    
            }
            return $control;
        }
    
        /**
        * Fill a docserver object with an object if it's not a docserver
        *
        * @param  $object ws docserver object
        * @return object docservers
        */
    
        private function isADocserver($object)
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
        {
            if (get_class($object) <> 'docservers') {
    
                $func = new functions();
                $docserverObject = new docservers();
                $array = array();
                $array = $func->object2array($object);
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                foreach (array_keys($array) as $key) {
    
                    $docserverObject->{$key} = $array[$key];
    
                }
                return $docserverObject;
            } else {
                return $object;
            }
        }
    
        /**
        * Test if a given docserver exists
        *
        * @param  $docserver docservers object
        * @return bool true if exists, false otherwise
        */
    
        public function docserversExists($docserver_id)
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
        {
            if (!isset($docserver_id) || empty($docserver_id)) {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            }
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $db = new Database();
    
            $query = "select docserver_id from " . _DOCSERVERS_TABLE_NAME
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                   . " where docserver_id = ?";
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $stmt = $db->query($query, array($docserver_id));
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            } catch (Exception $e) {
    
                echo _UNKNOWN . _DOCSERVER . ' ' . functions::xssafe($docserver_id) . ' // ';
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            if ($stmt->rowCount() > 0) {
    
                return true;
            }
            return false;
        }
    
        /**
        *Check if the docserver is linked to a ressource
        *@param docserver_id docservers
        *@return bool true if it's linked
        */
    
        public function resxLinkExists($docserver_id, $coll_id)
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
        {
    
            if ($coll_id == 'templates') {
                return false;
            }
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $security = new security();
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $db = new Database();
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $tableName = $security->retrieve_table_from_coll($coll_id);
    
            if (!isset($tableName) || empty($tableName)) {
                return false;
            }
            $query = "select docserver_id from " . $tableName
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                   . " where docserver_id = ?";
            $stmt = $db->query($query, array($docserver_id));
            if ($stmt->rowCount() > 0) {
    
            return false;
    
        }
    
        /**
        *Check if the docserver is linked to a ressource address
        *@param docserver_id docservers
        *@return bool true if it's linked
        */
    
        public function adrxLinkExists($docserver_id, $coll_id)
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
        {
    
            $security = new security();
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $db = new Database();
    
            $adrName = $security->retrieveAdrFromColl($coll_id);
            if (!isset($adrName) || empty($adrName)) {
                return false;
            }
            $query = "select docserver_id from " . $adrName
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                   . " where docserver_id = ?";
            $stmt = $db->query($query, array($docserver_id));
            if ($stmt->rowCount() > 0) {
    
                return true;
            }
        }
    
        /**
        * Check if two docservers have the same priorities
        *
        * @param $docserver docservers object
        * @return bool true if the control is ok
        */
    
        private function adrPriorityNumberControl($docserver)
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
        {
    
            if (!isset($docserver)
                || empty($docserver)
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                || empty($docserver->adr_priority_number)
            ) {
                return false;
            }
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $db = new Database();
    
            $query = "select adr_priority_number from " . _DOCSERVERS_TABLE_NAME
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                   . " where adr_priority_number = ? AND docserver_type_id = ?"
                   . " AND docserver_id <> ?";
            $stmt = $db->query(
                $query, 
                array(
                    $docserver->adr_priority_number, 
                    $docserver->docserver_type_id, 
                    $docserver->docserver_id 
                )
            );
            if ($stmt->rowCount() > 0) {
    
                return false;
            }
            return true;
        }
    
        /**
        * Check if two docservers have the same priorities
        *
        * @param $docserver docservers object
        * @return bool true if the control is ok
        */
    
        private function priorityNumberControl($docserver)
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
        {
    
            if (!isset($docserver)
                || empty($docserver)
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                || empty($docserver->priority_number)
            ) {
                return false;
            }
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $db = new Database();
    
            $query = "select priority_number from " . _DOCSERVERS_TABLE_NAME
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                   . " where priority_number = ? AND docserver_type_id = ?"
                   . " AND docserver_id <> ?";
            $stmt = $db->query(
                $query, 
                array(
                    $docserver->priority_number, 
                    $docserver->docserver_type_id, 
                    $docserver->docserver_id 
                )
            );
            if ($stmt->rowCount() > 0) {
    
                return false;
            }
            return true;
        }
    
        /**
        * Check if the docserver actual size is less than the size limit
        *
        * @param $docserver docservers object
        * @return bool true if the control is ok
        */
    
        public function actualSizeNumberControl($docserver)
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
        {
            if (!isset($docserver) || empty($docserver)) {
                return false;
            }
    
            $size_limit_number = floatval($docserver->size_limit_number);
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $size_limit_number = $size_limit_number * 1000 * 1000 * 1000;
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $db = new Database();
    
            $query = "select actual_size_number from "  . _DOCSERVERS_TABLE_NAME
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                   . " where docserver_id = ?";
            $stmt = $db->query($query, array($docserver->docserver_id));
            $queryResult = $stmt->fetchObject();
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            if (isset($queryResult->actual_size_number)) {
    
                $actual_size_number = floatval($queryResult->actual_size_number);
            } else {
                $actual_size_number = 0;
            }
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            if ($size_limit_number < $actual_size_number) {
    
                return true;
            } else {
                return false;
            }
        }
    
        /**
        * Check if the docserver size has not reached the limit
        *
        * @param $docserver docservers object
        * @return bool true if the control is ok
        */
    
        private function sizeLimitControl($docserver)
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
        {
    
            $docserver->size_limit_number = floatval($docserver->size_limit_number);
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $maxsizelimit = floatval(
                $_SESSION['docserversFeatures']['DOCSERVERS']['MAX_SIZE_LIMIT']
            ) * 1000 * 1000 * 1000;
            if (!isset($docserver) || empty($docserver)) {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            }
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            if ($docserver->size_limit_number < $maxsizelimit) {
    
                return false;
            } else {
                return true;
            }
        }
    
        /**
         * Get docservers to insert a new doc.
         * Can return null if no corresponding object.
         * @param  $coll_id  string Collection identifier
         * @return docservers
         */
    
        public function getDocserverToInsert($collId)
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
        {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $db = new Database();
    
            $query = "select priority_number, docserver_id from "
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                   . _DOCSERVERS_TABLE_NAME . " where is_readonly = 'N' and "
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                   . " enabled = 'Y' and coll_id = ? order by priority_number";
            $stmt = $db->query($query, array($collId));
            $queryResult = $stmt->fetchObject();
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            if ($queryResult->docserver_id <> '') {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $docserver = $this->get($queryResult->docserver_id);
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                if (isset($docserver->docserver_id)) {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                } else {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                }
    
         * @param   $collId string collection resource
         * @param   $fileInfos array , contains :
    
         *          tmpDir : path to tmp directory
         *          size : size of the doc
         *          format : format of the doc
         *          tmpFileName : file name of the doc in Maarch tmp directory
         * @return  array of docserver data for res_x else return error
         */
    
        public function storeResourceOnDocserver($collId, $fileInfos)
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
        {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $docserver = $this->getDocserverToInsert($collId);
    
    SNA's avatar
    SNA committed
            $tmpSourceCopy = '';
    
            $func = new functions();
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            if (empty($docserver)) {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $storeInfos = array(
    
                    'error' => _DOCSERVER_ERROR . ' : '
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    . _NO_AVAILABLE_DOCSERVER . ' .  ' . _MORE_INFOS . '.',
                );
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $newSize = $this->checkSize($docserver, $fileInfos['size']);
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            if ($newSize == 0) {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $storeInfos = array(
    
                    'error' => _DOCSERVER_ERROR . ' : '
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    . _NOT_ENOUGH_DISK_SPACE . ' .  ' . _MORE_INFOS . '.',
                );
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            if ($fileInfos['tmpDir'] == '') {
    
                $tmp = $_SESSION['config']['tmppath'];
            } else {
                $tmp = $fileInfos['tmpDir'];
            }
            $d = dir($tmp);
            $pathTmp = $d->path;
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            while ($entry = $d->read()) {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                if ($entry == $fileInfos['tmpFileName']) {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    $tmpSourceCopy = $pathTmp . $entry;
    
            $pathOnDocserver = array();
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $pathOnDocserver = Ds_createPathOnDocServer(
                $docserver->path_template
            );
            $docinfo = $this->getNextFileNameInDocserver(
                $pathOnDocserver['destinationDir']
            );
            if ($docinfo['error'] <> '') {
    
                 $_SESSION['error'] = _FILE_SEND_ERROR . '. '._TRY_AGAIN . '. '
                                    . _MORE_INFOS . ' : <a href=\'mailto:'
                                    . $_SESSION['config']['adminmail'] . '\'>'
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                                    . $_SESSION['config']['adminname'] . '</a>';
    
            require_once('core' . DIRECTORY_SEPARATOR . 'class'
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                . DIRECTORY_SEPARATOR . 'docserver_types_controler.php');
    
            $docserverTypeControler = new docserver_types_controler();
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $docserverTypeObject = $docserverTypeControler->get(
                $docserver->docserver_type_id
            );
    
            $docinfo['fileDestinationName'] .= '.'
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                . strtolower($func->extractFileExt($tmpSourceCopy));
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $copyResultArray = Ds_copyOnDocserver(
    
                $tmpSourceCopy,
                $docinfo,
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                $docserverTypeObject->fingerprint_mode
            );
    
    SNA's avatar
    SNA committed
            if (isset($copyResultArray['error']) && $copyResultArray['error'] <> '') {
    
                //second chance
                $docinfo = array();
                $copyResultArray = array();
                $docinfo = $this->getNextFileNameInDocserver(
                    $pathOnDocserver['destinationDir']
                );
                if ($docinfo['error'] <> '') {
                     $_SESSION['error'] = _FILE_SEND_ERROR . '. '._TRY_AGAIN . '. '
                                        . _MORE_INFOS . ' : <a href=\'mailto:'
                                        . $_SESSION['config']['adminmail'] . '\'>'
                                        . $_SESSION['config']['adminname'] . '</a>';
                }
                $docinfo['fileDestinationName'] .= '.'
                    . strtolower($func->extractFileExt($tmpSourceCopy));
                $copyResultArray = Ds_copyOnDocserver(
                    $tmpSourceCopy,
                    $docinfo,
                    $docserverTypeObject->fingerprint_mode
                );
                if (isset($copyResultArray['error']) && $copyResultArray['error'] <> '') {
                    $storeInfos = array('error' => $copyResultArray['error']);
                    return $storeInfos;
                }
    
            }
            $destinationDir = $copyResultArray['destinationDir'];
            $fileDestinationName = $copyResultArray['fileDestinationName'];
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $destinationDir = substr(
    
                $destinationDir,
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                strlen($docserver->path_template)
            ) . DIRECTORY_SEPARATOR;
            $destinationDir = str_replace(
    
                DIRECTORY_SEPARATOR,
                '#',