コード例 #1
0
 /**
  * Determines the file types allowed to be uploaded
  *
  * @return bool True if the action was performed.
  */
 protected function taskListmedia()
 {
     if (!$this->authorizeTask('list media', ['admin.pages', 'admin.super'])) {
         return false;
     }
     $page = $this->admin->page(true);
     if (!$page) {
         $this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.NO_PAGE_FOUND')];
         return false;
     }
     $media_list = [];
     $media = new Media($page->path());
     foreach ($media->all() as $name => $medium) {
         $media_list[$name] = ['url' => $medium->cropZoom(150, 100)->url(), 'size' => $medium->get('size')];
     }
     $this->admin->json_response = ['status' => 'success', 'results' => $media_list];
     return true;
 }
コード例 #2
0
 /**
  * Used by the filepicker field to get a list of files in a folder.
  */
 protected function taskGetFilesInFolder()
 {
     if (!$this->authorizeTask('save', $this->dataPermissions())) {
         return false;
     }
     $data = $this->view == 'pages' ? $this->admin->page(true) : $this->prepareData([]);
     $settings = $data->blueprints()->schema()->getProperty($this->post['name']);
     if (isset($settings['folder'])) {
         $folder = $settings['folder'];
     } else {
         $folder = '@self';
     }
     // Do not use self@ outside of pages
     if ($this->view != 'pages' && in_array($folder, ['@self', 'self@'])) {
         $this->admin->json_response = ['status' => 'error', 'message' => sprintf($this->admin->translate('PLUGIN_ADMIN.FILEUPLOAD_PREVENT_SELF', null), $folder)];
         return false;
     }
     // Set destination
     $folder = Folder::getRelativePath(rtrim($folder, '/'));
     $folder = $this->admin->getPagePathFromToken($folder);
     $media = new Media($folder);
     $available_files = [];
     foreach ($media->all() as $name => $medium) {
         $available_files[] = $name;
     }
     // Peak in the flashObject for optimistic filepicker updates
     $pending_files = [];
     $sessionField = base64_encode($this->grav['uri']->url());
     $flash = $this->admin->session()->getFlashObject('files-upload');
     if ($flash && isset($flash[$sessionField])) {
         foreach ($flash[$sessionField] as $field => $data) {
             foreach ($data as $file) {
                 if (dirname($file['path']) === $folder) {
                     $pending_files[] = $file['name'];
                 }
             }
         }
     }
     $this->admin->session()->setFlashObject('files-upload', $flash);
     // Handle Accepted file types
     // Accept can only be file extensions (.pdf|.jpg)
     if (isset($settings['accept'])) {
         $available_files = array_filter($available_files, function ($file) use($settings) {
             return $this->filterAcceptedFiles($file, $settings);
         });
         $pending_files = array_filter($pending_files, function ($file) use($settings) {
             return $this->filterAcceptedFiles($file, $settings);
         });
     }
     $this->admin->json_response = ['status' => 'success', 'files' => array_values($available_files), 'pending' => array_values($pending_files), 'folder' => $folder];
     return true;
 }