/
media.php
228 lines (214 loc) · 5.39 KB
/
media.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
<?php
/**
* @package Habari
*
*/
namespace Habari;
/**
* Media access
*
* @version $Id$
* @copyright 2008
*
* @todo Handle all error conditions using exceptions
*/
class Media
{
static $silos = null;
const THUMBNAIL_WIDTH = 200;
const THUMBNAIL_HEIGHT = 100;
/**
* Retrieve an array of media assets stored at a virtual path
*
* @param string $path The virtual path of the directory to retrieve
* @return array A list of files and directories in that path
*/
public static function dir( $path = '' )
{
if ( $path == '' ) {
self::init_silos();
$dirs = array();
foreach ( self::$silos as $siloname => $silo ) {
$info = $silo->silo_info();
$icon = isset( $info['icon'] ) ? $info['icon'] : null;
$dirs[] = new MediaAsset( $siloname, true, array(), $icon );
}
return $dirs;
}
else {
$silo = Media::get_silo( $path, true );
return $silo->silo_dir( $path );
}
}
/**
* Get the MediaAsset stored at a virtual path
*
* @param string $path The virtual path of the file to retrieve
* @param array $qualities Qualities of the image to return (such as 'thumbnail' or 'size')
* @return MediaAsset The requested asset
*/
public static function get( $path, $qualities = null )
{
$silo = Media::get_silo( $path, true );
return $silo->silo_get( $path, $qualities );
}
/**
* Fetch an empty MediaAsset with the available metadata keys pre-allocated
* <code>
* $asset = Media::prepare('silotype/foo/bar');
* foreach($asset->get_info() as $key => $value) echo "$key : $value";
* </code>
*
* @param string $path The virtual path at which the asset will be stored
* @return MediaAsset An empty, intialized asset instance
*/
public static function prepare( $path )
{
$silo = Media::get_silo( $path, true );
return $silo->silo_new( $path );
}
/**
* Store the asset at the specified virtual path
*
* @param MediaAsset $filedata The asset to store
* @param string $path The virtual path where the asset will be stored
* @return boolean true on success
*/
public static function put( $filedata, $path = null )
{
if ( !$path ) {
$path = $filedata->path;
}
$silo = Media::get_silo( $path, true );
if ( $path == '' ) {
return false;
}
else {
return $silo->silo_put( $path, $filedata );
}
}
/**
* Delete the asset at the specified virtual path
*
* @param string $path The virtual path of the asset to delete
* @return boolean true on success
*/
public static function delete( $path )
{
$silo = Media::get_silo( $path, true );
if ( $path == '' ) {
return false;
}
else {
return $silo->silo_delete( $path );
}
}
/**
* Copy the asset using the specified from and to paths
*
* @param string $pathfrom The virtual path source
* @param string $pathto The virtual path destination
* @return boolean true on success
*/
public static function copy( $pathfrom, $pathto )
{
if ( $source = Media::get( $pathfrom ) ) {
return Media::put( $pathto, $source );
}
else {
return false;
}
}
/**
* Move the asset using the specified from and to paths
* A shortcut for Media::copy() then Media::delete()
*
* @param string $pathfrom The virtual path source
* @param string $pathto The virtual path destination
* @return boolean true on success
*/
public static function move( $pathfrom, $pathto )
{
if ( Media::copy( $pathfrom, $pathto ) ) {
return Media::delete( $pathfrom );
}
else {
return false;
}
}
/**
* Return an array of highlighted (featured) assets from all silos
*
* @param mixed $path The name of a silo or a silo instance. If empty, all silos are returned.
* @return array An array of MediaAsset highlight assets
*/
public static function highlights( $path = null )
{
$highlights = array();
if ( isset( $path ) ) {
$silo = Media::get_silo( $path );
return $silo->silo_highlights();
}
else {
self::init_silos();
foreach ( self::$silos as $silo ) {
$highlights = $highlights + self::highlights( $silo );
}
}
return $highlights;
}
/**
* Return the permissions available to the current user on the specified path
*
* @param mixed $path The name of a silo or a silo instance.
* @return array An array of permission constants (read, write, etc.)
*/
public static function permissions( $path )
{
$silo = Media::get_silo( $path, true );
return $silo->silo_permissions( $path );
}
/**
* Return the instance of a silo
*
* @param mixed $silo A silo instance or the name of a silo
* @param boolean $parse_path If true, parse the siloname from the path and return the remainder path by reference
* @return MediaSilo The requested silo
*/
public static function get_silo( &$silo, $parse_path = false )
{
if ( $silo instanceof MediaSilo ) {
return $silo;
}
$siloname = $silo;
if ( $parse_path ) {
$exp = explode( '/', $silo, 2 );
if ( count( $exp ) > 1 ) {
list( $siloname, $silo ) = $exp;
}
else {
$siloname = $exp[0];
$silo = '';
}
}
self::init_silos();
return self::$silos[$siloname];
}
/**
* Initialize the internal list of silo instances
*/
public static function init_silos()
{
if ( empty( self::$silos ) ) {
$tempsilos = Plugins::get_by_interface( 'MediaSilo' );
self::$silos = array();
foreach ( $tempsilos as $eachsilo ) {
$info = $eachsilo->silo_info();
if ( isset( $info['name'] ) ) {
self::$silos[$info['name']] = $eachsilo;
}
}
}
}
}
?>