root collection SignPuddle 3 Collection API https://signpuddle.com/server line ## Collections line line SignPuddle 3 organizes related data into collections. line All collections are available in three different forms: database, plain text files, and JSON objects line line ### Databases line line Each collection is available as an SQLite database. line These databases are the primary source and all edits are directly applied to the database. line line ### Plain Text Files line line Each collection is available as a plain text field where each entry occupies its own line. line Each entry contains multiple fields that are divided by tab characters. line The plain text files are designed for easy import and export from the databases. line line ### JSON Data files line line Each collection is available as a JSON data file. line These files are useful for the client section for default configuration. line line ## Collection Types line line There are six types of collections: interface, dictionary, literature, alphabet, fingerspell, and keyboard. line line ### Interface line line The interface collection deals with user interface elements. line line ### Dictionary line line The dictionary collection deals with individual sign details. line line ### Literature line line The literature collection deals with segments of sign text. line line ### Alphabet line line The alphabet collection deals with subset of ISWA 2010. line line ### Fingerspell line line The fingerspell collection deals with individual letters for fingerspelling. line line ### Keyboard line line The keyboard collection deals with commands and keys for keyboarding. line group collection Resources related to collections in general line + Source: [ApiTxt format](../src/collection.txt) and [JSON objects](../src/collection.json) line + Documents: [API Blueprint](../doc/collection.md) and [Stand Alone HTML](../doc/collection.htm) line + Live Page: [API Interface](../api/collection.html) and [JavaScript](../api/collection.js) route /collection{?name} Collections available parameter name sp3 string partial collection name method GET Get available collections code $collections = collectionListing($name); code if (count($collections)){ code echo json_pretty($collections); code } else { code $app->response->setStatus(204); code } code return; response 200 text/plain body ["en-US-interface-sp3"] route /collection/{name} Collection resource Specific collection parameter name `en-US-interface-sp3` string The name of a collection method DELETE delete collection code $err = invalidName($name); code if ($err){ code haltBadRequest($err); code } code $headers = getHeaders(); code $pass = isset($headers['Pass'])?$headers['Pass']:''; code collectionDelete($name,$pass); code collectionSecurityDelete($name,$pass); code collectionManageDelete($name,$pass); code $app->response->setStatus(204); request the removal of a collection header Pass 5ffab638bde372b4fa63bb6f8484595d response 204 route /collection/{name}/entry/{ik}/image/{num} Collection entry image resource Specific image for collection entry parameter name `ase-US-dictionary-public` string The name of an dictionary parameter ik 11244 string An id number or key string parameter num 1 string The image number of 1 thru 4 method PUT update image for collection entry code $err = invalidName($name); code if ($err){ code haltBadRequest($err); code } code $headers = getHeaders(); code $pass = isset($headers['Pass'])?$headers['Pass']:''; code $data = $app->request->getbody(); code $data = json_decode($data,true); code collectionImageUpdate($name,$ik,$num,$data,$pass); code $app->response->setStatus(204); code return; request an update for an existing dictionary entry application/json header Pass 724fd4b4438fba9d0c5ab89d0833e5c9 body { body "file": "name.png", body "data": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD..." body } response 204 method DELETE remove dictionary entry code $err = invalidName($name); code if ($err){ code haltBadRequest($err); code } code $headers = getHeaders(); code $pass = isset($headers['Pass'])?$headers['Pass']:''; code collectionImageDelete($name,$ik,$num,$pass); code $app->response->setStatus(204); request the removal of a collection entry image header Pass 724fd4b4438fba9d0c5ab89d0833e5c9 response 204 route /collection/{name}/stats Collection statistics Statistics about the collection parameter name `ase-US-dictionary-public` required,string The name of a dictionary method GET Get collection statistics code $headers = getHeaders(); code $pass = isset($headers['Pass'])?$headers['Pass']:''; code rightsCheck($name,$pass,SP_VIEW); code $check = isset($headers['If-Modified-Since'])?$headers['If-Modified-Since']:''; code $err = invalidName($name); code if ($err){ code haltBadRequest($err); code } code $lastModified = lastModified($name); code if ($lastModified <= $check){ code haltNotModified(); code } code header('Last-Modified: ' . $lastModified); code $output = json_pretty(collectionStats($name)); code $searchTime = searchtime($timein); code header("Search-Time: " . $searchTime); code echo $output; request collections statistics header If-Modified-Since 2019-01-16T16:56:19.175Z response 200 text/plain body [{"name": "en-US-interface-sp3","code": "ui1","title": "English Interface for SignPuddle 3","user": "slevinski","created_at": "","view_pass": 0,"add_pass": 1,"edit_pass": 1,"register_level": 0,"upload_level": 4}] route /collection/security Collections security Security settings for all collections method GET Get collections security code $headers = getHeaders(); code $check = isset($headers['If-Modified-Since'])?$headers['If-Modified-Since']:''; code $lastModified = lastModifiedCollection(); code if ($lastModified <= $check){ code haltNotModified(); code } code header('Last-Modified: ' . $lastModified); code echo json_pretty(collectionsSecurity()); request collections security header If-Modified-Since 2019-01-16T16:56:19.175Z response 200 text/plain body [{"name": "en-US-interface-sp3","code": "ui1","title": "English Interface for SignPuddle 3","user": "slevinski","created_at": "","view_pass": 0,"add_pass": 1,"edit_pass": 1,"register_level": 0,"upload_level": 4}] route /collection/{name}/security Collection security Details about the collection security parameter name `en-US-interface-sp3` required,string The name of the collection method GET retrieve collection security code $err = invalidName($name); code if ($err){ code haltBadRequest($err); code } code echo json_pretty(collectionSecurity($name)); request interface security response 200 text/plain body {"name": "en-US-interface-sp3","code": "ui1","title": "English Interface for SignPuddle 3","user": "slevinski","created_at": "","view_pass": 0,"add_pass": 1,"edit_pass": 1,"register_level": 0,"upload_level": 4} method PUT Update collection security code $err = invalidName($name); code if ($err){ code haltBadRequest($err); code } code $headers = getHeaders(); code $pass = isset($headers['Pass'])?$headers['Pass']:''; code $data = $app->request->getbody(); code $data = json_decode($data,true); code collectionSecurityUpdate($name,$data,$pass); code $app->response->setStatus(204); code return; request an update for an existing entry text/plain header Pass 5ffab638bde372b4fa63bb6f8484595d body {"name": "en-US-interface-sp3","code": "ui1","title": "English Interface for SignPuddle 3","user": "slevinski","created_at": "","view_pass": 0,"add_pass": 1,"edit_pass": 1,"register_level": 0,"upload_level": 4} response 204 method DELETE Remove security for collection code $err = invalidName($name); code if ($err){ code haltBadRequest($err); code } code $headers = getHeaders(); code $pass = isset($headers['Pass'])?$headers['Pass']:''; code collectionSecurityDelete($name,$pass); code $app->response->setStatus(204); request the deletion of collection security header Pass 5ffab638bde372b4fa63bb6f8484595d response 204 route /collection/{name}/users Collection users parameter name `ase-US-dictionary-public` string collection name method GET Get collection users code $err = invalidName($name); code if ($err){ code haltBadRequest($err); code } code echo json_pretty(collectionUsers($name)); response 200 text/plain body [{"user": "test_user","security": 3}] route /collection/manage/unknown Management for unknown collections method GET Get list of unknown collections with user management code echo json_pretty(collectionManageUnknown()); response 200 text/plain body ["es-US-interface-sp3"] route /collection/{name}/manage Collection users management parameter name `ase-US-dictionary-public` string collection name method GET Get collection management code $err = invalidName($name); code if ($err){ code haltBadRequest($err); code } code $headers = getHeaders(); code $pass = isset($headers['Pass'])?$headers['Pass']:''; code echo json_pretty(collectionUsersDetail($name,$pass)); request collection management header Pass 5ffab638bde372b4fa63bb6f8484595d response 200 text/plain body [{"name": "test_user","display": "Test Editor","email": "testing@gmail.com","security": 3}] method PUT Update collection management code $err = invalidName($name); code if ($err){ code haltBadRequest($err); code } code $headers = getHeaders(); code $pass = isset($headers['Pass'])?$headers['Pass']:''; code $data = $app->request->getbody(); code $data = json_decode($data,true); code collectionManageUpdate($name,$data,$pass); code $app->response->setStatus(204); code return; request an update for collection management header Pass 5ffab638bde372b4fa63bb6f8484595d body {"user":"slevinski","security":4} response 204 method DELETE Remove user management for collection code $err = invalidName($name); code if ($err){ code haltBadRequest($err); code } code $headers = getHeaders(); code $pass = isset($headers['Pass'])?$headers['Pass']:''; code collectionManageDelete($name,$pass); code $app->response->setStatus(204); request the removal of user management for a collection header Pass 5ffab638bde372b4fa63bb6f8484595d response 204 route /collection/{name}/manage/{user} Collection user parameter name `ase-US-dictionary-public` string collection name parameter user `slevinski` string user name method DELETE Remove user from collection management code $err = invalidName($name); code if ($err){ code haltBadRequest($err); code } code $headers = getHeaders(); code $pass = isset($headers['Pass'])?$headers['Pass']:''; code collectionManageRemove($name,$user,$pass); code $app->response->setStatus(204); request the removal of a user from collection management header Pass 5ffab638bde372b4fa63bb6f8484595d response 204 route /collection/{name}/request/{source} Collection Request Copy parameter name `es-US-interface-sp3` required,string The name of the new collection parameter source `en-US-interface-sp3` required,string The name of the source collection method POST request the creation of a new collection code $headers = getHeaders(); code $pass = isset($headers['Pass'])?$headers['Pass']:''; code $user = userVerified($pass); code if (!$user) haltForbidden(); code rightsCheck($source,$pass,SP_VIEW); code $err = invalidName($source); code if ($err){ code haltBadRequest($err); code } code $parts = explode("-",$source); code $err = invalidName($name,$parts[2]); code if ($err){ code haltBadRequest($err); code } code $dir = 'data/db/'; code $infile = $dir . $source . ".db"; code $outfile = $dir . $name . ".db"; code if (!file_exists($infile)) haltBadRequest('Source collection does not exist: ' . $source); code if (file_exists($outfile)) haltBadRequest('Collection already exists: ' . $name); code if (copy($infile,$outfile)){ code $data = array(); code $data["user"] = $user; code $data["security"] = SP_EDIT; code collectionManageUpdate($name,$data,$pass,true); code code $data = $app->request->getbody(); code $data = json_decode($data,true); code $title = isset($data['title'])?$data['title']:'New Collection'; code $data = array(); code $data["title"] = $title; code $data["user"] = "admin"; code $data["view_pass"] = 0; code $data["add_pass"] = 1; code $data["edit_pass"] = 1; code $data["register_level"] = 0; code $data["upload_level"] = 4; code collectionSecurityUpdate($name,$data,$pass,true); code $app->response->setStatus(204); code return; code } else { code haltForbidden(); code } request new collection from source header Pass 5ffab638bde372b4fa63bb6f8484595d response 204