Kaynağa Gözat

-hackpoint : type file

idleman 5 yıl önce
ebeveyn
işleme
6ff2560e69

+ 11 - 0
css/theme.css

@@ -44,6 +44,10 @@ input.form-control,input.form-control:active,input.form-control:focus{
 a {
     color: #728ead;
 }
+a:hover {
+    color: #8fbcec;
+}
+
 .check-component{
     border:0;
 }
@@ -135,4 +139,11 @@ a {
     box-shadow: 0px 0px 10px rgba(0,0,0,0.5);
     border-right: 2px solid #ff314f!important;
     background: rgb(52, 58, 64)!important;
+}
+
+div[data-type="dropzone"] > ul > li {
+    position: relative;
+    padding: 3px;
+    border-bottom: 1px solid #2f2f2f;
+    background: #343a40;
 }

+ 0 - 1
js/main.js

@@ -525,7 +525,6 @@ function init_components(selector){
 					});
 				}
 				var preview = '<li data-path="{{path}}">';
-
 			    preview += input.get(0).hasAttribute('data-preview') ? '<img style="margin: 0 5px;float: left;max-height:100px;max-width:80px;" src="{{url}}"/>' : '<i class="fa {{icon}}"></i>';
 				preview += ' <a {{#url}}href="{{url}}"{{/url}} target="_blank" title="{{name}}">{{name}}{{lastModification}}</a> '+customActions+' <i class="fas fa-times pointer '+(input.attr('data-delete')?'':'hidden')+'" onclick="{{#temporary}}dropzone_delete_file(this);{{/temporary}}{{^temporary}}'+input.attr('data-delete')+'(this){{/temporary}}"></i><div class="clear"></div></li>';
 

+ 11 - 2
plugin/hackpoint/action.php

@@ -170,8 +170,10 @@ switch($_['action']){
 			require_once(__DIR__.SLASH.'Resource.class.php');
 			require_once(__DIR__.SLASH.'ResourceType.class.php');
 			$item = Resource::provide('id',1);
-
 			$sketch = $item->join('sketch');
+			if( !is_object($sketch) || $sketch->id==0){
+				$sketch = Sketch::getById($_['sketch']);
+			}
 			if($sketch->creator != $myUser->login) throw new Exception("Permissions insuffisantes",403);
 
 			if(!isset($_['type']) && $item->id!=0) $_['type'] = $item->type;
@@ -276,6 +278,11 @@ switch($_['action']){
 			$row = File::move(File::temp().$file['path'],str_replace(File::dir(),'',$folder).SLASH.$name);
 			$row['url'] = 'action.php?action=hackpoint_download_file&file='.base64_encode('sketch'.SLASH.$resource->sketch.SLASH.$resource->id.SLASH.rawurlencode($file['name']));
 			$row['oldPath'] = $file['path'];
+
+			if(!in_array( getExt($file['name']), array('jpg','jpeg','png','bmp','svg'))){
+				$row['icon'] = $file['icon'];//getExtIcon( getExt($file));
+			}
+
 			$response['files'][] = $row;
 		}
 		
@@ -383,7 +390,9 @@ switch($_['action']){
 	case 'hackpoint_download_file':
 		Action::write(function(&$response){
 			global $myUser,$_;
-			$file = str_replace(array('..'),array(''),base64_decode($_['file']));
+			$file = str_replace(array('..'),array(''),urldecode(base64_decode($_['file'])));
+			
+		
 			$file = File::dir().'hackpoint'.SLASH.$file;
 			File::downloadFile($file);
 		});

+ 8 - 2
plugin/hackpoint/js/main.js

@@ -386,8 +386,14 @@ function resource_add_document(files){
 			line.find('a').attr('href', file.url);
 			line.find('i.pointer').attr('onclick', 'resource_delete_document(this)');
 			if($('.hackpoint').hasClass('readonly')) line.find('i.pointer').hide();
-			line.find('img').attr('src', file.url);
-
+			
+			
+			if(!file.icon){
+				line.find('img').attr('src', file.url);
+			}else{
+				line.find('img').after('<i class="'+file.icon+'"></i>');
+				line.find('img').remove();
+			}
 			$('#sketch-editor [data-type="dropzone"] input:not(:visible)').val('');
 			
 		});

+ 82 - 0
plugin/hackpoint/types/FileType.class.php

@@ -0,0 +1,82 @@
+<?php
+class FileType {
+
+	public static function manifest(){
+		return array(
+			'uid' => 'file',
+			'label' => 'Fichiers',
+			'description' => 'Fichiers attachés',
+			'fromExtension' => array('*'),
+			'icon' => 'far fa-file-archive',
+			'color' => '#ffffff',
+			'background' => '#d7332d'
+			
+		);
+	}
+
+	//Import depuis un glisser déposé du fichier
+	public static function fromFile($resource){
+		// $resource->save();
+		// $ext = getExt($resource->label);
+		// $name = $resource->id.'.'.$ext;
+		// file_put_contents(SKETCH_PATH.$name,$resource->content);
+		// $resource->content = $name;
+		// return $resource;
+	}
+
+	//Import depuis un flux json compressé de la ressource
+	public static function fromJson($resource){
+		// $resource->save();
+		// $stream = base64_decode($resource->content);
+		// $resource->content = $resource->id.'.png';
+		// file_put_contents(SKETCH_PATH.$resource->content,$stream);
+		// return $resource;
+	}
+	
+	//export en fichier JSON compressé de la ressource
+	public static function toJson($resource){
+		// $resource = $resource->toArray();
+		// $resource['content'] = base64_encode(file_get_contents(SKETCH_PATH.$resource['content']));
+		// return $resource;
+	}
+
+	public static function toFile($resource){
+
+		// $ext = getExt($resource->content);
+		// $infos = self::manifest();
+		// return array(
+		// 	'name'=> slugify($resource->label).'.'.$ext,
+		// 	'content' => file_exists(SKETCH_PATH.$resource->content) ? file_get_contents(SKETCH_PATH.$resource->content) : ''
+		// );
+	}
+
+	
+	/* EDITION */
+	public static function toHtml($resource,$sketch=null){
+		$infos = self::manifest();
+
+		$response = array();
+		//.$resource->id
+		$files = array();
+		
+		foreach(glob($resource->directory().SLASH.'*.*') as $file){
+			$files[] = array(
+				'path' => 'hackpoint'.SLASH.'sketch'.SLASH.$resource->sketch.SLASH.$resource->id.SLASH.utf8_encode(basename($file)),
+				'url' => 'action.php?action=hackpoint_download_file&file='.base64_encode('sketch'.SLASH.$resource->sketch.SLASH.$resource->id.SLASH.rawurlencode(basename($file))),
+				'name' => utf8_encode(basename($file)),
+				'icon' => getExtIcon(getExt($file))
+			);
+		}
+		
+
+		$response['html'] = '
+		<div data-type="dropzone" data-label="Faites glisser vo(s) fichier(s) dans cette zone ou cliquez dessus" data-delete="resource_delete_document" data-save="resource_add_document" class="form-control hackpoint-type-file" id="document" name="document">
+				'.json_encode($files ).'
+			</div>';
+		
+
+		return $response;
+	}
+
+}
+?>

+ 3 - 3
plugin/hackpoint/types/ImageType.class.php

@@ -61,15 +61,15 @@ class ImageType {
 		
 		foreach(glob($resource->directory().SLASH.'*.*') as $file){
 			$images[] = array(
-				'path' => 'hackpoint'.SLASH.'sketch'.SLASH.$resource->sketch.SLASH.$resource->id.SLASH.basename($file),
+				'path' => 'hackpoint'.SLASH.'sketch'.SLASH.$resource->sketch.SLASH.$resource->id.SLASH.utf8_encode(basename($file)),
 				'url' => 'action.php?action=hackpoint_download_file&file='.base64_encode('sketch'.SLASH.$resource->sketch.SLASH.$resource->id.SLASH.rawurlencode(basename($file))),
-				'name' => basename($file),
+				'name' => utf8_encode(basename($file)),
 				'icon' => getExtIcon(getExt($file))
 			);
 		}
 
 		$response['html'] = '
-		<div data-type="dropzone" data-preview data-label="Faites glisser vo(s) image(s) das cette zone ou cliquez dessus" data-delete="resource_delete_document" data-save="resource_add_document" data-allowed="jpg,bmp,gif,png,jpeg,svg" class="form-control hackpoint-type-image" id="document" name="document">
+		<div data-type="dropzone" data-preview data-label="Faites glisser vo(s) image(s) dans cette zone ou cliquez dessus" data-delete="resource_delete_document" data-save="resource_add_document" data-allowed="jpg,bmp,gif,png,jpeg,svg" class="form-control hackpoint-type-image" id="document" name="document">
 				'.json_encode($images).'
 			</div>';