admin page v1
This commit is contained in:
@@ -29,6 +29,10 @@ class Project extends PhpObject {
|
|||||||
$this->oDb = &$oDb;
|
$this->oDb = &$oDb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getProjectId() {
|
||||||
|
return $this->iProjectId;
|
||||||
|
}
|
||||||
|
|
||||||
public function setProjectId($iProjectId=0) {
|
public function setProjectId($iProjectId=0) {
|
||||||
if($iProjectId > 0) {
|
if($iProjectId > 0) {
|
||||||
$this->iProjectId = $iProjectId;
|
$this->iProjectId = $iProjectId;
|
||||||
@@ -53,25 +57,47 @@ class Project extends PhpObject {
|
|||||||
return $this->sMode;
|
return $this->sMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getProjectId() {
|
|
||||||
return $this->iProjectId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getProjectCodeName() {
|
public function getProjectCodeName() {
|
||||||
return $this->sCodeName;
|
return $this->sCodeName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setProjectCodeName($sCodeName) {
|
||||||
|
return $this->updateField('codename', $sCodeName);
|
||||||
|
}
|
||||||
|
|
||||||
public function getActivePeriod($sFromTo='') {
|
public function getActivePeriod($sFromTo='') {
|
||||||
return ($sFromTo=='')?$this->asActive:$this->asActive[$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() {
|
public function getTimeZone() {
|
||||||
return $this->asGeo['timezone'];
|
return $this->asGeo['timezone'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setTimeZone($sTimeZone) {
|
||||||
|
return $this->updateField('timezone', $sTimeZone);
|
||||||
|
}
|
||||||
|
|
||||||
public function getGeoFile() {
|
public function getGeoFile() {
|
||||||
return $this->asGeo['file'];
|
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) {
|
public function getProjects($iProjectId=0) {
|
||||||
$bSpecificProj = ($iProjectId > 0);
|
$bSpecificProj = ($iProjectId > 0);
|
||||||
@@ -109,17 +135,13 @@ class Project extends PhpObject {
|
|||||||
return $bSpecificProj?$asProject:$asProjects;
|
return $bSpecificProj?$asProject:$asProjects;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getFeedIds() {
|
public function getProject() {
|
||||||
return $this->oDb->selectColumn(
|
return $this->getProjects($this->getProjectId());
|
||||||
Feed::FEED_TABLE,
|
|
||||||
Db::getId(Feed::FEED_TABLE),
|
|
||||||
array(Db::getId(self::PROJ_TABLE) => $this->getProjectId())
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function setProjectInfo() {
|
private function setProjectInfo() {
|
||||||
if($this->getProjectId() > 0) {
|
if($this->getProjectId() > 0) {
|
||||||
$asProject = $this->getProjects($this->getProjectId());
|
$asProject = $this->getProject();
|
||||||
|
|
||||||
$this->sMode = $asProject['mode'];
|
$this->sMode = $asProject['mode'];
|
||||||
$this->asActive = array('from'=>$asProject['active_from'], 'to'=>$asProject['active_to']);
|
$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');
|
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, '');
|
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') {
|
public static function DecToDMS($dValue, $sType='lat') {
|
||||||
if($sType=='lat') $sDirection = ($dValue >= 0)?'N':'S';
|
if($sType=='lat') $sDirection = ($dValue >= 0)?'N':'S';
|
||||||
else $sDirection = ($dValue >= 0)?'E':'W';
|
else $sDirection = ($dValue >= 0)?'E':'W';
|
||||||
|
|||||||
@@ -17,6 +17,8 @@ $sName = isset($_GET['name'])?$_GET['name']:'';
|
|||||||
$sContent = isset($_GET['content'])?$_GET['content']:'';
|
$sContent = isset($_GET['content'])?$_GET['content']:'';
|
||||||
$iChunk = isset($_GET['chunk'])?$_GET['chunk']:0;
|
$iChunk = isset($_GET['chunk'])?$_GET['chunk']:0;
|
||||||
$iProjectId = isset($_REQUEST['project_id'])?$_REQUEST['project_id']:0;
|
$iProjectId = isset($_REQUEST['project_id'])?$_REQUEST['project_id']:0;
|
||||||
|
$sField = isset($_REQUEST['field'])?$_REQUEST['field']:'';
|
||||||
|
$oValue = isset($_REQUEST['value'])?$_REQUEST['value']:'';
|
||||||
|
|
||||||
//Initiate class
|
//Initiate class
|
||||||
$oSpot = new Spot($oClassManagement, __FILE__);
|
$oSpot = new Spot($oClassManagement, __FILE__);
|
||||||
@@ -45,6 +47,12 @@ if($sAction!='')
|
|||||||
case 'sync_pics':
|
case 'sync_pics':
|
||||||
$sResult = $oSpot->syncPics();
|
$sResult = $oSpot->syncPics();
|
||||||
break;
|
break;
|
||||||
|
case 'get_admin':
|
||||||
|
$sResult = $oSpot->getAdminSettings();
|
||||||
|
break;
|
||||||
|
case 'set_admin':
|
||||||
|
$sResult = $oSpot->setAdminSettings($sField, $oValue);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
$sResult = Main::getJsonResult(false, Main::NOT_FOUND);
|
$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)
|
$.prototype.addIcon = function(sIcon, bMargin, sStyle)
|
||||||
{
|
{
|
||||||
bMargin = bMargin || false;
|
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) */
|
/* Pages Specific CSS (masks) */
|
||||||
@import 'mask_project';
|
@import 'mask_project';
|
||||||
@import 'mask_upload';
|
@import 'mask_upload';
|
||||||
|
@import 'mask_admin';
|
||||||
|
|
||||||
@import 'mobile';
|
@import 'mobile';
|
||||||
Reference in New Issue
Block a user