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