admin page v1
This commit is contained in:
@@ -29,6 +29,10 @@ class Project extends PhpObject {
|
||||
$this->oDb = &$oDb;
|
||||
}
|
||||
|
||||
public function getProjectId() {
|
||||
return $this->iProjectId;
|
||||
}
|
||||
|
||||
public function setProjectId($iProjectId=0) {
|
||||
if($iProjectId > 0) {
|
||||
$this->iProjectId = $iProjectId;
|
||||
@@ -53,26 +57,48 @@ class Project extends PhpObject {
|
||||
return $this->sMode;
|
||||
}
|
||||
|
||||
public function getProjectId() {
|
||||
return $this->iProjectId;
|
||||
}
|
||||
|
||||
public function getProjectCodeName() {
|
||||
return $this->sCodeName;
|
||||
}
|
||||
|
||||
public function setProjectCodeName($sCodeName) {
|
||||
return $this->updateField('codename', $sCodeName);
|
||||
}
|
||||
|
||||
public function getActivePeriod($sFromTo='') {
|
||||
return ($sFromTo=='')?$this->asActive:$this->asActive[$sFromTo];
|
||||
}
|
||||
|
||||
public function setActivePeriod($oValue, $sFromTo='') {
|
||||
if($sFromTo=='') {
|
||||
$this->updateField('active_from', $oValue['from']);
|
||||
return $this->updateField('active_to', $oValue['to']);
|
||||
}
|
||||
else {
|
||||
return $this->updateField('active_'.$sFromTo, $oValue);
|
||||
}
|
||||
}
|
||||
|
||||
public function getTimeZone() {
|
||||
return $this->asGeo['timezone'];
|
||||
}
|
||||
|
||||
public function setTimeZone($sTimeZone) {
|
||||
return $this->updateField('timezone', $sTimeZone);
|
||||
}
|
||||
|
||||
public function getGeoFile() {
|
||||
return $this->asGeo['file'];
|
||||
}
|
||||
|
||||
public function getFeedIds() {
|
||||
return $this->oDb->selectColumn(
|
||||
Feed::FEED_TABLE,
|
||||
Db::getId(Feed::FEED_TABLE),
|
||||
array(Db::getId(self::PROJ_TABLE) => $this->getProjectId())
|
||||
);
|
||||
}
|
||||
|
||||
public function getProjects($iProjectId=0) {
|
||||
$bSpecificProj = ($iProjectId > 0);
|
||||
$asInfo = array(
|
||||
@@ -109,17 +135,13 @@ class Project extends PhpObject {
|
||||
return $bSpecificProj?$asProject:$asProjects;
|
||||
}
|
||||
|
||||
public function getFeedIds() {
|
||||
return $this->oDb->selectColumn(
|
||||
Feed::FEED_TABLE,
|
||||
Db::getId(Feed::FEED_TABLE),
|
||||
array(Db::getId(self::PROJ_TABLE) => $this->getProjectId())
|
||||
);
|
||||
public function getProject() {
|
||||
return $this->getProjects($this->getProjectId());
|
||||
}
|
||||
|
||||
private function setProjectInfo() {
|
||||
if($this->getProjectId() > 0) {
|
||||
$asProject = $this->getProjects($this->getProjectId());
|
||||
$asProject = $this->getProject();
|
||||
|
||||
$this->sMode = $asProject['mode'];
|
||||
$this->asActive = array('from'=>$asProject['active_from'], 'to'=>$asProject['active_to']);
|
||||
@@ -129,4 +151,11 @@ class Project extends PhpObject {
|
||||
}
|
||||
else $this->addError('Error while setting project: no project ID');
|
||||
}
|
||||
|
||||
private function updateField($sField, $oValue) {
|
||||
$bResult = ($this->oDb->updateRow(self::PROJ_TABLE, $this->getProjectId(), array($sField=>$oValue)) > 0);
|
||||
$this->setProjectInfo();
|
||||
|
||||
return $bResult;
|
||||
}
|
||||
}
|
||||
25
inc/spot.php
25
inc/spot.php
@@ -327,6 +327,31 @@ class Spot extends Main
|
||||
return self::getJsonResult(true, '');
|
||||
}
|
||||
|
||||
public function getAdminSettings() {
|
||||
return self::getJsonResult(true, '', array('projects'=>$this->oProject->getProjects()));
|
||||
}
|
||||
|
||||
public function setAdminSettings($sField, $sValue) {
|
||||
$bSuccess = false;
|
||||
$sDesc = '';
|
||||
|
||||
switch($sField) {
|
||||
case 'codename':
|
||||
$bSuccess = $this->oProject->setProjectCodeName($sValue);
|
||||
break;
|
||||
case 'active_from':
|
||||
case 'active_to':
|
||||
$bSuccess = $this->oProject->setActivePeriod($sValue, mb_substr($sField, 7));
|
||||
break;
|
||||
case 'timezone':
|
||||
$bSuccess = $this->oProject->setTimeZone($sValue);
|
||||
break;
|
||||
}
|
||||
if(!$bSuccess) $sDesc = 'Issue committing to DB';
|
||||
|
||||
return self::getJsonResult($bSuccess, $sDesc, array('values'=>$this->oProject->getProject()));
|
||||
}
|
||||
|
||||
public static function DecToDMS($dValue, $sType='lat') {
|
||||
if($sType=='lat') $sDirection = ($dValue >= 0)?'N':'S';
|
||||
else $sDirection = ($dValue >= 0)?'E':'W';
|
||||
|
||||
@@ -17,6 +17,8 @@ $sName = isset($_GET['name'])?$_GET['name']:'';
|
||||
$sContent = isset($_GET['content'])?$_GET['content']:'';
|
||||
$iChunk = isset($_GET['chunk'])?$_GET['chunk']:0;
|
||||
$iProjectId = isset($_REQUEST['project_id'])?$_REQUEST['project_id']:0;
|
||||
$sField = isset($_REQUEST['field'])?$_REQUEST['field']:'';
|
||||
$oValue = isset($_REQUEST['value'])?$_REQUEST['value']:'';
|
||||
|
||||
//Initiate class
|
||||
$oSpot = new Spot($oClassManagement, __FILE__);
|
||||
@@ -45,6 +47,12 @@ if($sAction!='')
|
||||
case 'sync_pics':
|
||||
$sResult = $oSpot->syncPics();
|
||||
break;
|
||||
case 'get_admin':
|
||||
$sResult = $oSpot->getAdminSettings();
|
||||
break;
|
||||
case 'set_admin':
|
||||
$sResult = $oSpot->setAdminSettings($sField, $oValue);
|
||||
break;
|
||||
default:
|
||||
$sResult = Main::getJsonResult(false, Main::NOT_FOUND);
|
||||
}
|
||||
|
||||
88
masks/admin.html
Normal file
88
masks/admin.html
Normal file
@@ -0,0 +1,88 @@
|
||||
<div id="admin">
|
||||
<div id="projects">
|
||||
<table>
|
||||
<tr>
|
||||
<th>Project</th>
|
||||
<th>Mode</th>
|
||||
<th>Code Name</th>
|
||||
<th>Start</th>
|
||||
<th>End</th>
|
||||
<th>Time Zone</th>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="feedback"></div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
|
||||
oSpot.pageInit = function(asHash) {
|
||||
self.get(
|
||||
'get_admin',
|
||||
function(asData){
|
||||
setProjects(asData.projects);
|
||||
},
|
||||
{},
|
||||
function(e){console.log(e);}
|
||||
);
|
||||
};
|
||||
|
||||
oSpot.onFeedback = function(sType, sMsg, asContext) {
|
||||
delete asContext.a;
|
||||
sMsg += ' (context: ';
|
||||
$.each(asContext, function(sKey, sElem) {
|
||||
sMsg += sKey+'='+sElem+' / ' ;
|
||||
});
|
||||
sMsg = sMsg.slice(0, -3)+')';
|
||||
$('#feedback').append($('<p>', {'class': sType}).text(sMsg));
|
||||
};
|
||||
|
||||
function setProjects(asProjects) {
|
||||
$.each(asProjects, function(iKey, oProject) {
|
||||
var sElemId = 'proj_'+oProject.id;
|
||||
var $Project = ($('#'+sElemId).length==0)?$('<tr>', {'id': sElemId}):$('#'+sElemId).empty();
|
||||
|
||||
console.log(sElemId);
|
||||
console.log($('#'.sElemId).length);
|
||||
|
||||
$Project
|
||||
.data('project_id', oProject.id)
|
||||
.append($('<td>', {'class': 'name'}).text(oProject.name))
|
||||
.append($('<td>', {'class': 'mode'}).text(oProject.mode))
|
||||
.append($('<td>').addInput('text', 'codename', oProject.codename))
|
||||
.append($('<td>').addInput('date', 'active_from', oProject.active_from.substr(0, 10)))
|
||||
.append($('<td>').addInput('date', 'active_to', oProject.active_to.substr(0, 10)))
|
||||
.append($('<td>').addInput('text', 'timezone', oProject.timezone))
|
||||
.appendTo($('#projects').find('table'));
|
||||
});
|
||||
|
||||
$('input')
|
||||
.change(commit)
|
||||
.keyup(waitAndCommit);
|
||||
}
|
||||
|
||||
function commit(event, $This) {
|
||||
$This = $This || $(this);
|
||||
var sNewVal = $This.val();
|
||||
if($This.data('old_value')!=sNewVal) { console.log('commit');
|
||||
$This.data('old_value', sNewVal);
|
||||
|
||||
var asInputs = {project_id: $This.closest('tr').data('project_id'), field: $This.attr('name'), value: sNewVal};
|
||||
self.get(
|
||||
'set_admin',
|
||||
function(asData){
|
||||
oSpot.onFeedback('success', 'Sauvegarde OK', asInputs);
|
||||
setProjects([asData.values]);
|
||||
},
|
||||
asInputs,
|
||||
function(sError){
|
||||
oSpot.onFeedback('error', sError, asInputs);
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function waitAndCommit(event) { console.log('waitAndCommit');
|
||||
if(typeof self.tmp('wait') != 'undefined') clearTimeout(self.tmp('wait'));
|
||||
self.tmp('wait', setTimeout(()=>{commit(event,$(this));}, 1000));
|
||||
}
|
||||
</script>
|
||||
@@ -226,6 +226,11 @@ function setElem(aoAnchor, asPath, oValue)
|
||||
}
|
||||
}
|
||||
|
||||
$.prototype.addInput = function(sType, sName, sValue)
|
||||
{
|
||||
return $(this).append($('<input>', {type: sType, name: sName, value: sValue}).data('old_value', sValue));
|
||||
};
|
||||
|
||||
$.prototype.addIcon = function(sIcon, bMargin, sStyle)
|
||||
{
|
||||
bMargin = bMargin || false;
|
||||
|
||||
9
style/_mask_admin.scss
Normal file
9
style/_mask_admin.scss
Normal file
@@ -0,0 +1,9 @@
|
||||
#feedback {
|
||||
.error {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.success {
|
||||
color: green;
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -11,5 +11,6 @@
|
||||
/* Pages Specific CSS (masks) */
|
||||
@import 'mask_project';
|
||||
@import 'mask_upload';
|
||||
@import 'mask_admin';
|
||||
|
||||
@import 'mobile';
|
||||
Reference in New Issue
Block a user