Source of file UploadFieldExtension.php
Size: 2,522 Bytes - Last Modified: 2021-12-23T10:04:34+00:00
/var/www/docs.ssmods.com/process/src/code/extensions/UploadFieldExtension.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 | <?php namespace Milkyway\SS\Core\Extensions; /** * Milkyway Multimedia * UploadField.php * * @package milkyway-multimedia/ss-mwm * @author Mellisa Hankins <mell@milkywaymultimedia.com.au> * @credit micschk <https://github.com/micschk> */ use SS_HTTPRequest as SS_HTTPRequest; use Extension as Extension; use Folder as Folder; class UploadFieldExtension extends Extension { private static $allowed_actions = [ 'index', ]; public function beforeCallActionHandler($request, &$action) { if($this->owner->hasClass('ss-upload-to-folder')) $this->setFolderFromRequest($request); if($action == 'upload') $action = 'fixedUpload'; } public function index($request) { return $this->owner->FieldHolder(); } protected function setFolderFromRequest($request) { if(($folder = $this->getFolderFromRequest($request)) && $folder->canView()) { $path = strpos($folder->RelativePath, ASSETS_DIR . '/') === 0 ? substr($folder->RelativePath, strlen(ASSETS_DIR . '/')) : $folder->RelativePath; $this->owner->FolderName = $path; } } protected function getFolderFromRequest($request) { $folderId = $request->getVar('folder'); return $folderId ? Folder::get()->byID($folderId) : null; } public function fixedUpload(SS_HTTPRequest $request) { // Use a new request that fixes the postVars to use the $_FILES passed in correct order if(strpos(trim($this->owner->Name, '[]'), '[') !== false) { $request = $this->fixRequestForArrayFields($request); } return $this->owner->upload($request); } protected function fixRequestForArrayFields(SS_HTTPRequest $request) { $postVars = $request->postVars(); $fileVars = array_intersect_key($postVars, $_FILES); $fieldName = $this->owner->Name; foreach($fileVars as $name => $attributes) { $nameParts = explode('][', trim(substr($fieldName, strlen($name) + 1), ']')); $newAttributes = []; $newValue = []; $values = null; foreach($attributes as $attributeName => $attributeValues) { $values = array_get($attributeValues, implode('.', $nameParts)); if(!$values || (is_array($values) && empty($values))) break; array_set($newAttributes, implode('.', $nameParts).'.'.$attributeName, $values); $newValue[$attributeName] = $values; } if(!$values) continue; $postVars[$name] = $newAttributes; $postVars[$fieldName] = $newValue; } return new SS_HTTPRequest( $request->httpMethod(), $request->getURL(true), $request->getVars(), $postVars, $request->getBody() ); } } |