vito / chyrp

The ultra-lightweight ultra-flexible blogging engine with a fetish for birds and misspellings. — Read more

This URL has Read+Write access

chyrp / feathers / audio / audio.php
100755 128 lines (116 sloc) 4.892 kb
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
<?php
class Audio extends Feather {
public function __construct() {
$this->setField(array("attr" => "audio",
"type" => "file",
"label" => __("MP3 File", "audio")));
$this->setField(array("attr" => "from_url",
"type" => "text",
"label" => __("From URL?", "audio"),
"optional" => true,
"no_value" => true));
$this->setField(array("attr" => "description",
"type" => "text_block",
"label" => __("Description", "audio"),
"optional" => true,
"preview" => true,
"bookmarklet" => "selection"));
 
$this->setFilter("description", "markup_post_text");
$this->respondTo("delete_post", "delete_file");
$this->respondTo("javascript", "player_js");
$this->respondTo("feed_item", "enclose_mp3");
$this->respondTo("filter_post", "filter_post");
}
public function submit() {
if (isset($_FILES['audio']) and $_FILES['audio']['error'] == 0)
$filename = upload($_FILES['audio'], "mp3");
elseif (!empty($_POST['from_url']))
$filename = upload_from_url($_POST['from_url'], "mp3");
else
error(__("Error"), __("Couldn't upload audio file."));
 
return Post::add(array("filename" => $filename,
"description" => $_POST['description']),
$_POST['slug'],
Post::check_url($_POST['slug']));
}
public function update() {
$post = new Post($_POST['id']);
 
if (isset($_FILES['audio']) and $_FILES['audio']['error'] == 0) {
$this->delete_file($post);
$filename = upload($_FILES['audio'], "mp3");
} elseif (!empty($_POST['from_url'])) {
$this->delete_file($post);
$filename = upload_from_url($_POST['from_url'], "mp3");
} else
$filename = $post->filename;
 
$post->update(array("filename" => $filename,
"description" => $_POST['description']));
}
public function title($post) {
return fallback($post->title, $post->title_from_excerpt(), true);
}
public function excerpt($post) {
return $post->description;
}
public function feed_content($post) {
return $post->description;
}
public function delete_file($post) {
if ($post->feather != "audio") return;
unlink(MAIN_DIR.Config::current()->uploads_path.$post->filename);
}
public function filter_post($post) {
if ($post->feather != "audio") return;
$post->audio_player = $this->flash_player_for($post->filename, array(), $post);
}
public function player_js() {
?>
<!-- --><script>
var ap_instances = new Array();
 
function ap_stopAll(playerID) {
for(var i = 0;i<ap_instances.length;i++) {
try {
if(ap_instances[i] != playerID) document.getElementById("audioplayer" + ap_instances[i].toString()).SetVariable("closePlayer", 1);
else document.getElementById("audioplayer" + ap_instances[i].toString()).SetVariable("closePlayer", 0);
} catch( errorObject ) {
// stop any errors
}
}
}
 
function ap_registerPlayers() {
var objectID;
var objectTags = document.getElementsByTagName("object");
for(var i=0;i<objectTags.length;i++) {
objectID = objectTags[i].id;
if(objectID.indexOf("audioplayer") == 0) {
ap_instances[i] = objectID.substring(11, objectID.length);
}
}
}
 
var ap_clearID = setInterval( ap_registerPlayers, 100 );
<!-- --></script>
<?php
}
public function enclose_mp3($id) {
$post = new Post($id);
if ($post->feather != "audio") return;
 
$config = Config::current();
$length = filesize(MAIN_DIR.$config->uploads_path.$post->filename);
 
echo ' <link rel="enclosure" href="'.$config->chyrp_url.$config->uploads_path.$post->filename.'" type="audio/mpeg" title="MP3" length="'.$length.'" />'."\n";
}
public function flash_player_for($filename, $params = array(), $post) {
$vars = "";
foreach ($params as $name => $val)
$vars.= "&amp;".$name."=".$val;
 
$config = Config::current();
$player = '<script src="'.$config->chyrp_url.'/feathers/audio/lib/audio-player.js" type="text/javascript" charset="utf-8"></script>'."\n";
$player.= '<object type="application/x-shockwave-flash" data="'.$config->chyrp_url.'/feathers/audio/lib/player.swf" id="audio_player_'.$post->id.'" height="24" width="290">'."\n\t";
$player.= '<param name="movie" value="'.$config->chyrp_url.'/feathers/audio/lib/player.swf" />'."\n\t";
$player.= '<param name="FlashVars" value="playerID='.$post->id.'&amp;soundFile='.$config->chyrp_url.$config->uploads_path.$filename.$vars.'" />'."\n\t";
$player.= '<param name="quality" value="high" />'."\n\t";
$player.= '<param name="menu" value="false" />'."\n\t";
$player.= '<param name="wmode" value="transparent" />'."\n";
$player.= '</object>'."\n";
 
return $player;
}
}