Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- class ImageUpload extends \Bingo\FormElement {
- static function register() {
- \Form::extend("imageUpload",
- function ($form,$name,$label=false,$rules='',$value=false,$folder=false,$thumbSize=150,$multiple=false,$vertical=false,$atts=false) {
- $form->add(new ImageUpload(compact('name','label','rules','value','folder','thumbSize','multiple','vertical')));
- return $form;
- });
- }
- function __construct($args) {
- parent::__construct($args);
- $rules = $this->rules;
- if (is_string($rules)) $rules = explode('|',$rules);
- if (!is_array($rules)) $rules = array($rules);
- $this->rules = array_merge(array(
- function ($val,$el) {
- if ($val=='keep') return $el->value;
- $new = false;
- if ($val=='upload') {
- $parts = explode("[",$el->name);
- foreach ($parts as $p=>$part) $parts[$p] = str_replace("]","",$part);
- $tmp_name = false;
- $file_name = false;
- $error = false;
- foreach ($parts as $p=>$part) {
- if ($p==0) {
- $tmp_name = @$_FILES["file_".$part]['tmp_name'];
- $file_name = @$_FILES["file_".$part]['name'];
- $error = @$_FILES["file_".$part]['error'];
- } else {
- $tmp_name = @$tmp_name[$part];
- $file_name = @$file_name[$part];
- $error = @$error[$part];
- }
- }
- $errors = is_array($error) ? $error : array($error);
- foreach ($errors as $err) {
- if ($err==UPLOAD_ERR_FORM_SIZE || $err==UPLOAD_ERR_INI_SIZE) {
- throw new \ValidationException('File is too large');
- }
- if ($err!=UPLOAD_ERR_OK && $err!=UPLOAD_ERR_NO_FILE) {
- throw new \ValidationException('Upload error #'.$err.', contact server administrator');
- }
- }
- if ($file_name && $tmp_name) {
- if (is_array($file_name)) {
- $ret = array();
- foreach ($file_name as $i=>$f) {
- $pinfo = pathinfo($file_name[$i]);
- $new_name = $pinfo['filename']."_".uniqid().(isset($pinfo["extension"]) ? ".".$pinfo["extension"] : '');
- $ret[] = array('old'=>$el->value,'tmp'=>$tmp_name[$i],'new'=>$new_name);
- }
- return $ret;
- } else {
- $pinfo = pathinfo($file_name);
- $new_name = $pinfo['filename']."_".uniqid().(isset($pinfo["extension"]) ? ".".$pinfo["extension"] : '');
- return array('old'=>$el->value,'tmp'=>$tmp_name,'new'=>$new_name);
- }
- }
- }
- if (!$el->value) return false;
- return array('old'=>$el->value,'tmp'=>false,'new'=>false);
- }
- ),$rules);
- }
- function render() {
- echo "<div class='image-upload'>";
- $this->render_label();
- $this->render_element();
- $this->render_error();
- echo "</div>";
- }
- function render_element() {
- $value = $this->value;
- $size = $this->thumbSize;
- $vertical = $this->vertical;
- if (is_array($value)) {
- $value = isset($value[0]) ? $value[0]['old'] : $value['old'];
- }
- if ($vertical)
- $style = "margin-top:".($size+10)."px;margin-bottom: 20px";
- else
- $style = "margin-left:".($size+10)."px;margin-bottom: 20px";
- echo "<div style='overflow:hidden'>";
- if ($size) {
- 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;'>";
- if ($value && file_exists(INDEX_DIR."/content/images_mysql/".$this->folder."/".$value)) {
- echo "<a class='colorbox' rel='upl' href='".INDEX_URL."/content/images_mysql/".$this->folder."/"._e($value)."'>";
- echo "<img style='display:inline-block;vertical-align:middle;' src='".r_url($this->folder."/".$value,$size,$size,false)."'>";
- echo "</a>";
- }
- echo "</div>";
- } else {
- $str = $this->error ? '' : htmlspecialchars($value);
- echo "<div class='value' style='margin-top:2px'>".$str."</div>";
- }
- echo "<div class='image-select' style='".$style."'>";
- echo "<label><input style='width:auto' checked='checked' type='radio' {$this->attr('name')} value='keep'>Keep</label>";
- echo "<label><input style='width:auto' type='radio' {$this->attr('name')} value='upload'>Replace<br>";
- $name = "file_".$this->name . ($this->multiple ? "[]":"");
- $accept = $size ? "accept='image/*'" : "";
- echo "<input onclick='$(this).parent().click()' style='width:80px' size='5' type='file' ".($this->multiple ? "multiple='multiple'":"")." name='$name' $accept />";
- echo "</label>";
- echo "</div>";
- echo "</div>";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement