Add editing of previews

🎉!
This commit is contained in:
Bojidar Marinov
2016-07-25 21:15:49 +03:00
parent 671716df93
commit 2f3acffc57
11 changed files with 519 additions and 129 deletions

View File

@@ -5,6 +5,7 @@ SET time_zone = '+00:00';
SET foreign_key_checks = 0;
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
DROP TABLE IF EXISTS `as_assets`;
CREATE TABLE `as_assets` (
`asset_id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL DEFAULT '0',
@@ -13,19 +14,20 @@ CREATE TABLE `as_assets` (
`category_id` int(11) NOT NULL DEFAULT '6',
`version` int(11) NOT NULL,
`version_string` varchar(20) NOT NULL,
`support_level` tinyint(4) NOT NULL,
`cost` varchar(25) NOT NULL DEFAULT 'GPLv3',
`rating` int(11) NOT NULL DEFAULT '1',
`download_hash` varchar(64) NOT NULL,
`support_level` tinyint(4) NOT NULL,
`download_url` varchar(1024) NOT NULL,
`download_hash` text NOT NULL,
`browse_url` varchar(1024) NOT NULL,
`icon_url` varchar(1024) NOT NULL,
`searchable` tinyint(1) NOT NULL DEFAULT '0',
`modify_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`modify_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`asset_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS `as_asset_edits`;
CREATE TABLE `as_asset_edits` (
`edit_id` int(11) NOT NULL AUTO_INCREMENT,
`asset_id` int(11) NOT NULL,
@@ -40,14 +42,31 @@ CREATE TABLE `as_asset_edits` (
`icon_url` varchar(1024) DEFAULT NULL,
`status` tinyint(4) NOT NULL DEFAULT '0',
`reason` text NOT NULL,
`submit_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`modify_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`submit_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`modify_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`edit_id`),
KEY `asset_id` (`asset_id`),
KEY `status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `as_asset_edit_previews`;
CREATE TABLE `as_asset_edit_previews` (
`edit_preview_id` int(11) NOT NULL AUTO_INCREMENT,
`edit_id` int(11) NOT NULL,
`preview_id` int(11) NOT NULL,
`type` enum('image','video') DEFAULT NULL,
`link` varchar(1024) DEFAULT NULL,
`thumbnail` varchar(1024) DEFAULT NULL,
`operation` tinyint(4) NOT NULL,
PRIMARY KEY (`edit_preview_id`),
KEY `asset_id` (`edit_id`),
KEY `type` (`type`),
KEY `preview_id` (`preview_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS `as_asset_previews`;
CREATE TABLE `as_asset_previews` (
`preview_id` int(11) NOT NULL AUTO_INCREMENT,
`asset_id` int(11) NOT NULL,
@@ -60,6 +79,7 @@ CREATE TABLE `as_asset_previews` (
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS `as_categories`;
CREATE TABLE `as_categories` (
`category_id` int(11) NOT NULL AUTO_INCREMENT,
`category` varchar(25) NOT NULL,
@@ -80,6 +100,7 @@ INSERT INTO `as_categories` (`category_id`, `category`, `category_type`) VALUES
(9, 'Projects', 1),
(10, 'Demos', 1);
DROP TABLE IF EXISTS `as_users`;
CREATE TABLE `as_users` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(100) NOT NULL,
@@ -93,4 +114,4 @@ CREATE TABLE `as_users` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 2016-06-21 19:14:52
-- 2016-07-25 18:15:07

View File

@@ -16,15 +16,20 @@ return $constants = [
'accepted' => 2,
'rejected' => 3,
]),
'edit_preview_operation' => double_map([
'insert' => 0,
'remove' => 1,
'update' => 2,
]),
'category_type' => double_map([
'addon' => 0,
'project' => 1,
'any' => '%'
'any' => '%',
]),
'support_level' => double_map([
'testing' => 0,
'community' => 1,
'official' => 2
'official' => 2,
]),
'user_type' => double_map([
'normal' => 0,
@@ -35,5 +40,8 @@ return $constants = [
'title', 'description', 'category_id',
'version_string', 'cost',
'download_url', 'browse_url', 'icon_url',
],
'asset_edit_preview_fields' => [
'type', 'link', 'thumbnail',
]
];

View File

@@ -60,7 +60,7 @@ class Utils
{
if($currentStatus) return true;
if(!isset($object[$property]) || !is_string($object[$property])) {
if(!isset($object[$property]) || !is_string($object[$property]) || $object[$property] == "") {
$response = $response->withJson([
'error' => $property . ' is required, and must be a string'
], 400);

View File

@@ -57,6 +57,7 @@ if(isset($frontend) && $frontend) {
'GET /asset/{id}' => 'asset',
'GET /asset/{id}/edit' => 'edit_asset',
'GET /asset/edit/{id}' => 'asset_edit',
'GET /asset/edit/{id}/edit' => 'edit_asset_edit',
//'/register' => 'registered',
'GET /login' => 'login',
'GET /register' => 'register',

View File

@@ -78,12 +78,31 @@ return [
version=version+:update_version
WHERE asset_id=:asset_id',
'apply_preview_edit_insert' => 'INSERT INTO `as_asset_previews`
SET asset_id=:asset_id, type=:type, link=:link, thumbnail=:thumbnail',
'apply_preview_edit_remove' => 'DELETE FROM `as_asset_previews`
WHERE preview_id=:preview_id',
'apply_preview_edit_update' => 'UPDATE `as_asset_previews`
SET type=COALESCE(:type, type), link=COALESCE(:link, link), thumbnail=COALESCE(:thumbnail, thumbnail)
WHERE preview_id=:preview_id',
'set_support_level' => 'UPDATE `as_assets`
SET support_level=:support_level
WHERE asset_id=:asset_id'
],
'asset_edit' => [
'get_one' => 'SELECT * FROM `as_asset_edits` WHERE edit_id=:edit_id',
'get_one' => 'SELECT edit_id, `as_asset_edits`.asset_id, user_id, title, description, category_id, version_string,
cost, download_url, browse_url, icon_url, status,
edit_preview_id, `as_asset_previews`.preview_id, `as_asset_edit_previews`.type, `as_asset_edit_previews`.link, `as_asset_edit_previews`.thumbnail, `as_asset_edit_previews`.operation,
`as_asset_previews`.type AS orig_type, `as_asset_previews`.link AS orig_link, `as_asset_previews`.thumbnail AS orig_thumbnail,
unedited_previews.preview_id AS unedited_preview_id, unedited_previews.type AS unedited_type, unedited_previews.link AS unedited_link, unedited_previews.thumbnail AS unedited_thumbnail
FROM `as_asset_edits`
LEFT JOIN `as_asset_edit_previews` USING (edit_id)
LEFT JOIN `as_asset_previews` USING (preview_id)
LEFT JOIN `as_asset_previews` AS unedited_previews ON `as_asset_edits`.asset_id = unedited_previews.asset_id
WHERE edit_id=:edit_id',
'get_one_bare' => 'SELECT * FROM `as_asset_edits` WHERE edit_id=:edit_id',
'get_one_with_status' => 'SELECT * FROM `as_asset_edits` WHERE edit_id=:edit_id AND status=:status',
'get_editable_by_asset_id' => 'SELECT * FROM `as_asset_edits` WHERE asset_id=:asset_id AND status=0',
@@ -97,6 +116,14 @@ return [
download_url=COALESCE(:download_url, download_url), browse_url=COALESCE(:browse_url, browse_url), icon_url=COALESCE(:icon_url, icon_url)
WHERE edit_id=:edit_id AND status=0',
'add_preview' => 'INSERT INTO `as_asset_edit_previews`
SET edit_id=:edit_id, preview_id=:preview_id, type=:type, link=:link, thumbnail=:thumbnail, operation=:operation',
'update_preview' => 'UPDATE `as_asset_edit_previews`
SET type=COALESCE(:type, type), link=COALESCE(:link, link), thumbnail=COALESCE(:thumbnail, thumbnail)
WHERE edit_id=:edit_id AND edit_preview_id=:edit_preview_id',
'remove_preview' => 'DELETE FROM `as_asset_edit_previews`
WHERE edit_id=:edit_id AND edit_preview_id=:edit_preview_id',
'set_asset_id' => 'UPDATE `as_asset_edits` SET asset_id=:asset_id WHERE edit_id=:edit_id',
'set_status_and_reason' => 'UPDATE `as_asset_edits` SET status=:status, reason=:reason WHERE edit_id=:edit_id',
],

View File

@@ -127,7 +127,7 @@ $get_asset = function ($request, $response, $args) {
foreach ($row as $column => $value) {
if($value!==null) {
if($column==='preview_id') {
$previews[] = [];
$previews[] = ['preview_id' => $value];
} elseif($column==="type" || $column==="link" || $column==="thumbnail") {
$previews[count($previews) - 1][$column] = $value;
} elseif($column==="category_type") {

View File

@@ -1,6 +1,194 @@
<?php
// Asset editing routes
function _submit_asset_edit($c, $response, $body, $user_id, $asset_id=-1) {
$query = $c->queries['asset_edit']['submit'];
$query->bindValue(':user_id', $user_id, PDO::PARAM_INT);
$query->bindValue(':asset_id', $asset_id, PDO::PARAM_INT);
$error = _insert_asset_edit_fields($c, false, $response, $query, $body, $asset_id==-1);
if($error) return $response;
$query->execute();
$error = $c->utils->error_reponse_if_query_bad(false, $response, $query);
if($error) return $response;
$id = $c->db->lastInsertId();
if(isset($body['previews'])) {
$error = _add_previews_to_edit($c, $error, $response, $id, $body['previews'], $asset_id==-1);
if($error) return $response;
}
return $response->withJson([
'id' => $id,
'url' => 'asset/edit/' . $id,
], 200);
}
function _insert_asset_edit_fields($c, $error, &$response, $query, $body, $required=false) {
if($error) return true;
foreach ($c->constants['asset_edit_fields'] as $i => $field) {
if(!$required) {
if(isset($body[$field])) {
$query->bindValue(':' . $field, $body[$field]);
} else {
$query->bindValue(':' . $field, null, PDO::PARAM_NULL);
}
} else {
$error = $c->utils->error_reponse_if_missing_or_not_string($error, $response, $body, $field);
if(!$error) $query->bindValue(':' . $field, $body[$field]);
}
}
return $error;
}
function _add_previews_to_edit($c, $error, &$response, $edit_id, $previews, $required=false) {
if($error) return true;
foreach ($previews as $i => $preview) {
if(!isset($preview['enabled']) || !$preview['enabled']) continue;
if($required || !isset($preview['edit_preview_id'])) {
$query = $c->queries['asset_edit']['add_preview'];
$error = $c->utils->error_reponse_if_missing_or_not_string($error, $response, $preview, 'operation');
if($error) return $error;
$operation = $c->constants['edit_preview_operation']['insert'];
if(!$required && isset($c->constants['edit_preview_operation'][$preview['operation']])) {
$operation = $c->constants['edit_preview_operation'][$preview['operation']];
}
$query->bindValue(':operation',(int) $operation, PDO::PARAM_INT);
if($operation == $c->constants['edit_preview_operation']['insert']) {
$query->bindValue(':preview_id', -1, PDO::PARAM_INT);
} else {
$error = $c->utils->error_reponse_if_missing_or_not_string($error, $response, $preview, 'preview_id');
if($error) return $error;
$query->bindValue(':preview_id', (int) $preview['preview_id'], PDO::PARAM_INT);
}
} elseif(isset($preview['remove']) && $preview['remove']) {
$query = $c->queries['asset_edit']['remove_preview'];
$query->bindValue(':edit_preview_id', (int) $preview['edit_preview_id'], PDO::PARAM_INT);
$query->bindValue(':edit_id', (int) $edit_id, PDO::PARAM_INT);
$query->execute();
$error = $c->utils->error_reponse_if_query_bad(false, $response, $query);
if($error) return $error;
continue;
} else {
$query = $c->queries['asset_edit']['update_preview'];
$error = $c->utils->error_reponse_if_missing_or_not_string($error, $response, $preview, 'edit_preview_id');
if($error) return $error;
$query->bindValue(':edit_preview_id', (int) $preview['edit_preview_id'], PDO::PARAM_INT);
}
$query->bindValue(':edit_id', (int) $edit_id, PDO::PARAM_INT);
foreach ($c->constants['asset_edit_preview_fields'] as $i => $field) {
if(!$required) {
if(isset($preview[$field])) {
$query->bindValue(':' . $field, $preview[$field]);
} else {
$query->bindValue(':' . $field, null, PDO::PARAM_NULL);
}
} else {
$error = $c->utils->error_reponse_if_missing_or_not_string($error, $response, $preview, $field);
if(!$error) $query->bindValue(':' . $field, $preview[$field]);
}
}
if($error) return $error;
$query->execute();
$error = $c->utils->error_reponse_if_query_bad(false, $response, $query);
if($error) return $error;
}
return $error;
}
// Get an edit
$get_edit = function ($request, $response, $args) {
$query = $this->queries['asset_edit']['get_one'];
$query->bindValue(':edit_id', (int) $args['id'], PDO::PARAM_INT);
$query->execute();
$error = $this->utils->error_reponse_if_query_bad(false, $response, $query);
$error = $this->utils->error_reponse_if_query_no_results($error, $response, $query);
if($error) return $response;
$output = $query->fetchAll();
$previews = [];
$unedited_previews = [];
$unedited_previews_last_i = null;
$asset_edit = [];
foreach ($output as $row) {
foreach ($row as $column => $value) {
if($value!==null) {
if($column==='edit_preview_id') {
$previews[] = ['edit_preview_id' => $value];
} elseif($column==='preview_id' || $column==='type' || $column==='link' || $column==='thumbnail') {
$previews[count($previews) - 1][$column] = $value;
} elseif($column==='operation') {
$previews[count($previews) - 1][$column] = $this->constants['edit_preview_operation'][(int) $value];
} elseif($column==='orig_type' || $column==='orig_link' || $column==='orig_thumbnail') {
$previews[count($previews) - 1]['original'][substr($column, strlen('orig_'))] = $value;
}
elseif($column==='unedited_preview_id') {
$unedited_previews[$value] = ['preview_id' => $value];
$unedited_previews_last_i = $value;
} elseif($column==='unedited_type' || $column==='unedited_link' || $column==='unedited_thumbnail') {
$unedited_previews[$unedited_previews_last_i][substr($column, strlen('unedited_'))] = $value;
}
elseif($column==='status') {
$asset_edit['status'] = $this->constants['edit_status'][(int) $value];
} else {
$asset_edit[$column] = $value;
}
} elseif($column!=='edit_preview_id' && $column!=='preview_id' && $column!=='type' && $column!=='link' && $column!=='thumbnail' && $column!=='operation') {
$asset_edit[$column] = $value;
}
}
}
foreach($previews as $preview) {
if(isset($preview['preview_id']) && isset($unedited_previews[$preview['preview_id']])) {
unset($unedited_previews[$preview['preview_id']]);
}
}
$asset_edit['previews'] = array_merge($previews, array_values($unedited_previews));
if($asset_edit['asset_id'] != -1) {
$query_asset = $this->queries['asset']['get_one_bare'];
$query_asset->bindValue(':asset_id', (int) $asset_edit['asset_id'], PDO::PARAM_INT);
$query_asset->execute();
$error = $this->utils->error_reponse_if_query_bad(false, $response, $query_asset);
$error = $this->utils->error_reponse_if_query_no_results($error, $response, $query_asset);
if($error) return $response;
$asset = $query_asset->fetchAll()[0];
$asset_edit['original'] = $asset;
}
return $response->withJson($asset_edit, 200);
};
// Binding to multiple routes
$app->get('/asset/edit/{id}', $get_edit);
if(isset($frontend) && $frontend) {
$app->get('/asset/edit/{id}/edit', $get_edit);
}
// Submit an asset
$app->post('/asset', function ($request, $response, $args) {
$body = $request->getParsedBody();
@@ -8,27 +196,7 @@ $app->post('/asset', function ($request, $response, $args) {
$error = $this->utils->ensure_logged_in(false, $response, $body, $user_id);
if($error) return $response;
$query = $this->queries['asset_edit']['submit'];
$query->bindValue(':user_id', $user_id, PDO::PARAM_INT);
$query->bindValue(':asset_id', -1, PDO::PARAM_INT);
$error = false;
foreach ($this->constants['asset_edit_fields'] as $i => $field) {
$error = $this->utils->error_reponse_if_missing_or_not_string($error, $response, $body, $field);
if(!$error) $query->bindValue(':' . $field, $body[$field]);
}
if($error) return $response;
$query->execute();
$error = $this->utils->error_reponse_if_query_bad(false, $response, $query);
if($error) return $response;
$id = $this->db->lastInsertId();
return $response->withJson([
'id' => $id,
'url' => 'asset/edit/' . $id,
], 200);
return _submit_asset_edit($this, $response, $body, $user_id, -1);
});
@@ -49,36 +217,13 @@ $app->post('/asset/{id}', function ($request, $response, $args) {
$asset = $query_asset->fetchAll()[0];
// Error out
if((int) $asset['user_id'] !== (int) $user_id) {
return $response->withJson([
'error' => 'You are not authorized to update this asset',
], 403);
}
// Build query
$query = $this->queries['asset_edit']['submit'];
$query->bindValue(':user_id', $user_id, PDO::PARAM_INT);
$query->bindValue(':asset_id', (int) $args['id'], PDO::PARAM_INT);
foreach ($this->constants['asset_edit_fields'] as $i => $field) {
if(isset($body[$field])) {
$query->bindValue(':' . $field, $body[$field]);
} else {
$query->bindValue(':' . $field, null, PDO::PARAM_NULL);
}
}
$query->execute();
$error = $this->utils->error_reponse_if_query_bad(false, $response, $query);
if($error) return $response;
$id = $this->db->lastInsertId();
return $response->withJson([
'id' => $id,
'url' => 'asset/edit/' . $id,
], 200);
return _submit_asset_edit($this, $response, $body, $user_id, (int) $args['id']);
});
@@ -90,7 +235,7 @@ $app->post('/asset/edit/{id}', function ($request, $response, $args) {
if($error) return $response;
// Fetch the edit to check the user id
$query_edit = $this->queries['asset_edit']['get_one'];
$query_edit = $this->queries['asset_edit']['get_one_bare'];
$query_edit->bindValue(':edit_id', (int) $args['id'], PDO::PARAM_INT);
$query_edit->execute();
@@ -116,18 +261,18 @@ $app->post('/asset/edit/{id}', function ($request, $response, $args) {
$query = $this->queries['asset_edit']['update'];
$query->bindValue(':edit_id', (int) $args['id'], PDO::PARAM_INT);
foreach ($this->constants['asset_edit_fields'] as $i => $field) {
if(isset($body[$field])) {
$query->bindValue(':' . $field, $body[$field]);
} else {
$query->bindValue(':' . $field, null, PDO::PARAM_NULL);
}
}
$error = _insert_asset_edit_fields($this, false, $response, $query, $body, false);
if($error) return $response;
$query->execute();
$error = $this->utils->error_reponse_if_query_bad(false, $response, $query);
if($error) return $response;
if(isset($body['previews'])) {
$error = _add_previews_to_edit($this, $error, $response, $args['id'], $body['previews'], false);
if($error) return $response;
}
return $response->withJson([
'id' => $args['id'],
'url' => 'asset/edit/' . $args['id'],
@@ -135,43 +280,6 @@ $app->post('/asset/edit/{id}', function ($request, $response, $args) {
});
// Get an edit
$app->get('/asset/edit/{id}', function ($request, $response, $args) {
$body = $request->getParsedBody();
$query = $this->queries['asset_edit']['get_one'];
$query->bindValue(':edit_id', (int) $args['id'], PDO::PARAM_INT);
$query->execute();
$error = $this->utils->error_reponse_if_query_bad(false, $response, $query);
$error = $this->utils->error_reponse_if_query_no_results($error, $response, $query);
if($error) return $response;
$asset_edit = $query->fetchAll()[0];
if($asset_edit['asset_id'] != -1) {
$query_asset = $this->queries['asset']['get_one_bare'];
$query_asset->bindValue(':asset_id', (int) $asset_edit['asset_id'], PDO::PARAM_INT);
$query_asset->execute();
$error = $this->utils->error_reponse_if_query_bad(false, $response, $query_asset);
$error = $this->utils->error_reponse_if_query_no_results($error, $response, $query_asset);
if($error) return $response;
$asset = $query_asset->fetchAll()[0];
$asset_edit['original'] = $asset;
}
if(isset($this->constants['edit_status'][$asset_edit['status']])) {
$asset_edit['status'] = $this->constants['edit_status'][$asset_edit['status']];
}
return $response->withJson($asset_edit, 200);
});
// Accept an edit
$app->post('/asset/edit/{id}/accept', function ($request, $response, $args) {
$body = $request->getParsedBody();
@@ -183,7 +291,7 @@ $app->post('/asset/edit/{id}/accept', function ($request, $response, $args) {
if($error) return $response;
// Get the edit
$query_edit = $this->queries['asset_edit']['get_one'];
$query_edit = $this->queries['asset_edit']['get_one_bare'];
$query_edit->bindValue(':edit_id', (int) $args['id'], PDO::PARAM_INT);
$query_edit->execute();
@@ -191,7 +299,8 @@ $app->post('/asset/edit/{id}/accept', function ($request, $response, $args) {
$error = $this->utils->error_reponse_if_query_no_results($error, $response, $query_edit);
if($error) return $response;
$asset_edit = $query_edit->fetchAll()[0];
$asset_edit_previews = $query_edit->fetchAll();
$asset_edit = $asset_edit_previews[0];
if((int) $asset_edit['status'] !== $this->constants['edit_status']['in_review']) {
return $response->withJson([
'error' => 'The edit should be in review in order to be accepted',
@@ -243,14 +352,42 @@ $app->post('/asset/edit/{id}/accept', function ($request, $response, $args) {
if((int) $asset_edit['asset_id'] === -1) {
$asset_edit['asset_id'] = $this->db->lastInsertId();
$query_update_version = $this->queries['asset_edit']['set_asset_id'];
$query_update_id = $this->queries['asset_edit']['set_asset_id'];
$query_update_version->bindValue(':edit_id', (int) $args['id'], PDO::PARAM_INT);
$query_update_version->bindValue(':asset_id', (int) $asset_edit['asset_id'], PDO::PARAM_INT);
$query_update_id->bindValue(':edit_id', (int) $args['id'], PDO::PARAM_INT);
$query_update_id->bindValue(':asset_id', (int) $asset_edit['asset_id'], PDO::PARAM_INT);
$query_update_version->execute();
$query_update_id->execute();
$error = $this->utils->error_reponse_if_query_bad(false, $response, $query_update_version);
$error = $this->utils->error_reponse_if_query_bad(false, $response, $query_update_id);
if($error) return $response;
}
foreach($asset_edit_previews as $i => $preview) {
if(!isset($preview['edit_preview_id']) || $preview['edit_preview_id'] == null) continue;
$operation = $this->constants['edit_preview_operation'][$preview['operation']];
$query_apply_preview = $this->queries['asset']['apply_preview_edit_' . $operation];
if($operation == 'insert') {
$query_apply_preview->bindValue(':asset_id', (int) $asset_edit['asset_id']);
}
if($operation == 'remove' || $operation == 'update') {
$query_apply_preview->bindValue(':preview_id', (int) $asset_edit['preview_id']);
}
if($operation == 'insert' || $operation == 'update') {
foreach ($this->constants['asset_edit_preview_fields'] as $i => $field) {
if(isset($preview[$field])) {
$query_apply_preview->bindValue(':' . $field, $preview[$field]);
} else {
$query_apply_preview->bindValue(':' . $field, null, PDO::PARAM_NULL);
}
}
}
$query_apply_preview->execute();
$error = $this->utils->error_reponse_if_query_bad(false, $response, $query_apply_preview);
if($error) return $response;
}
@@ -270,7 +407,7 @@ $app->post('/asset/edit/{id}/review', function ($request, $response, $args) {
if($error) return $response;
// Get the edit
$query_edit = $this->queries['asset_edit']['get_one'];
$query_edit = $this->queries['asset_edit']['get_one_bare'];
$query_edit->bindValue(':edit_id', (int) $args['id'], PDO::PARAM_INT);
$query_edit->execute();
@@ -298,6 +435,7 @@ $app->post('/asset/edit/{id}/review', function ($request, $response, $args) {
if($error) return $response;
$asset_edit['status'] = 'in_review'; // Prepare to send
$asset_edit['url'] = 'asset/edit/' . $args['id'];
return $response->withJson($asset_edit, 200);
});
@@ -326,5 +464,6 @@ $app->post('/asset/edit/{id}/reject', function ($request, $response, $args) {
return $response->withJson([
'rejected' => true,
'url' => 'asset/edit/' . $args['id'],
], 200);
});

View File

@@ -123,6 +123,11 @@ $app->post('/login', function ($request, $response, $args) {
'token' => $token,
'authenticated' => true,
], 200);
} else {
return $response->withJson([
'authenticated' => false,
'url' => 'login',
], 403);
}
});

View File

@@ -10,6 +10,7 @@ $_asset_values = array_merge([
'icon_url' => '',
'description' => '',
'cost' => '',
'previews' => [],
], $_asset_values);
?>
<div class="form-group">
@@ -86,10 +87,90 @@ $_asset_values = array_merge([
</div>
</div>
<div class="form-group">
<label class="col-md-4 control-label" for="youtube">Youtube Link</label>
<div class="col-md-5">
<input id="youtube" name="youtube" type="text" placeholder="Youtube Link" class="form-control input-md">
<span class="help-block">Set the youtube link demonstrating your asset</span>
<?php for ($i=0; $i < count($_asset_values['previews']) + 3; $i++) {
if($i < count($_asset_values['previews'])) $preview = $_asset_values['previews'][$i];
else $preview = ['type' => 'image', 'link' => '', 'thumbnail' => '']
?>
<div class="panel panel-default">
<div class="panel-heading form-inline">
<div class="text-center">
<span class="panel-title">
<?php if($i < count($_asset_values['previews'])) {
if(isset($preview['edit_preview_id'])) {
echo 'Revise ' . $preview['operation'] . ' operation';
} else {
echo 'Update original preview';
}
} else {
echo 'Add preview';
} ?>
</span>
<?php if($i < count($_asset_values['previews'])) { ?>
<?php if(isset($preview['edit_preview_id'])) { // Existing edit ?>
<input type="hidden" name="previews[<?php echo $i ?>][edit_preview_id]" value="<?php echo $preview['edit_preview_id'] ?>">
<input type="hidden" name="previews[<?php echo $i ?>][enabled]" value="true">
<label>
<input type="checkbox" name="previews[<?php echo $i ?>][remove]" value="true">
Cancel edit
</label>
<?php } else { // From base asset ?>
<input type="hidden" name="previews[<?php echo $i ?>][preview_id]" value="<?php echo $preview['preview_id'] ?>">
<label>
<input type="checkbox" name="previews[<?php echo $i ?>][enabled]" value="true">
Enable
</label>
<label>
<input type="radio" name="previews[<?php echo $i ?>][operation]" value="update" checked="">
Update
</label>
<label>
<input type="radio" name="previews[<?php echo $i ?>][operation]" value="remove">
Remove
</label>
<?php } ?>
<?php } else { ?>
<input type="hidden" name="previews[<?php echo $i ?>][operation]" value="insert">
<label>
<input type="checkbox" name="previews[<?php echo $i ?>][enabled]" value="true">
Enable
</label>
<?php } ?>
</div>
</div>
<div class="panel-body">
<div class="form-group">
<label class="col-md-4 control-label" for="previews[<?php echo $i ?>][type]">Type</label>
<div class="col-md-5">
<select id="license" name="previews[<?php echo $i ?>][type]" class="form-control">
<?php $types = ['image' => 'Image', 'video' => 'Video'] ?>
<?php foreach($types as $id => $name) { ?>
<option value="<?php echo $id ?>" <?php if($id == $preview['type']) echo 'selected=""'; ?>>
<?php echo $name ?>
</option>
<?php } ?>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-4" for="previews[<?php echo $i ?>][link]">Image/Youtube Link</label>
<div class="col-md-5">
<input id="youtube-<?php echo $i ?>" name="previews[<?php echo $i ?>][link]" type="text" placeholder="Image/Youtube Link" class="form-control input-md" value="<?php echo $preview['link'] ?>">
</div>
</div>
<div class="form-group">
<label class="control-label col-md-4" for="previews[<?php echo $i ?>][thumbnail]">Link to thumbnail (To be removed)</label>
<div class="col-md-5">
<input id="youtube-<?php echo $i ?>" name="previews[<?php echo $i ?>][thumbnail]" type="text" placeholder="Image Link" class="form-control input-md" value="<?php echo $preview['thumbnail'] ?>">
</div>
</div>
</div>
</div>
</div>
<?php } ?>

View File

@@ -8,17 +8,43 @@
'download_url' => 'Download Url',
'browse_url' => 'Browse Url',
'icon_url' => 'Icon Url',
] ?>
<?php function output_field($data, $name) { ?>
<?php if (strpos($name, 'url') !== false) { ?>
];
$preview_field_names = [
'type' => 'Type',
'link' => 'Image/Video URL',
'thumbnail' => 'Thumbnail',
]; ?>
<?php function output_field($data, $name) { $data = htmlspecialchars($data);?>
<?php if (strpos($name, 'url') !== false || strpos($name, 'link') !== false || strpos($name, 'thumbnail') !== false) { ?>
<a href="<?php echo $data ?>"><?php echo $data ?></a>
<?php if ($name == 'icon_url') { ?>
<br><img src="<?php echo $data ?>" width="80" height="80"></a>
<?php }?>
<?php if ($name == 'preview_link') { ?>
<br><img src="<?php echo $data ?>" style="max-height:80px"></a>
<?php }?>
<?php if ($name == 'preview_thumbnail') { ?>
<br><img src="<?php echo $data ?>" style="max-height:345px"></a>
<?php }?>
<?php } else { ?>
<?php echo $data ?>
<?php } ?>
<?php } ?>
<h1>
<?php if(isset($data['original'])) { ?>
Edit of asset
<a href="<?php echo $basepath ?>/asset/<?php echo $data['asset_id'] ?>">"<?php echo $data['original']['title'] ?>"</a>
<?php } else { ?>
Creation of asset
<a href="<?php echo $basepath ?>/asset/<?php echo $data['asset_id'] ?>">"<?php echo $data['title'] ?>"</a>
<?php } ?>
<span class="label label-<?php echo ['new' => 'info', 'in_review' => 'primary', 'rejected' => 'danger', 'accepted' => 'success'][$data['status']] ?>">
<?php echo ucfirst(str_replace('_', ' ', $data['status'])) ?>
</span>
</h1>
<?php if($data['user_id'] == $user['id'] && $data['status'] == 'new') { ?>
<a class="btn btn-success" href="<?php echo $basepath ?>/asset/edit/<?php echo $data['edit_id'] ?>/edit">Revise</a>
<?php } ?>
<table class="table table-bordered">
<tbody>
<tr>
@@ -55,20 +81,75 @@
<?php } ?>
</tr>
<?php } ?>
<?php foreach($data['previews'] as $i => $preview) if(isset($preview['edit_preview_id'])) { ?>
<tr>
<th colspan="3" class="text-center">
Preview
<span class="label label-danger"><?php output_field(ucfirst($preview['operation']), 'preview_operation') ?></span>
</th>
</tr>
<?php foreach($preview_field_names as $field => $name) { ?>
<tr>
<td>
<?php echo $name ?>
</td>
<?php if(isset($preview['original']) && $preview['operation'] != "remove" && ($preview[$field] === null || $preview[$field] === $preview['original'][$field])) { ?>
<td colspan="2" class="text-center active">
<?php output_field($preview['original'][$field], 'preview_' . $field) ?>
</td>
<?php } else { ?>
<?php if(isset($preview['original'])) { ?>
<?php if($preview['operation'] == "remove") { ?>
<td class="text-center danger" colspan="2">
<?php output_field($preview['original'][$field], 'preview_' . $field) ?>
</td>
<?php } else { ?>
<td class="text-right danger">
<?php output_field($preview['original'][$field], 'preview_' . $field) ?>
</td>
<td class="text-left success">
<?php output_field($preview[$field], 'preview_' . $field) ?>
</td>
<?php } ?>
<?php } else { ?>
<td class="text-center success" colspan="2">
<?php output_field($preview[$field], 'preview_' . $field) ?>
</td>
<?php } ?>
<?php } ?>
</tr>
<?php } ?>
<?php } ?>
</tbody>
</table>
<?php if(isset($user)) { ?>
<?php if($user['type'] >= 100) { ?>
<form class="form-inline" style="display: inline-block" action="<?php echo $basepath ?>/asset/edit/<?php echo $data['edit_id']; ?>/accept" method="post">
<button type="submit" class="btn btn-success">Accept</button>
</form>
<form class="form-inline" style="display: inline-block" action="<?php echo $basepath ?>/asset/edit/<?php echo $data['edit_id']; ?>/reject" method="post">
<div class="form-group">
<button type="submit" class="btn btn-danger">Reject</button>
<label class="control-label" for="reason">Reason:</label>
<input type="text" class="form-control" id="reason" name="reason" rows="3"></textarea>
</div>
</form>
<?php if($user['type'] >= 50) { ?>
<?php if($data['status'] == 'new') { ?>
<form class="form-inline" action="<?php echo $basepath ?>/asset/edit/<?php echo $data['edit_id']; ?>/review" method="post">
<button type="submit" class="btn btn-primary">Put in queue</button>
</form>
<?php } elseif($data['status'] == 'in_review') { ?>
<form class="form-inline" action="<?php echo $basepath ?>/asset/edit/<?php echo $data['edit_id']; ?>/accept" method="post">
<div class="form-group panel">
<button type="submit" class="btn btn-success">Accept</button>
<label class="control-label" for="hash">Hash:</label>
<input type="text" class="form-control" id="hash" name="hash">
</div>
</form>
<form class="form-inline" action="<?php echo $basepath ?>/asset/edit/<?php echo $data['edit_id']; ?>/reject" method="post">
<div class="form-group panel">
<button type="submit" class="btn btn-danger">Reject</button>
<label class="control-label" for="reason">Reason:</label>
<input type="text" class="form-control" id="reason" name="reason">
</div>
</form>
<?php } ?>
<?php } ?>
<?php } ?>
<?php include("_footer.phtml") ?>

View File

@@ -0,0 +1,27 @@
<?php include("_header.phtml") ?>
<?php $_asset_values = $data ?>
<form class="form-horizontal" action="<?php echo $basepath ?>/asset/edit/<?php echo $data['edit_id']; ?>" method="post">
<fieldset>
<!-- Form Name -->
<legend>
Revise edit
<a class="btn btn-default btn-sm" href="<?php echo $basepath ?>/asset/edit/<?php echo $data['edit_id'] ?>">
Back
</a>
</legend>
<?php include("_asset_fields.phtml") ?>
<div class="form-group">
<label class="col-md-4 control-label" for="submit"></label>
<div class="col-md-4">
<button id="submit" class="btn btn-primary">Revise edit</button>
<a class="btn btn-default" href="<?php echo $basepath ?>/asset/edit/<?php echo $data['edit_id'] ?>">
Cancel
</a>
</div>
</div>
</fieldset>
</form>
<?php include("_footer.phtml") ?>