Index: trunk/core/kernel/utility/formatters/upload_formatter.php =================================================================== diff -u -N --- trunk/core/kernel/utility/formatters/upload_formatter.php (revision 8842) +++ trunk/core/kernel/utility/formatters/upload_formatter.php (revision 0) @@ -1,245 +0,0 @@ -DestinationPath) { - $this->FullPath = FULL_PATH.$this->DestinationPath; - } - } - - - /** - * Processes file uploads from form - * - * @param mixed $value - * @param string $field_name - * @param kDBItem $object - * @return string - */ - 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; - } - - // SWF Uploader - if (is_array($value) && isset($value['tmp_ids'])) { - if ($value['tmp_deleted']) { - $deleted = explode('|', $value['tmp_deleted']); - $upload = explode('|', $value['upload']); - $n_upload = array(); -// $n_ids = array(); - foreach ($upload as $name) { - if (in_array($name, $deleted)) continue; - $n_upload[] = $name; -// $n_ids[] = $name; - } - $value['upload'] = implode('|', $n_upload); -// $value['tmp_ids'] = implode('|', $n_ids); - } - if (!$value['tmp_ids']) { - return getArrayValue($value, 'upload'); - } - $swf_uploaded_ids = explode('|', $value['tmp_ids']); - $swf_uploaded_names = explode('|', $value['tmp_names']); - $existing = $value['upload'] ? explode('|', $value['upload']) : array(); - if (isset($options['multiple'])) { - $max_files = $options['multiple'] == false ? 1 : $options['multiple']; - } - else { - $max_files = 1; - } - $fret = array(); - for ($i=0; $iValidateFileName($this->FullPath, $real_name); - $file_name = $this->FullPath.$real_name; - - $tmp_file = WRITEABLE.'/tmp/'.$swf_uploaded_ids[$i].'_'.$swf_uploaded_names[$i]; - rename($tmp_file, $file_name); - - @chmod($file_name, 0666); - $fret[] = getArrayValue($options, 'upload_dir') ? $real_name : $this->DestinationPath.$real_name; - } - $fret = array_merge($existing, $fret); - return implode('|', $fret); - } - - // SWF Uploader END - - if (getArrayValue($value, 'upload') && getArrayValue($value, 'error') == UPLOAD_ERR_NO_FILE) { - // file was not uploaded this time, but was uploaded before, then use previously uploaded file (from db) - return getArrayValue($value, 'upload'); - } - - if (is_array($value) && count($value) > 1 && $value['size']) { - if (is_array($value) && $value['error'] === UPLOAD_ERR_OK) { - $max_filesize = isset($options['max_size']) ? $options['max_size'] : MAX_UPLOAD_SIZE; - - if (getArrayValue($options, 'allowed_types') && !in_array($value['type'], $options['allowed_types'])) { - $object->SetError($field_name, 'bad_file_format'); - } - elseif ($value['size'] > $max_filesize) { - $object->SetError($field_name, 'bad_file_size'); - } - elseif (!is_writable($this->FullPath)) { - $object->SetError($field_name, '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->SetError($field_name, '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; - - // delete previous file, when new file is uploaded under same field - /*$previous_file = isset($value['upload']) ? $value['upload'] : false; - if ($previous_file && file_exists($this->FullPath.$previous_file)) { - unlink($this->FullPath.$previous_file); - }*/ - } - } - } - else { - $object->SetError($field_name, 'cant_save_file'); - } - } - else { - if (getArrayValue($options, 'required')) { - $object->SetError($field_name, 'required'); - } - } - - // && !$object->FieldErrors[$field_name]['pseudo'] - already implemented in kDBItem::SetError method - if ((count($value) > 1) && $value['error'] && ($value['error'] != UPLOAD_ERR_NO_FILE)) { - $object->SetError($field_name, 'cant_save_file'); - } - - return $ret; - } - - function Format($value, $field_name, &$object, $format=null) - { - if ( is_null($value) ) return ''; - - $options = $object->GetFieldOptions($field_name); - if ( isset($format) ) $options['format'] = $format; - - if ($format == 'file_urls' || $format == 'file_names' || $format == 'file_sizes') { - $upload_dir = isset($options['upload_dir']) ? $options['upload_dir'] : $this->DestinationPath; - $files = explode('|', $value); - $urls = array(); - $names = array(); - if ($value) { // if value string was not empty - foreach ($files as $a_file) { - if (isset($options['direct_links']) && $options['direct_links']) { - $urls[] = rtrim($this->Application->BaseURL(), '/').$upload_dir.$a_file; - } - else { - $urls[] = $this->Application->HREF('', '', array('no_amp'=>1, 'pass'=>'m,'.$object->Prefix, $object->Prefix.'_event'=>'OnViewFile', 'file'=>$a_file, 'field'=>$field_name)); - } - $names[] = $a_file; - $sizes[] = filesize(FULL_PATH.$upload_dir.$a_file); - } - } - switch ($format) { - case 'file_urls': return implode('|', $urls); - case 'file_names': return implode('|', $names); - case 'file_sizes': return implode('|', $sizes); - } - return implode('|', $format == 'file_urls' ? $urls : $names); - } - - $tc_value = $this->TypeCast($value, $options); - if( ($tc_value === false) || ($tc_value != $value) ) return $value; // for leaving badly formatted date on the form - - return $this->GetFormatted($tc_value, $options); - } - - function GetFormatted($tc_value, &$options) - { - if (isset($options['format'])) { - switch ($options['format']) { - case 'full_url': - $upload_dir = isset($options['upload_dir']) ? $options['upload_dir'] : $this->DestinationPath; - return rtrim($this->Application->BaseURL(), '/').$upload_dir.$tc_value; - break; - - default: - return sprintf($options['format'], $tc_value); - break; - } - } - - return $tc_value; - } - - 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('/('.preg_quote($filename, '/').'_)([0-9]*)('.preg_quote($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; // used ? - $this->DestinationPath = constOn('ADMIN') ? IMAGES_PENDING_PATH : IMAGES_PATH; - - parent::kUploadFormatter(); - } - - function GetFormatted($tc_value, &$options) - { - if (isset($options['format']) && ($options['format'] == 'img_size')) { - $upload_dir = isset($options['upload_dir']) ? $options['upload_dir'] : $this->DestinationPath; - $img_path = FULL_PATH.'/'.$upload_dir.$tc_value; - - $image_info = @getimagesize($img_path); - return ' width="'.$image_info[0].'" height="'.$image_info[1].'"'; - } - - return parent::GetFormatted($tc_value, $options); - } - -} \ No newline at end of file