File indexing completed on 2024-12-22 05:33:08

0001 <?php
0002 
0003 use Ocs\Storage\FilesystemAdapter;
0004 
0005 /**
0006  * ocs-fileserver
0007  *
0008  * Copyright 2016 by pling GmbH.
0009  *
0010  * This file is part of ocs-fileserver.
0011  *
0012  * ocs-fileserver is free software: you can redistribute it and/or modify
0013  * it under the terms of the GNU Affero General Public License as published by
0014  * the Free Software Foundation, either version 3 of the License, or
0015  * (at your option) any later version.
0016  *
0017  * ocs-fileserver is distributed in the hope that it will be useful,
0018  * but WITHOUT ANY WARRANTY; without even the implied warranty of
0019  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0020  * GNU Affero General Public License for more details.
0021  *
0022  * You should have received a copy of the GNU Affero General Public License
0023  * along with Foobar.  If not, see <http://www.gnu.org/licenses/>.
0024  **/
0025 class Owners extends BaseController
0026 {
0027 
0028     /**
0029      * @throws Flooer_Exception
0030      */
0031     public function deleteOwner() {
0032         if (!$this->_isAllowedAccess()) {
0033             $this->response->setStatus(403);
0034             throw new Flooer_Exception('Forbidden', LOG_NOTICE);
0035         }
0036 
0037         if (empty($this->request->client_id) || empty($this->request->id)) {
0038             $this->response->setStatus(404);
0039             throw new Flooer_Exception('Not found', LOG_NOTICE);
0040         }
0041 
0042         $clientId = $this->request->client_id;
0043         $ownerId = $this->request->id;
0044 
0045         // Remove profile
0046         $profile = $this->models->profiles->getProfileByClientIdAndOwnerId($clientId, $ownerId);
0047         if ($profile && $profile->active) {
0048             $this->models->profiles->{$profile->id} = array('active' => 0);
0049         }
0050 
0051         // Remove collections and related data
0052         $collections = $this->models->collections->fetchRowset('WHERE active = :active AND client_id = :client_id AND owner_id = :owner_id',
0053                                                                array(
0054                                                                    ':active'    => 1,
0055                                                                    ':client_id' => $clientId,
0056                                                                    ':owner_id'  => $ownerId
0057                                                                ));
0058         if ($collections) {
0059             $this->log->log("Remove collections (client:$clientId; owner:$ownerId)", LOG_NOTICE);
0060             foreach ($collections as $collection) {
0061                 $thumbnail = $this->appConfig->general['thumbnailsDir'] . '/collection_' . $collection->id . '.jpg';
0062                 if (is_file($thumbnail)) {
0063                     unlink($thumbnail);
0064                 }
0065 
0066                 $fileSystemAdapter = new FilesystemAdapter($this->appConfig);
0067                 //$fileSystemAdapter = new \Ocs\Storage\S3Adapter($this->appConfig);
0068 
0069                 // move collection to trash dir
0070                 $trashDir = $this->appConfig->general['filesDir'] . '/.trash';
0071                 if (!$fileSystemAdapter->testAndCreate($trashDir)) {
0072                     $this->response->setStatus(500);
0073                     throw new Flooer_Exception('Failed to remove the collection', LOG_ALERT);
0074                 }
0075                 $pathCollection = $this->appConfig->general['filesDir'] . '/' . $collection->name;
0076                 if (is_dir($pathCollection) && !rename($pathCollection,$trashDir . '/' . $collection->id . '-' . $collection->name))
0077                 {
0078                     $this->response->setStatus(500);
0079                     throw new Flooer_Exception('Failed to remove the collection', LOG_ALERT);
0080                 }
0081 
0082                 $this->models->collections->{$collection->id} = array('active' => 0);
0083                 //$this->models->collections_downloaded->deleteByCollectionId($collection->id);
0084                 //$this->models->files->deleteByCollectionId($collection->id);
0085                 //$this->models->files_downloaded->deleteByCollectionId($collection->id);
0086                 $this->models->favorites->deleteByCollectionId($collection->id);
0087                 $this->models->media->deleteByCollectionId($collection->id);
0088                 $this->models->media_played->deleteByCollectionId($collection->id);
0089             }
0090         }
0091 
0092         // Remove user or owner from favorites
0093         $favorites = $this->models->favorites->fetchRowset('WHERE client_id = :client_id' . ' AND (user_id = :user_id OR owner_id = :owner_id)',
0094                                                            array(
0095                                                                ':client_id' => $clientId,
0096                                                                ':user_id'   => $ownerId,
0097                                                                ':owner_id'  => $ownerId
0098                                                            ));
0099         if ($favorites) {
0100             foreach ($favorites as $favorite) {
0101                 unset($this->models->favorites->{$favorite->id});
0102             }
0103         }
0104 
0105         $this->_setResponseContent('success');
0106     }
0107 
0108 }