Advertisement
shapoval

ImageUpload

Aug 22nd, 2018
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.81 KB | None | 0 0
  1. <?php
  2.  
  3. class ImageUpload extends \Bingo\FormElement {
  4.    
  5.     static function register() {
  6.        
  7.         \Form::extend("imageUpload",    
  8.         function ($form,$name,$label=false,$rules='',$value=false,$folder=false,$thumbSize=150,$multiple=false,$vertical=false,$atts=false) {
  9.             $form->add(new ImageUpload(compact('name','label','rules','value','folder','thumbSize','multiple','vertical')));
  10.             return $form;
  11.         });
  12.        
  13.     }
  14.    
  15.     function __construct($args) {
  16.         parent::__construct($args);
  17.        
  18.         $rules = $this->rules;
  19.        
  20.         if (is_string($rules)) $rules = explode('|',$rules);
  21.         if (!is_array($rules)) $rules = array($rules);
  22.        
  23.         $this->rules = array_merge(array(
  24.             function ($val,$el) {
  25.                 if ($val=='keep') return $el->value;
  26.                 $new = false;
  27.                
  28.                 if ($val=='upload') {
  29.                     $parts = explode("[",$el->name);
  30.                     foreach ($parts as $p=>$part) $parts[$p] = str_replace("]","",$part);
  31.                    
  32.                     $tmp_name = false;
  33.                     $file_name = false;
  34.                     $error = false;
  35.                    
  36.                     foreach ($parts as $p=>$part) {
  37.                         if ($p==0) {
  38.                             $tmp_name = @$_FILES["file_".$part]['tmp_name'];
  39.                             $file_name = @$_FILES["file_".$part]['name'];
  40.                             $error = @$_FILES["file_".$part]['error'];
  41.                         } else {
  42.                             $tmp_name = @$tmp_name[$part];
  43.                             $file_name = @$file_name[$part];
  44.                             $error = @$error[$part];
  45.                         }
  46.                     }
  47.                    
  48.                     $errors = is_array($error) ? $error : array($error);
  49.                     foreach ($errors as $err) {
  50.                         if ($err==UPLOAD_ERR_FORM_SIZE || $err==UPLOAD_ERR_INI_SIZE) {
  51.                             throw new \ValidationException('File is too large');
  52.                         }
  53.                         if ($err!=UPLOAD_ERR_OK && $err!=UPLOAD_ERR_NO_FILE) {
  54.                             throw new \ValidationException('Upload error #'.$err.', contact server administrator');
  55.                         }
  56.                     }
  57.                    
  58.                    
  59.                     if ($file_name && $tmp_name) {
  60.                         if (is_array($file_name)) {
  61.                             $ret = array();
  62.                             foreach ($file_name as $i=>$f) {
  63.                                 $pinfo = pathinfo($file_name[$i]);
  64.                                 $new_name = $pinfo['filename']."_".uniqid().(isset($pinfo["extension"]) ? ".".$pinfo["extension"] : '');
  65.                                 $ret[] = array('old'=>$el->value,'tmp'=>$tmp_name[$i],'new'=>$new_name);
  66.                             }
  67.                             return $ret;
  68.                         } else {
  69.                             $pinfo = pathinfo($file_name);
  70.                             $new_name = $pinfo['filename']."_".uniqid().(isset($pinfo["extension"]) ? ".".$pinfo["extension"] : '');
  71.                             return array('old'=>$el->value,'tmp'=>$tmp_name,'new'=>$new_name);
  72.                         }
  73.                     }
  74.                 }
  75.                 if (!$el->value) return false;
  76.                 return array('old'=>$el->value,'tmp'=>false,'new'=>false);
  77.             }
  78.         ),$rules);
  79.     }
  80.    
  81.     function render() {
  82.         echo "<div class='image-upload'>";
  83.         $this->render_label();
  84.         $this->render_element();
  85.         $this->render_error();
  86.         echo "</div>";
  87.     }
  88.    
  89.     function render_element() {
  90.         $value = $this->value;
  91.         $size = $this->thumbSize;
  92.         $vertical = $this->vertical;
  93.        
  94.         if (is_array($value)) {
  95.             $value = isset($value[0]) ? $value[0]['old'] : $value['old'];
  96.         }
  97.        
  98.         if ($vertical)
  99.             $style = "margin-top:".($size+10)."px;margin-bottom: 20px";
  100.         else
  101.             $style = "margin-left:".($size+10)."px;margin-bottom: 20px";
  102.        
  103.         echo "<div style='overflow:hidden'>";
  104.             if ($size) {
  105.                 echo "<div style='line-height:{$size}px;text-align:center;float:left;width:{$size}px;height:{$size}px;border:1px solid #aaa;font-size:0;'>";
  106.                 if ($value && file_exists(INDEX_DIR."/content/images_mysql/".$this->folder."/".$value)) {
  107.                     echo "<a class='colorbox' rel='upl' href='".INDEX_URL."/content/images_mysql/".$this->folder."/"._e($value)."'>";
  108.                     echo "<img style='display:inline-block;vertical-align:middle;' src='".r_url($this->folder."/".$value,$size,$size,false)."'>";
  109.                     echo "</a>";
  110.                 }
  111.                 echo "</div>";
  112.             } else {
  113.                 $str = $this->error ? '' : htmlspecialchars($value);
  114.                 echo "<div class='value' style='margin-top:2px'>".$str."</div>";
  115.             }
  116.             echo "<div class='image-select' style='".$style."'>";
  117.                 echo "<label><input style='width:auto' checked='checked' type='radio' {$this->attr('name')} value='keep'>Keep</label>";
  118.                 echo "<label><input style='width:auto' type='radio' {$this->attr('name')} value='upload'>Replace<br>";
  119.        
  120.                 $name = "file_".$this->name . ($this->multiple ? "[]":"");
  121.                 $accept = $size ? "accept='image/*'" : "";
  122.                 echo "<input onclick='$(this).parent().click()' style='width:80px' size='5' type='file' ".($this->multiple ? "multiple='multiple'":"")." name='$name' $accept />";
  123.                 echo "</label>";
  124.             echo "</div>";
  125.         echo "</div>";
  126.     }    
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement