Source for file class.project.php
Documentation is available at class.project.php
* @package linea21.modules
* @author linea21 <info@linea21.com>
* @license http://opensource.org/licenses/gpl-3.0.html
public function __call($method, $arguments)
$event = $this->dispatcher->notifyUntil(new sfEvent($this, 'project.extensible_function', array(
'arguments' => $arguments
if (!$event->isProcessed())
throw new Exception(sprintf('Call to undefined method %s::%s.', get_class($this), $method));
return $event->getReturnValue();
* @param int $m chiffre des mois
* @param int $d chiffre des jours
* @param int $y chiffre des années
* @return string $format_date
function _getDate($m = 0, $d = 0, $y = 0)
$format_date = strftime('%Y-%m-%d %H:%M:%S', $format_date);
* project::CheckDataIntegrity()
* Vérification intégrité des données
* @param array $table : contient les composants Nécessaires d'un projet
* si verifié, sinon string 'message d'erreur'
// Filter data event + return value
$r = $this->dispatcher->filter(new sfEvent($this, 'project.before_datacheck', array('data' => $table)), $table);
$table = $r->getReturnValue();
_debug("budget::". $table[15]);
if (strlen($table[0]) < 3) return _t('project','no_name');
if (strlen($table[1]) < 3) return _t('project','no_description');
if (strlen($table[2]) < 3) return _t('project','no_body');
if ($table[5] <= 0 || !is_numeric($table[5])) return _t('project','no_priority');
if ($table[4] <= 0 || !is_numeric($table[4])) return _t('project','no_scale');
if(!is_numeric($table[14]) || $table[14]> 100 || $table[14]< 0 ) return _t('project','progression_error');
if(!empty($table[15]) && !is_numeric($table[15])) return _t('project','budget_integer');
// Notify the beginning of the current method
$this->dispatcher->notify(new sfEvent($this, 'project.after_datacheck', array('data' => $table)));
* @param array $array : contient les composants d'un projet
* @param object $sql_object
* @return integer $last_id
// Filter data event + return value
$r = $this->dispatcher->filter(new sfEvent($this, 'project.before_add', array('data' => $array)), $array);
$array = $r->getReturnValue();
$array= $sql_object->DBescape($array);
$query = "INSERT INTO " . $this->TDB_PROJECT . " (project_name, project_description, project_body, ".
"project_parent_id, project_priority_id, project_scale_id, " .
"project_begin_date, project_estimated_date, project_end_date, ".
"project_completed, project_theme_id, project_workshop_id, ".
"project_posted_by, project_published_date, " .
"project_statut, project_date_crea) " .
$this->ID = $sql_object->DBInsert ($query, 1);
$this->_addSDI($sql_object);
$this->addActors($this->ID, $this->PARTNERS, 'partner');
// Notify the end of the current method
$this->dispatcher->notify(new sfEvent($this, 'project.after_add', array('data' => $array, 'id' => $this->ID)));
* project::modifyActors()
* Ajout d'un ou plusieurs acteurs au projet
* @param int $id identifiant du projet
* @param string $content acteurs séparés par des virgules
* @return integer $last_id
private function modifyActors($id, $content, $type) {
// Notify the beginning of the current method
$this->dispatcher->notify(new sfEvent($this, 'project.modify_actor', array('id' => $id, 'content' => $content, 'type' => $type)));
$query = "DELETE FROM " . J_PROJECT_ACTOR . " WHERE jpa_project_id='". $id. "' AND jpa_type='" . $type . "';";
$result = $sql_object->DBQuery($query);
$result = $this->addActors($id, $content, $type);
* Ajout d'un ou plusieurs acteurs au projet
* @param int $id identifiant du projet
* @param string $content acteurs séparés par des virgules
* @return integer $last_id
private function addActors($id, $content, $type)
// Notify the beginning of the current method
$this->dispatcher->notify(new sfEvent($this, 'project.add_actor', array('id' => $id, 'content' => $content, 'type' => $type)));
// we remove latest comma
if (substr($content, - 1) == ',') {
$content = substr($content, 0, - 1);
// we explode string to array
$array = $sql_object->DBEscape($array);
for ($i = 0;$i < count($array);$i++ ) {
// we check if actor already exists
$q = "SELECT actor_id FROM " . T_ACTOR . " WHERE lower(actor_name) = '" . strtolower($array[$i]) . "';";
$data = $sql_object->DBSelect($q);
// if already exists, we retrieve id
if(isset ($data[0]['actor_id'])) {
$actor_id = $data[0]['actor_id'];
// else we create it and retrieve id
$q = "INSERT INTO " . T_ACTOR . " (actor_name) VALUES('" . $array[$i] . "');";
$last_id = $sql_object->DBInsert ($q, 1);
// finally we insert tuple in table
$q = "INSERT INTO " . J_PROJECT_ACTOR . " (jpa_project_id, jpa_actor_id, jpa_type) VALUES(" . $id . ", " . $actor_id . ",'" . $type . "');";
$last_id = $sql_object->DBInsert ($q, 1);
* project::DeleteProject()
* suppression d'un projet
* @param int $ID : identifiant du projet
* @param object $sql_object
// Notify the end of the current method
$this->dispatcher->notify(new sfEvent($this, 'project.delete', array('id' => $ID)));
$query = "UPDATE " . $this->TDB_PROJECT . " set project_statut='E', project_last_modify=NOW() WHERE project_id='" . $this->ID . "';";
$result = $sql_object->DBQuery($query);
$query = "DELETE FROM " . J_PROJECT_SDI . " WHERE jps_project_id='". $this->ID. "';";
$res = $sql_object->DBQuery($query);
$query = "DELETE FROM " . J_PROJECT_ACTOR . " WHERE jpa_project_id='". $this->ID. "';";
$res = $sql_object->DBQuery($query);
$query = "UPDATE " . $this->TDB_PROJECT . " set project_parent_id=0 WHERE project_parent_id='" . $this->ID . "';";
$result = $sql_object->DBQuery($query);
* project::ModifyProject()
* modification d'un projet
* @param integer $ID : identifiant du projet
* @param object $sql_object
* @param array $array : contient les composants d'un projet
* @return boolean $result
// Filter data event + return value
$r = $this->dispatcher->filter(new sfEvent($this, 'project.before_modify', array('data' => $array, 'id' => $ID)), $array);
$array = $r->getReturnValue();
$array= $sql_object->DBescape($array);
$this->modifyActors($this->ID, $this->COORDINATOR, 'coordinator');
$this->modifyActors($this->ID, $this->PARTNERS, 'partner');
$mask = $this->_HavePublishedDate($array[10]);
$query = "UPDATE " . $this->TDB_PROJECT . " SET project_name='" . $this->NAME . "', project_description='" . $this->DESCRIPTION. "', project_body='" . $this->BODY . "', project_budget=" . $this->BUDGET . ", project_parent_id='" . $this->PARENT_ID . "', project_scale_id='" . $this->SCALE_ID . "', project_theme_id='" . $this->THEME_ID . "', project_workshop_id='" . $this->WORKSHOP_ID . "', project_priority_id='" . $this->PRIORITY_ID . "', project_begin_date='" . $this->BEGIN_DATE . "', project_estimated_date='" . $this->ESTIMATED_DATE . "', project_end_date='". $this->END_DATE. "', project_completed=". $this->COMPLETED. ", project_statut='" . $this->STATUT . "', project_last_modify=NOW() " . $mask . " WHERE project_id='" . $this->ID . "';"; $result = $sql_object->DBQuery($query);
$result = $this->_modifySDI($sql_object);
// Notify the end of the current method
$this->dispatcher->notify(new sfEvent($this, 'project.after_modify', array('data' => $array, 'id' => $this->ID)));
* project::changeRanges()
* @param array : Id (key) and ranges (value)
* @param object $sql_object
foreach ($array as $key => $value) {
$query = "UPDATE " . $this->TDB_PROJECT . " set project_range='". $value. "' WHERE project_id='" . $key . "';";
$result = $sql_object->DBQuery($query);
// Notify the beginning of the current method
$this->dispatcher->notify(new sfEvent($this, 'project.change_ranges', array('data' => $array)));
* associate indicators to project
function _addSDI($sql_object) {
// Notify the beginning of the current method
$this->dispatcher->notify(new sfEvent($this, 'project.add_sdi', array('data' => $this->SDI)));
foreach ($this->SDI as &$value) {
$query = "INSERT INTO ". J_PROJECT_SDI . " VALUES(". $this->ID. ", ". $value. ");";
$result = $sql_object->DBQuery($query);
* associate indicators to project
function _modifySDI($sql_object) {
// Notify the beginning of the current method
$this->dispatcher->notify(new sfEvent($this, 'project.modify_sdi', array('data' => $this->SDI)));
$query = "DELETE FROM " . J_PROJECT_SDI . " WHERE jps_project_id='". $this->ID. "';";
$result = $sql_object->DBQuery($query);
$result = $this->_addSDI($sql_object);
* project::_HavePublishedDate()
* Détermine la date de publication a inserer dans la bdd
* @param string $current_status : statut actuel de l'actualité
* @return string $sql_mask
function _HavePublishedDate($current_status)
if ($current_status == 'D') $sql_mask = ", project_published_date= NOW()";
$sql_mask = ", project_published_date= '0001-01-01'";
|