acf
This commit is contained in:
		
							
								
								
									
										153
									
								
								plugins/system/nrframework/fields/nrinlinefileupload.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										153
									
								
								plugins/system/nrframework/fields/nrinlinefileupload.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,153 @@ | ||||
| <?php | ||||
| /** | ||||
|  * @author          Tassos Marinos <info@tassos.gr> | ||||
|  * @link            https://www.tassos.gr | ||||
|  * @copyright       Copyright © 2024 Tassos All Rights Reserved | ||||
|  * @license         GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later | ||||
|  */ | ||||
|  | ||||
| defined('_JEXEC') or die('Restricted access'); | ||||
|  | ||||
| use Joomla\CMS\Layout\FileLayout; | ||||
| use Joomla\Registry\Registry; | ||||
| use Joomla\CMS\Language\Text; | ||||
|  | ||||
| require_once dirname(__DIR__) . '/helpers/field.php'; | ||||
|  | ||||
| class JFormFieldNRInlineFileUpload extends NRFormField | ||||
| { | ||||
| 	/** | ||||
| 	 * Method to get the field input markup. | ||||
| 	 * | ||||
| 	 * @return  string  The field input markup. | ||||
| 	 */ | ||||
| 	protected function getInput() | ||||
| 	{ | ||||
| 		$layout = new FileLayout('inlinefileupload', JPATH_PLUGINS . '/system/nrframework/layouts'); | ||||
|  | ||||
| 		$data = [ | ||||
| 			'value' => $this->value, | ||||
| 			'name' => $this->name, | ||||
| 			'accept' => $this->get('accept'), | ||||
| 			'upload_folder' => base64_encode($this->get('upload_folder')) | ||||
| 		]; | ||||
|  | ||||
| 		return $layout->render($data); | ||||
| 	} | ||||
|  | ||||
|     /** | ||||
|      * Handles the AJAX request | ||||
|      * | ||||
|      * @param   array    $options | ||||
|      * | ||||
|      * @return  array | ||||
|      */ | ||||
|     public function onAjax($options) | ||||
|     { | ||||
| 		$options = new Registry($options); | ||||
|  | ||||
| 		if ($options->get('action') == 'remove') | ||||
| 		{ | ||||
| 			$this->onRemove($options); | ||||
| 			return; | ||||
| 		} | ||||
|  | ||||
| 		$this->onUpload(); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * On file upload. | ||||
| 	 *  | ||||
| 	 * @return  string | ||||
| 	 */ | ||||
| 	private function onUpload() | ||||
| 	{ | ||||
| 		// Make sure we have a valid file passed | ||||
|         if (!$file = $this->app->input->files->get('file', null, 'cmd')) | ||||
|         { | ||||
|             echo json_encode([ | ||||
| 				'error' => true, | ||||
| 				'response' => Text::_('NR_UPLOAD_ERROR_INVALID_FILE') | ||||
| 			]); | ||||
| 			jexit(); | ||||
| 		} | ||||
|  | ||||
| 		// ensure an upload folder was given | ||||
| 		if (!$upload_folder = $this->app->input->get('upload_folder', null, 'cmd')) | ||||
| 		{ | ||||
|             echo json_encode([ | ||||
| 				'error' => true, | ||||
| 				'response' => Text::_('NR_UPLOAD_FOLDER_MISSING') | ||||
| 			]); | ||||
| 			jexit(); | ||||
| 		} | ||||
|  | ||||
| 		// ensure we can decode its value | ||||
| 		if (!$upload_folder = base64_decode($upload_folder)) | ||||
| 		{ | ||||
|             echo json_encode([ | ||||
| 				'error' => true, | ||||
| 				'response' => Text::_('NR_UPLOAD_FOLDER_INVALID') | ||||
| 			]); | ||||
| 			jexit(); | ||||
| 		} | ||||
|  | ||||
| 		$uploaded_file = null; | ||||
| 		$file_size = 0; | ||||
| 		$file_name = null; | ||||
|  | ||||
| 		// try to upload the file. | ||||
| 		try { | ||||
| 			$uploaded_file = \NRFramework\File::upload($file, JPATH_ROOT . DIRECTORY_SEPARATOR . $upload_folder, ['text/plain', 'text/csv'], false, true); | ||||
| 			$filePathInfo = NRFramework\File::pathinfo($uploaded_file); | ||||
| 			$file_name = $filePathInfo['basename']; | ||||
|             $file_size = file_exists($uploaded_file) ? filesize($uploaded_file) : 0; | ||||
| 			$file_size = $file_size ? number_format($file_size / 1024, 2) . ' KB' : $file_size; | ||||
| 		} catch (\Throwable $th) | ||||
| 		{ | ||||
|             echo json_encode([ | ||||
| 				'error' => true, | ||||
| 				'response' => $th->getMessage() | ||||
| 			]); | ||||
| 			jexit(); | ||||
| 		} | ||||
| 		 | ||||
| 		echo json_encode([ | ||||
| 			'error' => false, | ||||
| 			'response' => Text::_('NR_FILE_UPLOADED_SUCCESSFULLY'), | ||||
| 			'file_name' => base64_encode($file_name), | ||||
| 			'file' => base64_encode($uploaded_file), | ||||
| 			'file_size' => $file_size | ||||
| 		]); | ||||
| 		jexit(); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * On file removal. | ||||
| 	 *  | ||||
| 	 * @return  string | ||||
| 	 */ | ||||
| 	private function onRemove($options) | ||||
| 	{ | ||||
| 		if (!$file = $options->get('remove_file')) | ||||
| 		{ | ||||
|             echo json_encode([ | ||||
| 				'error' => true, | ||||
| 				'response' => Text::_('NR_UPLOAD_ERROR_INVALID_FILE') | ||||
| 			]); | ||||
| 			jexit(); | ||||
| 		} | ||||
|  | ||||
| 		// If file exists, remove it | ||||
| 		if (file_exists($file)) | ||||
| 		{ | ||||
| 			unlink($file); | ||||
| 		} | ||||
|  | ||||
| 		echo json_encode([ | ||||
| 			'error' => false, | ||||
| 			'response' => Text::_('NR_FILE_DELETED') | ||||
| 		]); | ||||
| 		jexit(); | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user