link persons and projects (UI)

This commit is contained in:
Ulf Gebhardt 2019-09-03 12:49:55 +02:00
parent 559a114e05
commit 8a7bd1dbac
No known key found for this signature in database
GPG Key ID: 81308EFE29ABFEBD
11 changed files with 283 additions and 1 deletions

View File

@ -357,6 +357,71 @@ function init_saimod_person_details(){
}
});
// Project New Button
$('#btn-person-project-new').click(function(){
person = $(this).attr('person');
project = $('#input-project').val();
$.ajax({
async: true,
url: this.endpoint,
type: 'POST',
dataType: 'JSON',
data: {
sai_mod: '.SAI.saimod_person',
action: 'person_project_new',
data: {
person: person,
project: project
}
},
success: function(data){
if(data.status){
system.reload();
} else {
alert('Something happend - try again!');
}
},
error: function(){
alert('Something happend - try again!');
}
});
});
// Projects Delete
$('#btn-projects-del').click(function(){
person = $(this).attr('person');
var projects = [];
$(this).parent().parent().parent().parent().find('.project-check:checked').each(function() {
projects.push($(this).attr('project'));
});
if (confirm('Are you sure you want to delete '+projects.length+' Projects PERMANENTLY?')) {
$.ajax({
async: true,
url: this.endpoint,
type: 'POST',
dataType: 'JSON',
data: {
sai_mod: '.SAI.saimod_person',
action: 'person_project_delete',
data: {
person: person,
projects: projects
}
},
success: function(data){
if(data.status){
system.reload();
} else {
alert('Something happend - try again!');
}
},
error: function(){
alert('Something happend - try again!');
}
});
}
});
// Back Button
$('.btn-person-back').click(function(){
system.back();

View File

@ -118,9 +118,39 @@ class saimod_person extends \SYSTEM\SAI\sai_module{
$vars['abilities'] .= \SYSTEM\PAGE\replace::replaceFile((new \SAI\PPERSON('tpl/saimod_person_badge_tr.tpl'))->SERVERPATH(),$row);
}
// Projects
$vars['projects'] = '';
$projects = \SQL\SELECT_PERSON_PROJECTS_PERSON::QQ(array($person));
while($row = $projects->next()){
$row['visible'] = $row['visible'] == 1 ? 'visible' : 'invisible';
$vars['projects'] .= \SYSTEM\PAGE\replace::replaceFile((new \SAI\PPERSON('tpl/saimod_person_project_tr.tpl'))->SERVERPATH(),$row);
}
$vars['select_projects'] = '';
$select_projects = \SQL\SELECT_PERSON_PROJECTS_MISSING::QQ(array($person));
while($row = $select_projects->next()){
$row['selected'] = '';
$row['value'] = $row['id'];
$row['text'] = $row['name'].' - '.$row['website'];
$vars['select_projects'] .= \SYSTEM\PAGE\replace::replaceFile((new \SAI\PPERSON('tpl/select_option.tpl'))->SERVERPATH(),$row);
}
return \SYSTEM\PAGE\replace::replaceFile((new \SAI\PPERSON('tpl/saimod_person_details.tpl'))->SERVERPATH(),$vars);
}
public static function sai_mod__SAI_saimod_person_action_person_project_new($data){
return \SYSTEM\LOG\JsonResult::status(
\SQL\INSERT_PERSON_PROJECT::QI(array( $data['person'],
$data['project']))
);
}
public static function sai_mod__SAI_saimod_person_action_person_project_delete($data){
foreach($data['projects'] as $id){
\SQL\DELETE_PERSON_PROJECT::QI(array($data['person'],$id));
}
return \JsonResult::ok();
}
public static function sai_mod__SAI_saimod_person_action_person_update($data){
return \SYSTEM\LOG\JsonResult::status(
\SQL\UPDATE_PERSON::QI(array( $data['img'],

View File

@ -0,0 +1,33 @@
<?php
/**
* System - PHP Framework
*
* PHP Version 5.6
*
* @copyright 2016 Ulf Gebhardt (http://www.webcraft-media.de)
* @license http://www.opensource.org/licenses/mit-license.php MIT
* @link https://github.com/webcraftmedia/system
* @package SYSTEM\SQL
*/
namespace SQL;
/**
* QQ to get System Api Tree by group
*/
class DELETE_PERSON_PROJECT extends \SYSTEM\DB\QP {
/**
* Get Classname of the QQ
*
* @return string Returns classname
*/
public static function get_class(){return \get_class();}
/**
* Get QQs MYSQL Query String
*
* @return string Returns MYSQL Query String
*/
public static function mysql(){return
'DELETE FROM `person_projects` WHERE `person` = ? AND `project` = ?;';
}
}

View File

@ -0,0 +1,35 @@
<?php
/**
* System - PHP Framework
*
* PHP Version 5.6
*
* @copyright 2016 Ulf Gebhardt (http://www.webcraft-media.de)
* @license http://www.opensource.org/licenses/mit-license.php MIT
* @link https://github.com/webcraftmedia/system
* @package SYSTEM\SQL
*/
namespace SQL;
/**
* QQ to get System Api Tree by group
*/
class INSERT_PERSON_PROJECT extends \SYSTEM\DB\QP {
/**
* Get Classname of the QQ
*
* @return string Returns classname
*/
public static function get_class(){return \get_class();}
/**
* Get QQs MYSQL Query String
*
* @return string Returns MYSQL Query String
*/
public static function mysql(){return
'INSERT INTO `person_projects` (`person`, `project`)'.
' VALUES(?, ?);';
}
}

View File

@ -0,0 +1,36 @@
<?php
/**
* System - PHP Framework
*
* PHP Version 5.6
*
* @copyright 2016 Ulf Gebhardt (http://www.webcraft-media.de)
* @license http://www.opensource.org/licenses/mit-license.php MIT
* @link https://github.com/webcraftmedia/system
* @package SYSTEM\SQL
*/
namespace SQL;
/**
* QQ to get System Api Tree by group
*/
class SELECT_PERSON_PROJECTS_MISSING extends \SYSTEM\DB\QP {
/**
* Get Classname of the QQ
*
* @return string Returns classname
*/
public static function get_class(){return \get_class();}
/**
* Get QQs MYSQL Query String
*
* @return string Returns MYSQL Query String
*/
public static function mysql(){return
'SELECT *'.
' FROM `projects`'.
' WHERE `id` NOT IN (SELECT `project` FROM `person_projects`WHERE `person` = ?)'.
' ORDER BY `order`;';
}
}

View File

@ -0,0 +1,37 @@
<?php
/**
* System - PHP Framework
*
* PHP Version 5.6
*
* @copyright 2016 Ulf Gebhardt (http://www.webcraft-media.de)
* @license http://www.opensource.org/licenses/mit-license.php MIT
* @link https://github.com/webcraftmedia/system
* @package SYSTEM\SQL
*/
namespace SQL;
/**
* QQ to get System Api Tree by group
*/
class SELECT_PERSON_PROJECTS_PERSON extends \SYSTEM\DB\QP {
/**
* Get Classname of the QQ
*
* @return string Returns classname
*/
public static function get_class(){return \get_class();}
/**
* Get QQs MYSQL Query String
*
* @return string Returns MYSQL Query String
*/
public static function mysql(){return
'SELECT *'.
' FROM `person_projects`'.
' LEFT JOIN `projects` ON `person_projects`.`project` = `projects`.`id`'.
' WHERE `person_projects`.`person` = ?'.
' ORDER BY `order`;';
}
}

View File

@ -15,3 +15,5 @@ REPLACE INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `na
REPLACE INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (10045, 42, 2, 10000, 'badge_delete', 'data', 'JSON');
REPLACE INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (10050, 42, 2, 10000, 'person_save', 'data', 'JSON');
REPLACE INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (10051, 42, 2, 10000, 'person_project_new', 'data', 'JSON');
REPLACE INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (10052, 42, 2, 10000, 'person_project_delete', 'data', 'JSON');

View File

@ -1 +0,0 @@
<option value="${value}" ${selected}>${value}</option>

View File

@ -79,6 +79,40 @@
</table>
</th>
</tr>
<tr>
<th colspan="2">Projects</th>
</tr>
<tr>
<th colspan="2">
<table class="table table-striped table-condensed tablesorter sai_margin_off" id="table-person-projects">
<thead>
<tr>
<th>Image</th>
<th>Name</th>
<th>Website</th>
<th>Order</th>
<th>Visible</th>
<th>
<button type="button" id="btn-projects-del" class="btn btn-sm btn-danger pull-right" person="${id}"><i class="fa fa-trash"></i></button>
</th>
</tr>
</thead>
<tbody>
${projects}
<tr>
<td colspan="5">
<select id="input-project" class="form-control">
${select_projects}
</select>
</td>
<td>
<button type="button" id="btn-person-project-new" class="btn btn-sm btn-success pull-right" person="${id}"><i class="fa fa-plus"></i></button>
</td>
</tr>
</tbody>
</table>
</th>
</tr>
<tr>
<th colspan="2">
<button class="btn btn-sm btn-default btn-person-back" ><i class="fa fa-angle-left"></i>&nbsp;Back</button>

View File

@ -0,0 +1,10 @@
<tr>
<td><a href="#!project(details);project.${id}"><img src="./files/projects/${img}" alt="Img not found" style="width: 75px; height: 75px"/></a></td>
<td><a href="#!project(details);project.${id}">${name}</a></td>
<td><a href="${website}" target="_blank">${website}</a></td>
<td>${order}</td>
<td>${visible}</td>
<td>
<input type="checkbox" class="pull-right project-check" project="${id}"/>
</td>
</tr>

View File

@ -0,0 +1 @@
<option value="${value}" ${selected}>${text}</option>