DestinationPath) { $this->FullPath = FULL_PATH.$this->DestinationPath; } parent::kBase(); } //function Parse($value, $options, &$errors) function Parse($value, $field_name, &$object) { $ret = ''; $options = $object->GetFieldOptions($field_name); if(getArrayValue($options, 'upload_dir')) { $this->DestinationPath = $options['upload_dir']; $this->FullPath = FULL_PATH.$this->DestinationPath; } if (getArrayValue($value, 'upload') && getArrayValue($value, 'error') == UPLOAD_ERR_NO_FILE) { return getArrayValue($value, 'upload'); } if ( is_array($value) && $value['size'] ) { if ( is_array($value) && $value['error'] === UPLOAD_ERR_OK ) { if ( getArrayValue($options, 'allowed_types') && !in_array($value['type'], $options['allowed_types']) ) { $object->FieldErrors[$field_name]['pseudo'] = 'bad_file_format'; } elseif ( $value['size'] > ($options['max_size'] ? $options['max_size'] : MAX_UPLOAD_SIZE) ) { $object->FieldErrors[$field_name]['pseudo'] = 'bad_file_size'; } elseif ( !is_writable($this->FullPath) ) { $object->FieldErrors[$field_name]['pseudo'] = 'cant_save_file'; } else { $real_name = $this->ValidateFileName($this->FullPath, $value['name']); $file_name = $this->FullPath.$real_name; if ( !move_uploaded_file($value['tmp_name'], $file_name) ) { $object->FieldErrors[$field_name]['pseudo'] = 'cant_save_file'; } else { @chmod($file_name, 0666); if(getArrayValue($options, 'size_field')) { $object->SetDBField($options['size_field'], $value['size']); } if(getArrayValue($options, 'orig_name_field')) { $object->SetDBField($options['orig_name_field'], $value['name']); } if(getArrayValue($options, 'content_type_field')) { $object->SetDBField($options['content_type_field'], $value['type']); } $ret = getArrayValue($options, 'upload_dir') ? $real_name : $this->DestinationPath.$real_name; } } } else { $object->FieldErrors[$field_name]['pseudo'] = 'cant_save_file'; } } else { if(getArrayValue($options, 'required')) { $object->FieldErrors[$field_name]['pseudo'] = 'required'; } } if ($value['error'] && !( $value['error'] == UPLOAD_ERR_NO_FILE ) && !$object->FieldErrors[$field_name]['pseudo']) { $object->FieldErrors[$field_name]['pseudo'] = 'cant_save_file'; } return $ret; } function ValidateFileName($path, $name) { $parts = pathinfo($name); $ext = '.'.$parts['extension']; $filename = substr($parts['basename'], 0, -strlen($ext)); $new_name = $filename.$ext; while ( file_exists($path.'/'.$new_name) ) { if ( preg_match("/({$filename}_)([0-9]*)($ext)/", $new_name, $regs) ) { $new_name = $regs[1].($regs[2]+1).$regs[3]; } else { $new_name = $filename.'_1'.$ext; } } return $new_name; } } class kPictureFormatter extends kUploadFormatter { function kPictureFormatter() { $this->NakeLookupPath = IMAGES_PATH; $this->DestinationPath = IMAGES_PENDING_PATH; parent::kUploadFormatter(); } }