source: gs2-extensions/afrepo/trunk/src/src/AFRepo.GSDLEXT.class.php.in@ 27290

Last change on this file since 27290 was 27290, checked in by davidb, 8 years ago

'.in' version of files that get installed in the appropriate place when CASCADE-MAKE.sh is run

File size: 2.7 KB
Line 
1<?php
2
3/**
4 * Bart Nagel <bjn@ecs.soton.ac.uk>
5 *
6 * AFRepo top-level class to slot in with the Greenstone extension framework
7 *
8 * The audio is expected to be in subdirectories of the 'import-mp3' directory, and
9 * for example purposes can be named in such a way that the example
10 * PathClassifier classifier can get meanining from it.
11 */
12
13class AFRepo extends AFRepoBase {
14 private $allfiles;
15
16 public function getName() {
17 return "Salami 4Store audio repository";
18 }
19
20 public function getURIPrefix() {
21 return "@afrepo-http-prefix@/afrepo/";
22 }
23
24 /* Done this way, can talk to the 4store server directly
25 rather than relying on proxying through the PHP-based 'afrepo' server */
26 public function getTrippleStoreURIPrefix() {
27 return "@afrepo-http-prefix@/4store/";
28 }
29
30 public function getSparqlEndpoint() {
31 return $this->getTrippleStoreURIPrefix() . "sparql/";
32 }
33
34 public function getDataEndpoint() {
35 return $this->getTrippleStoreURIPrefix() . "data/";
36 }
37
38 public function getAllFiles() {
39 if (!is_null($this->allfiles))
40 return $this->allfiles;
41
42 $this->allfiles = array();
43 $path = realpath("import-mp3");
44 $dir = dir($path);
45 while (($file = $dir->read()) !== false) {
46 if ($file[0] != "." && is_dir($path . "/" . $file)) {
47 $subdir = dir($path . "/" . $file);
48 while (($subfile = $subdir->read()) !== false) {
49 if ($subfile[0] != "." && is_file($path . "/" . $file . "/" . $subfile))
50 $this->allfiles[$path . "/" . $file . "/" . $subfile] = true;
51 }
52 $subdir->close();
53 }
54 }
55 $dir->close();
56
57 return $this->allfiles;
58 }
59
60 public function getSongFiles($id) {
61 $filepath = $this->idToLinkPath($id);
62 $origfilepath = realpath($filepath);
63
64 if ($origfilepath === false)
65 return array();
66
67 // is it a clip?
68 if (preg_match('%\.clip\..{1,4}$%', $origfilepath)) {
69 // does full version exist?
70 $fullpath = preg_replace('%\.clip%', "", $origfilepath);
71 if (file_exists($fullpath))
72 return array($fullpath, $origfilepath);
73 return array($origfilepath);
74 }
75
76 // it's a full song. does clip exist?
77 $clippath = preg_replace('%(\..{1,4})$%', '.clip\1', $origfilepath);
78 if (file_exists($clippath))
79 return array($origfilepath, $clippath);
80 return array($origfilepath);
81 }
82
83 public function haveMetadataPermission() {
84 return true;
85 }
86
87 public function haveAudioPermission() {
88 return ipInRange($_SERVER["REMOTE_ADDR"], "127.0.0.0/8");
89 }
90
91 public function getMBID($id) {
92 $classifiers = array(
93 new TagClassifier(),
94 new EchonestClassifier(),
95 new PathClassifier(),
96 );
97 foreach ($classifiers as $classifier)
98 if ($classifier->available() && $classifier->hasMBID($id))
99 return $classifier->getMBID($id);
100 return null;
101 }
102}
103
104?>
Note: See TracBrowser for help on using the repository browser.