v1.0.0 RC 1

This commit is contained in:
2014-06-14 18:04:27 +02:00
parent 16387ca7d1
commit 8da730253d
109 changed files with 10834 additions and 8132 deletions

274
inc/procedure.php Normal file
View File

@@ -0,0 +1,274 @@
<?php
/**
* Procedure Manager
* @author franzz
*/
class Procedure extends PhpObject
{
//Constants
const THUMB_MAX_SIZE = 100;
const IMAGE_FOLDER = Databap::DOC_FOLDER;
const IMAGE_FOLDER_TMP = Databap::DOC_TMP_FOLDER;
const IMAGE_FOLDER_THUMB = Databap::DOC_THUMB_FOLDER;
//Objects
private $oMySql;
//Procedure Elements
private $iProcId;
private $iUserId;
private $sTitle;
private $sDescription;
private $dLed;
private $asSteps; // [id_step]=>text
private $asImages; // [id_step][id_image]=>array('name'=>file name, 'desc'=> description)
function __construct($oMySql)
{
parent::__construct(__CLASS__, Settings::DEBUG);
$this->oMySql = $oMySql;
$this->iPrevProcId = 0;
$this->setProcedureId(0);
$this->sTitle = '';
$this->sDescription = '';
$this->dLed = '';
$this->asSteps = array();
$this->asImages = array();
}
public function getProcedureId()
{
return $this->iProcId;
}
public function getProcedureLed()
{
return $this->dLed;
}
public function setProcedureId($iProcId)
{
$this->iProcId = $iProcId;
}
public function inputForm($asPost)
{
//User
$this->iUserId = $asPost['id_user'];
//Titles
$this->sTitle = isset($asPost['title'])?$asPost['title']:'';
$this->sDescription = isset($asPost['description'])?$asPost['description']:'';
//Steps
$sStepPattern = '/c(?P<step_id>\d+)_step_text/u';
$sImagePattern = '/c(?P<step_id>\d+)_(?P<image_id>\d+)_image_(?P<image_info>\w+)/u';
foreach($asPost as $sFormId=>$sValue)
{
//Step Text
preg_match($sStepPattern, $sFormId, $asMatches);
if(isset($asMatches['step_id']))
{
$this->asSteps[$asMatches['step_id']] = $sValue;
}
else
{
preg_match($sImagePattern, $sFormId, $asMatches);
if
(
isset($asMatches['step_id'], $asMatches['image_id'], $asMatches['image_info']) &&
($asMatches['image_info'] == 'name' || $asMatches['image_info']== 'desc')
)
{
$this->asImages[$asMatches['step_id']][$asMatches['image_id']][$asMatches['image_info']] = $sValue;
}
}
}
}
private function isImageSaved($sFileName, $bInTemp=false)
{
$sPath = $bInTemp?self::IMAGE_FOLDER_TMP:self::IMAGE_FOLDER;
return file_exists($sPath.$sFileName);
}
public function checkIntegrity()
{
$asErrors = array();
//Check title
if($this->sTitle=='') $asErrors['title'] = 'Un titre est n&eacute;cessaire';
//Check steps
if(count($this->asSteps)==0)
{
$asErrors['step'] = 'Au moins une &eacute;tape est n&eacute;cessaire';
}
else
{
foreach($this->asSteps as $iStepId=>$sText)
{
if($sText=='')
{
$asErrors['step_'.$iStepId] = 'Une &eacute;tape ne poss&egrave;de pas de texte';
}
}
}
//Check images
foreach($this->asImages as $iStepId=>$asImages)
{
foreach($asImages as $iImageId=>$asFileInfo)
{
//file exists in temp or already stored
if(!$this->isImageSaved($asFileInfo['name']) && !$this->isImageSaved($asFileInfo['name'], true))
{
$asErrors['image_'.$iStepId.'_'.$iImageId] = 'Une image n\'a pas &eacute;t&eacute; t&eacute;l&eacute;charg&eacute;e';
}
if($asFileInfo['desc']=='')
{
$asErrors['image_'.$iStepId.'_'.$iImageId] = 'Une image n\'a pas de nom (description)';
}
}
}
return $asErrors;
}
public function saveProcedure($iPrevProcId)
{
//Add new procedure
$asData = array('title'=>$this->sTitle, 'description'=>$this->sDescription, MySqlManager::getId(Databap::USER_TABLE)=>$this->iUserId);
$iDbProcId = $this->oMySql->insertRow(Databap::PROC_TABLE, $asData);
//Add new steps
$asStepData = $asImgData = array(MySqlManager::getId(Databap::PROC_TABLE)=>$iDbProcId);
foreach($this->asSteps as $iStepId=>$sStepDesc)
{
$asStepData['description'] = $sStepDesc;
$iDbStepId = $this->oMySql->insertRow(Databap::STEP_TABLE, $asStepData);
//Add new images
$asImgData[MySqlManager::getId(Databap::STEP_TABLE)] = $iDbStepId;
foreach($this->asImages[$iStepId] as $asImageInfo)
{
$asImgData['description'] = $asImageInfo['desc'];
$asImgData['file_name'] = $asImageInfo['name'];
$iDbImageId = $this->oMySql->insertRow(Databap::IMG_TABLE, $asImgData);
$this->saveImage($asImgData['file_name']);
}
}
//Add this procedure to the group
$bCreation = ($iPrevProcId==0);
//$this->oMySql->deleteRow(Databap::PROC_TABLE, $this->iPrevProcId);
//$this->oMySql->updateRow(Databap::PROC_TABLE, $iPrevProcId, array('refer_id'=>$iDbProcId));
$iReferId = $bCreation?$iDbProcId:$this->oMySql->selectValue(Databap::PROC_TABLE, 'refer_id', $iPrevProcId);
$this->oMySql->updateRow(Databap::PROC_TABLE, $iDbProcId, array('refer_id'=>$iReferId));
//Update new Procedure Id
//$this->setProcedureId($iDbProcId);
//Reload Procedure
$this->loadProcedure($iDbProcId);
//return creation or edition
return $bCreation;
}
private function saveImage($sFileName)
{
if(!$this->isImageSaved($sFileName))
{
$sTempFilePath = self::IMAGE_FOLDER_TMP.$sFileName;
$sFilePath = self::IMAGE_FOLDER.$sFileName;
//Real Size Image
if(!rename($sTempFilePath, $sFilePath))
{
$this->addError('Unmoveable file : '.$sTempFilePath);
}
//Thumbnail picture
$asResult = ToolBox::createThumbnail($sFilePath, self::THUMB_MAX_SIZE, self::THUMB_MAX_SIZE, self::IMAGE_FOLDER_THUMB, false, Databap::$UPLOAD_IMG_EXTS);
if($asResult['error']!='') $this->addError('Unable to create thumbnail : '.$asResult['out']. '('.$asResult['error'].')');
}
}
public function loadProcedure($iProcId)
{
//Column names
$sProcIdCol = MySqlManager::getId(Databap::PROC_TABLE);
$sStepIdCol = MySqlManager::getId(Databap::STEP_TABLE);
$sImageIdCol = MySqlManager::getId(Databap::IMG_TABLE);
//Get last id available
$this->setProcedureId($iProcId);
$this->refreshProcId();
$asInfo = array('from'=>Databap::PROC_TABLE, 'constraint'=>array($sProcIdCol=>$this->getProcedureId()));
//Load procedure info
$asResult = $this->oMySql->selectRow(Databap::PROC_TABLE, $asInfo['constraint']);
$this->sTitle = $asResult['title'];
$this->sDescription = $asResult['description'];
$this->iUserId = $asResult[MySqlManager::getId(Databap::USER_TABLE)];
$this->dLed = $asResult['led'];
//Load steps info
$asInfo['from'] = Databap::STEP_TABLE;
$this->asSteps = $this->oMySql->selectRows($asInfo, true, $sStepIdCol);
//Load images info
$asInfo['from'] = Databap::IMG_TABLE;
foreach($this->oMySql->selectRows($asInfo) as $asRow)
{
$this->asImages[$asRow[$sStepIdCol]][$asRow[$sImageIdCol]]['name'] = $asRow['file_name'];
$this->asImages[$asRow[$sStepIdCol]][$asRow[$sImageIdCol]]['desc'] = $asRow['description'];
}
}
public function getProcedure()
{
// [id_step]=>text
// [id_step][id_image]=>array('name'=>file name, 'desc'=> description)
/*
$asSteps = $asImages = array();
$iLocalStepId = 1;
foreach($this->asSteps as $iStepId=>$sStepDesc)
{
$asSteps[$iLocalStepId] = $sStepDesc;
if(array_key_exists($iStepId, $this->asImages))
{
$asImages[] =
}
$iLocalStepId++;
}*/
return array( 'proc_id'=>$this->iProcId,
'id_user'=>$this->iUserId,
'title'=>Databap::getDescriptionFormat($this->sTitle),
'description'=>Databap::getDescriptionFormat($this->sDescription),
'led'=>Databap::getDateFormat($this->dLed),
'steps'=>$this->asSteps,
'images'=>$this->asImages);
}
private function refreshProcId()
{
/*
$iReferId = $this->getProcedureId();
do
{
$iProcId = $iReferId;
$iReferId = $this->oMySql->selectValue(Databap::PROC_TABLE, 'refer_id', $iProcId);
}
while($iReferId!=0);
$this->setProcedureId($iProcId);
*/
$iReferId = $this->oMySql->selectValue(Databap::PROC_TABLE, 'refer_id', $this->getProcedureId());
$sSelect = "MAX(".MySqlManager::getId(Databap::PROC_TABLE).")";
$iProcId = $this->oMySql->selectValue(Databap::PROC_TABLE, $sSelect, array('refer_id'=>$iReferId));
$this->setProcedureId($iProcId);
}
}
?>