aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorV.Krishn <vkrishn4@gmail.com>2016-07-07 04:30:49 +0530
committerV.Krishn <vkrishn4@gmail.com>2016-07-07 04:30:49 +0530
commit4dbe8e038ab08d54752486865a685ecdd088b459 (patch)
tree38051d2a333bcdbfc2f4988468933728e8e76e2d
parent1f61c8cbcf124c7d0e69de1e799770d9c99dd51e (diff)
downloadaport-api-4dbe8e038ab08d54752486865a685ecdd088b459.tar.bz2
add/improved /depends & /provides rels
add /package/id/id/depends (get all depends for pkg->id)
-rw-r--r--index.php131
1 files changed, 108 insertions, 23 deletions
diff --git a/index.php b/index.php
index 7918453..ac00fae 100644
--- a/index.php
+++ b/index.php
@@ -192,24 +192,14 @@ $app->get('/search/{where:[a-z0-9\_]+}{filters:.*}', function($where, $filters)
//$_k = array('category', 'name', 'maintainer', 'flagged'); # TODO
if ( ! in_array($where, $_w)) return;
- $filter = array();
- //$filter = (array)sanitize_filters($filters, $where, $app);
- $f = explode('/', trim(single_slash(urldecode($filters)), '/'));
- for($c=0; $c<=count($f); $c=$c+2) { # limit key/value to 56 chars each
- if($f[$c]) $filter[mb_substr(@$f[$c], 0, 56)] = mb_substr(@$f[$c+1], 0, 56);
- }
- unset($f);
- $filter = get2filter($filter);
+ $filter = (array)sanitize_filters($filters, $where, $app);
- $filter['filter'] = array();
# Create customs filters # TODO
$filter = set_search_category($filter);
$filter = set_search_flagged($filter);
$filter = set_search_maint($filter);
$filter = set_search_row($filter, $app);
- if(isset($filter['page'])) $app->myapi->reqPage = (int)$filter['page'];
-
if('packages' === $where) {
$filter = set_search_name_pkg($filter);
$filter = set_search_name_pkg($filter, 'origin');
@@ -218,7 +208,6 @@ $app->get('/search/{where:[a-z0-9\_]+}{filters:.*}', function($where, $filters)
$data = get_package($filter, $data, $app);
}
- $filter['filter']['page'] = $app->myapi->reqPage;
$data->meta['search'] = $filter['filter'];
$data->meta['per-page'] = '<=50';
$data->meta['count'] = count($data->data);
@@ -276,7 +265,18 @@ $app->post('/search/{where:[a-z0-9\_]+}/page/{page:[0-9]+}', function($where, $p
});
// Sanitizes and makes filters into key=>value array
-function sanitize_filters($filters='', $where='', $app) {
+function sanitize_filters($filters='', $where='', $app='') {
+ $filter = array();
+ $f = explode('/', trim(single_slash(urldecode($filters)), '/'));
+ for($c=0; $c<=count($f)-1; $c=$c+2) { # limit key/value to 56 chars each
+ if($f[$c]) $filter[mb_substr(@$f[$c], 0, 56)] = mb_substr(@$f[$c+1], 0, 56);
+ }
+ unset($f);
+ $filter = get2filter($filter);
+ //common filters
+ $filter['filter'] = array();
+ if(isset($filter['page'])) $app->myapi->reqPage = (int)$filter['page'];
+ $filter['filter']['page'] = $app->myapi->reqPage;
return $filter;
}
@@ -485,7 +485,7 @@ $app->get('/packages/{id:[0-9]+}/relationships/{type}', function($id, $type) use
$id = $res->fid;
}
- $app->handle("/$type/$subtype/$id"); return;
+ if($id) { $app->handle("/$type/$subtype/$id"); } else { $app->handle('/404'); }
});
@@ -499,6 +499,43 @@ $app->get('/packages/pid/{pid:[0-9]+}', function($pid) use ($app) {
if($data) json_api_encode($data, $app);
});
+// Retrieves Dependencies for packages->id
+$app->get('/packages/id/{pid:[0-9]+}/{type}{filters:.*}', function($pid, $type, $filters) use ($app) {
+ $data = initJapiData($app, 'packages');
+
+ $filter = (array)sanitize_filters($filters, '', $app);
+
+ if('depends' === $type) {
+ $res = Depends::find( array( "pid = '$pid'" ) );
+ if(count($res) < 1) { $app->handle('/404'); return; }
+
+ foreach($res as $d) { $a[] = "\"$d->name\""; }
+ $l = array2csv($a);
+ $condt = "name IN ($l)";
+ $params = array( "conditions" => "$condt", 'DISTINCT' => "name" );
+ $res = Provides::find( $params );
+ if(count($res) < 1) { $app->handle('/404'); return; }
+
+ foreach($res as $d) { $a[] = $d->pid; }
+ $l = array2csv($a);
+ $condt = "id IN ($l)";
+ //apply filters
+
+ $filter['filter2'] = array();
+ $filter['filter2'][] = "id IN ($l)";
+ $filter = set_search_category($filter);
+
+ $data = get_package($filter, $data, $app);
+
+ $data->meta['search'] = $filter['filter'];
+ $data->meta['per-page'] = '<=50';
+ $data->meta['count'] = count($data->data);
+ if($data) json_api_encode($data, $app); return;
+ }
+
+ $app->handle('/404');
+});
+
// Retrieves packages by flagged-id
$app->get('/packages/fid/{fid:[0-9]+}', function($fid) use ($app) {
$data = initJapiData($app, 'packages');
@@ -577,7 +614,7 @@ $app->get('/origins/pid/{pid:[0-9]+}', function($pid) use ($app) {
});
-$app->get('/flagged/{filter:.*}', function($filter) use ($app) {
+$app->get('/flagged/{filters:.*}', function($filters) use ($app) {
$data = initJapiData($app, 'flagged');
$cols = 'fid, created, reporter, new_version, message';
$condt = '';
@@ -593,7 +630,7 @@ $app->get('/flagged/{filter:.*}', function($filter) use ($app) {
}
if('fids' === $app->myapi->flags) {
- list($n, $l) = explode('/', $filter);
+ list($n, $l) = explode('/', $filters);
$condt = "fid IN ($l)";
$cols = 'fid, created';
}
@@ -702,16 +739,65 @@ $app->get('/contents/{id:[0-9]+}/relationships/{type}', function($id, $type) use
$app->handle('/404');
});
+$app->get(
+ '/provides/{name:[a-zA-Z0-9\-\_\:\.]+}/relationships/{type}{filters:.*}',
+ function($name, $type, $filters) use ($app)
+{
+ $data = initJapiData($app, 'provides');
+ $name = mb_substr($name, 0, 120);
+
+ $res = Provides::find( array( "name = '$name'") );
+ $tnum = count($res);
+ if( ! $tnum > 0) { $app->handle('/404'); return; }
+
+ if($type === 'none') {
+ $data->meta = array(
+ 'count' => $tnum
+ );
+ $data->data = fmtData($res, 'provides.', $app)->data;
+ $data = populate_maintainer($data, $app);
+ json_api_encode($data, $app); return;
+ }
+
+ if($type === 'packages') {
+ foreach($res as $d) { $a[] = $d->pid; }
+ $l = array2csv($a);
+ $condt = "id IN ($l)";
+ $params = array( "conditions" => "$condt" );
+ $res = Packages::find( $params );
+ $tnum = count($res);
+ $data->meta = array(
+ 'count' => $tnum
+ );
+ $data->data = fmtData($res, 'packages.', $app)->data;
+ $data = populate_maintainer($data, $app);
+ json_api_encode($data, $app); return;
+ }
+
+ $app->handle('/404');
+});
+
+$app->get('/provides/{name:[a-zA-Z0-9\-\_\:\.]+}', function($name) use ($app) {
+ $app->handle("/provides/$name/relationships/none");
+});
-// Retrieves package data by its depends(name) relationships (funny relationships)
-// possibly taken as packages that depends on this given named pkg # TODO
-$app->get('/depends/{name:[a-z]+.*}/relationships/{type}', function($name, $type) use ($app) {
+// Retrieves data by its depends(name) relationships
+// name starting with '!' means does not depends->on and thus ignored
+$app->get(
+ '/depends/{name:[a-zA-Z0-9\-\_\:\.]+}/relationships/{type}{filters:.*}',
+ function($name, $type, $filters) use ($app)
+{
$data = initJapiData($app, 'depends');
+ $name = mb_substr($name, 0, 120);
+
+ if($type === 'provides') {
+ $app->handle("/provides/$name"); return;
+ }
if($type === 'packages') {
$res = Depends::find( array( "name = '$name'") );
if( ! count($res) > 0) { $app->handle('/404'); return; }
- $pid = $res[0]->pid;
+ //$pid = $res[0]->pid;
# ---------------------
foreach($res as $d) { $a[] = $d->pid; }
@@ -985,8 +1071,6 @@ function setPageLinks($uriPart, $tnum, $data, $app) {
if( isset($app->myapi->offset) ) {
$slink = preg_replace('#\/'.$uriPart.'.*$#', '', $_reqUrl);
- //$next = $app->myapi->pgNext;
- //$app->myapi->_reqUrl = $slink;
} else {
$slink = $_reqUrl;
}
@@ -1061,6 +1145,7 @@ function fmtData($res, $type, $app) {
if($type === 'depends') {
$idf = 'pid'; $self = 'name';
+ $rels = array( "packages", "provides" );
}
if($type === 'contents') { # from table 'files'
@@ -1099,7 +1184,7 @@ function fmtData($res, $type, $app) {
$obj->links->self = $slink.$item->$self;
if($type === 'depends') {
- $obj->links->self = '/packages/'.$item->name;
+ //$obj->links->self = '/packages/'.$item->name;
}
$rlink = $slink.$item->$self;