Page Menu
Home
In-Portal Phabricator
Search
Configure Global Search
Log In
Files
F804714
upload_formatter.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Wed, Feb 26, 4:18 PM
Size
7 KB
Mime Type
text/x-php
Expires
Fri, Feb 28, 4:18 PM (11 h, 39 m)
Engine
blob
Format
Raw Data
Handle
577153
Attached To
rINP In-Portal
upload_formatter.php
View Options
<?php
class
kUploadFormatter
extends
kFormatter
{
var
$DestinationPath
;
var
$FullPath
;
function
kUploadFormatter
()
{
parent
::
kBase
();
if
(
$this
->
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
;
$i
<
min
(
$max_files
,
count
(
$swf_uploaded_ids
));
$i
++)
{
$real_name
=
$swf_uploaded_names
[
$i
];
$real_name
=
$this
->
ValidateFileName
(
$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'
,
'la_error_InvalidFileFormat'
);
}
elseif
(
$value
[
'size'
]
>
$max_filesize
)
{
$object
->
SetError
(
$field_name
,
'bad_file_size'
,
'la_error_FileTooLarge'
);
}
elseif
(!
is_writable
(
$this
->
FullPath
))
{
$object
->
SetError
(
$field_name
,
'cant_save_file'
,
'la_error_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'
,
'la_error_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'
,
'la_error_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'
,
'la_error_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'
]))
{
$upload_dir
=
isset
(
$options
[
'upload_dir'
])
?
$options
[
'upload_dir'
]
:
$this
->
DestinationPath
;
switch
(
$options
[
'format'
])
{
case
'full_url'
:
return
rtrim
(
$this
->
Application
->
BaseURL
(),
'/'
).
$upload_dir
.
$tc_value
;
break
;
case
'full_path'
:
return
FULL_PATH
.
$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
);
}
}
Event Timeline
Log In to Comment