* @version $id SVN
* @access public
* @license http://opensource.org/licenses/gpl-3.0.html
* Theme Management
*/
class theme {
/* @param
* */
var $TDB_THEME = T_THEME; // nom de la table.
var $TDB_SDTHEME = T_SD_THEME; // nom de la table.
var $ID;
var $NAME;
var $VISUAL_URI;
var $ROOT;
var $SD_THEME;
var $DESC_PROJECT;
var $DESC_DASHBOARD;
var $DESC_PUBLICATION;
var $DESC_NEWS;
var $DESC_WORKSHOP;
var $RANGE_PROJECT;
var $RANGE_DASHBOARD;
var $RANGE_PUBLICATION;
var $RANGE_NEWS;
var $RANGE_WORKSHOP;
var $DATE_CREA;
var $STATUT;
var $LAST_MODIFY;
protected $dispatcher = null;
public function __construct()
{
$this->dispatcher = $GLOBALS['dispatcher'];
}
public function __call($method, $arguments)
{
$event = $this->dispatcher->notifyUntil(new sfEvent($this, 'theme.extensible_function', array(
'method' => $method,
'arguments' => $arguments
)));
if (!$event->isProcessed())
{
throw new Exception(sprintf('Call to undefined method %s::%s.', get_class($this), $method));
}
return $event->getReturnValue();
}
/**
* theme::CheckDataIntegrity()
* Vérification des données d'un thème
*
* @access public
* @param array $table_theme : contient les composants d'un thème
* @return boolean si vrai renvoie true sinon message d'erreurs (string)
*/
function CheckDataIntegrity($table_theme)
{
if (strlen($table_theme[0]) < 2) return _t('theme','object_notdenomination');
if(!$this->isRoot()) {
if (!is_numeric($table_theme[2]) || $table_theme[2] == -1) return _t('theme','object_notSDtheme');
if (defined('MOD_PROJECT') && strlen($table_theme[3]) < 2) return _t('theme','object_notdesc_completed');
if (defined('MOD_SDI') && strlen($table_theme[4]) < 2) return _t('theme','object_notdesc_completed');
if (defined('MOD_PUBLICATION') && strlen($table_theme[5]) < 2) return _t('theme','object_notdesc_completed');
if (defined('MOD_NEWS') && strlen($table_theme[6]) < 2) return _t('theme','object_notdesc_completed');
if (defined('MOD_WORKSHOP') && strlen($table_theme[7]) < 2) return _t('theme','object_notdesc_completed');
}
return true;
}
/**
* theme::AddTheme()
* Ajout d'un nouveau theme
*
* @access public
* @param array $table_theme : contient les composants d'un theme
* @param object $sql_object
* @return integer $last_id
*/
function AddTheme($table_theme, $sql_object)
{
$table_theme=$sql_object->DBescape($table_theme);
if ($table_theme[14] == 1) $this->SetRoot();
if ($table_theme[0] != '') {
$this->NAME = strip_input(trim($table_theme[0]));
}
if ($table_theme[1] != '') {
$this->VISUAL_URI = strip_input(trim($table_theme[1]));
}
if (is_numeric($table_theme[2])) {
$this->SD_THEME = $table_theme[2];
}
$this->DESC_PROJECT = strip_input(trim($table_theme[3]), true);
$this->DESC_DASHBOARD = strip_input(trim($table_theme[4]), true);
$this->DESC_PUBLICATION = strip_input(trim($table_theme[5]), true);
$this->DESC_NEWS = strip_input(trim($table_theme[6]), true);
$this->DESC_WORKSHOP = strip_input(trim($table_theme[7]), true);
if (is_numeric($table_theme[8])) {
$this->RANGE_PROJECT = $table_theme[8];
}
if (is_numeric($table_theme[9])) {
$this->RANGE_DASHBOARD = $table_theme[9];
}
if (is_numeric($table_theme[10])) {
$this->RANGE_PUBLICATION = $table_theme[10];
}
if (is_numeric($table_theme[11])) {
$this->RANGE_NEWS = $table_theme[11];
}
if (is_numeric($table_theme[12])) {
$this->RANGE_WORKSHOP = $table_theme[12];
}
if ($table_theme[13] != '') {
strtoupper($table_theme[13]);
switch ($table_theme[13]) {
case 'P':
$this->STATUT = $table_theme[13];
break;
case 'D':
$this->STATUT = $table_theme[13];
break;
default:
$this->STATUT = 'P';
break;
}
} else $this->STATUT = 'P';
if($this->isRoot()) {
$query = "INSERT INTO " . $this->TDB_SDTHEME .
" (sdtheme_name, sdtheme_description, sdtheme_date_crea) " .
"VALUES('".$this->NAME."','".$this->DESC_PROJECT . "', NOW());";
} else {
$query = "INSERT INTO " . $this->TDB_THEME .
" (theme_name, theme_visual_uri, theme_sd_theme, theme_desc_project, theme_desc_dashboard, " .
"theme_desc_publication, theme_desc_news, theme_desc_workshop, theme_range_project, ".
"theme_range_dashboard, theme_range_publication, theme_range_news, theme_range_workshop, " .
"theme_statut, theme_date_crea) " .
"VALUES('" . $this->NAME . "', '" . $this->VISUAL_URI . "', " . $this->SD_THEME .
", '" . $this->DESC_PROJECT ."', '" . $this->DESC_DASHBOARD .
"', '" . $this->DESC_PUBLICATION . "', '" . $this->DESC_NEWS .
"', '" . $this->DESC_WORKSHOP . "', " . $this->RANGE_PROJECT .
", " . $this->RANGE_DASHBOARD . ", " . $this->RANGE_PUBLICATION .
", " . $this->RANGE_NEWS . ", " . $this->RANGE_WORKSHOP . ", '" . $this->STATUT . "', NOW());";
}
$last_id = $sql_object->DBInsert ($query, 1);
return $last_id;
}
/**
* theme::ModifyTheme()
* modification d'un theme
*
* @access public
* @param int $ID : identifiant du theme
* @param array $table_theme : contient les composants d'un theme
* @param object $sql_object
* @return bool $result
*/
function ModifyTheme($ID, $table_theme, $sql_object)
{
$table_theme=$sql_object->DBescape($table_theme);
if ($table_theme[9] == 1) $this->SetRoot();
if (is_numeric($ID)) {
$this->ID = $ID;
}
if ($table_theme[0] != '') {
$this->NAME = strip_input(trim($table_theme[0]));
}
if ($table_theme[1] != '') {
$this->VISUAL_URI = strip_input(trim($table_theme[1]));
}
if (is_numeric($table_theme[2])) {
$this->SD_THEME = $table_theme[2];
}
$this->DESC_PROJECT = strip_input(trim($table_theme[3]), true);
$this->DESC_DASHBOARD = strip_input(trim($table_theme[4]), true);
$this->DESC_PUBLICATION = strip_input(trim($table_theme[5]), true);
$this->DESC_NEWS = strip_input(trim($table_theme[6]), true);
$this->DESC_WORKSHOP = strip_input(trim($table_theme[7]), true);
if ($table_theme[8] != '') {
strtoupper($table_theme[8]);
switch ($table_theme[8]) {
case 'P':
$this->STATUT = $table_theme[8];
break;
case 'D':
$this->STATUT = $table_theme[8];
break;
default:
$this->STATUT = 'P';
break;
}
} else $this->STATUT = 'P';
if($this->isRoot()) {
$query = "UPDATE " . $this->TDB_SDTHEME . " set sdtheme_name='" . $this->NAME . "', sdtheme_description='" . $this->DESC_PROJECT . "', sdtheme_last_modify=NOW() WHERE sdtheme_id='" . $this->ID . "';";
} else {
$query = "UPDATE " . $this->TDB_THEME . " set theme_name='" . $this->NAME . "', theme_visual_uri='" . $this->VISUAL_URI . "' , theme_sd_theme='" . $this->SD_THEME . "', theme_desc_project='" . $this->DESC_PROJECT . "', theme_desc_dashboard='" . $this->DESC_DASHBOARD . "',theme_desc_publication= '" . $this->DESC_PUBLICATION . "', theme_desc_news='" . $this->DESC_NEWS . "' , theme_desc_workshop='" . $this->DESC_WORKSHOP . "' , theme_statut='" . $this->STATUT . "', theme_last_modify=NOW() WHERE theme_id='" . $this->ID . "';";
}
$result = $sql_object->DBQuery($query);
return $result;
}
/**
* theme::StateTheme()
* modification du statut d'un theme
* -- NE PREND PAS EN CHARGE l'EFFACEMENT --
*
* @access public
* @param int $ID identifiant de l'entreprise
* @param string $state (facultatif) 'P' Public/'D' Draft
* @param object $sql_object
* @return bool $result
*/
function StateTheme($ID, $state, $sql_object)
{
if (is_numeric($ID)) {
$this->ID = $ID;
}
if ($state != '') {
strtoupper($state);
switch ($state) {
case 'P':
$this->STATUT = $state;
break;
case 'D':
$this->STATUT = $state;
break;
default:
$this->STATUT = $state;
break;
}
} else $this->STATUT = 'P';
$query = "UPDATE " . $this->TDB_THEME . " set theme_statut='" . $this->STATUT . "', theme_last_modify=NOW() WHERE theme_id=" . $this->ID . ";";
$result = $sql_object->DBQuery($query);
return $result;
}
/**
* theme::DeleteTheme()
* suppression d'un theme
*
* @access public
* @param int $ID identifiant du theme
* @param string $type 'MASS_DELETE' toutes les ressources associées aus themes sont rendues inactives
* 'MASS_MODIFY' remplacement de l'ancien theme par $ID_new
* @param int $id_new nouvel id de rattachement
* @param object $sql_object
* @return bool $result
*/
function DeleteTheme($ID, $sql_object, $type, $ID_new = -1)
{
$affected = 0;
if (is_numeric($ID)) {
$this->ID = $ID;
}
if($this->isRoot()) {
$query = "UPDATE " . $this->TDB_THEME . " set theme_sd_theme=" . $ID_new . " WHERE theme_sd_theme=" . $this->ID . ";";
$result = $sql_object->DBQuery($query);
$affected += $sql_object->DBaffectedRow();
$query = "DELETE FROM " . $this->TDB_SDTHEME . " where sdtheme_id='".$this->ID ."';";
$result = $sql_object->DBQuery($query);
}
if($this->isRoot() == false) {
if ($type == 'MASS_MODIFY') {
if ($ID_new != -1 && is_numeric($ID_new)) {
$query = "UPDATE " . $this->TDB_THEME . " set theme_statut='E', theme_last_modify=NOW() WHERE theme_id=" . $this->ID . ";";
$result = $sql_object->DBQuery($query);
if ($result == true) {
$query_news = "UPDATE " . T_NEWS . " set news_theme=" . $ID_new . " WHERE news_theme=" . $this->ID . ";";
$result = $sql_object->DBQuery($query_news);
$affected += $sql_object->DBaffectedRow();
$query_publication = "UPDATE " . T_PUBLI . " set publi_theme=" . $ID_new . " WHERE publi_theme=" . $this->ID . ";";
$result = $sql_object->DBQuery($query_publication);
$affected += $sql_object->DBaffectedRow();
$query_workshop = "UPDATE " . T_WORK . " set workshop_theme=" . $ID_new . " WHERE workshop_theme=" . $this->ID . ";";
$result = $sql_object->DBQuery($query_workshop);
$affected += $sql_object->DBaffectedRow();
$query_sdiinfo = "UPDATE " . T_SDI_INFO . " set sdii_theme=" . $ID_new . " WHERE sdii_theme=" . $this->ID . ";";
$result = $sql_object->DBQuery($query_workshop);
$affected += $sql_object->DBaffectedRow();
$query_yellowpages = "UPDATE " . T_YELLOWPAGES . " set yellowp_theme=" . $ID_new . " WHERE yellowp_theme=" . $this->ID . ";";
$result = $sql_object->DBQuery($query_yellowpages);
$affected += $sql_object->DBaffectedRow();
}
}
}
if ($type == 'MASS_DELETE') {
$query = "UPDATE " . $this->TDB_THEME . " SET theme_statut='E', theme_last_modify=NOW() WHERE theme_id=" . $this->ID . ";";
$result = $sql_object->DBQuery($query);
if ($result == true) {
$query_news = "UPDATE " . T_NEWS . " SET news_statut='E' WHERE news_theme=" . $this->ID . ";";
$result = $sql_object->DBQuery($query_news);
$affected += $sql_object->DBaffectedRow();
$query_publication = "UPDATE " . T_PUBLI . " SET publi_statut='E' WHERE publi_theme=" . $this->ID . ";";
$result = $sql_object->DBQuery($query_publication);
$affected += $sql_object->DBaffectedRow();
$query_workshop = "UPDATE " . T_WORK . " SET workshop_statut='E' WHERE workshop_theme=" . $this->ID . ";";
$result = $sql_object->DBQuery($query_workshop);
$affected += $sql_object->DBaffectedRow();
$query_sdiinfo = "UPDATE " . T_SDI_INFO . " SET sdii_statut='E' WHERE sdii_theme=" . $this->ID . ";";
$result = $sql_object->DBQuery($query_sdiinfo);
$affected += $sql_object->DBaffectedRow();
$query_sdivalue = "UPDATE " . T_SDI_VALUE . " SET sdiv_statut='E' WHERE sdiv_sdi_info=". $this->ID . ";";
$result = $sql_object->DBQuery($query_sdivalue);
$affected += $sql_object->DBaffectedRow();
$query_yellowpages = "UPDATE " . T_YELLOWPAGES . " SET yellowp_statut='AA' WHERE yellowp_theme=" . $this->ID . ";";
$result = $sql_object->DBQuery($query_yellowpages);
$affected += $sql_object->DBaffectedRow();
}
}
}
return $affected;
}
/**
* theme::SetRoot()
* Set the ROOT attribute to 1
*
* @access public
* @return void
*/
function SetRoot()
{
$this->ROOT = 1;
}
/**
* theme::isRoot()
* Is the current theme root?
*
* @access public
* @return bool
*/
function isRoot()
{
if($this->ROOT == 1) {
return true;
} else{
return false;
}
}
/**
* theme::SetThemeRange()
* modification des RANGE des themes
* --- NON IMPLEMENTE/NON TESTE ---
*
* @access public
* @param string $module spécifie le module concernée : valeur 'DASHBOARD', 'PUBLICATION', 'NEWS', 'WORKSHOP', 'ALL'
* @param array $table_range tableau contenant les id des themes
* @param object $sql_object
* @return bool $result
*/
/**
* function SetThemeRange($table_range, $sql_object, $module)
* {
* $result = false;
* if (count($table_range) > 0) {
* if (strlen($module) > 2) {
* if ($module != 'ALL') {
* $champ = 'theme_range_';
* if ($module == 'DASHBOARD') $champ .= 'dashboard';
* if ($module == 'PUBLICATION') $champ .= 'publication';
* if ($module == 'NEWS') $champ .= 'news';
* if ($module == 'WORKSHOP') $champ .= 'workshop';
* for($i = 0; $i < count($table_range); $i++) {
* $range = $i + 1;
* $query = "UPDATE " . $this->TDB_THEME . " SET " . $champ . "=" . $range . " WHERE theme_id='" . $table_range[$i] . "';";
* $result = $sql_object->DBQuery($query);
* echo $query . "
";
* }
* } elseif ($module == 'ALL') {
* for($i = 0; $i < count($table_range); $i++) {
* $range = $i + 1;
* $to_update = "theme_range_dashboard=" . $range . ", theme_range_publication=" . $range . ", theme_range_news=" . $range . ", theme_range_workshop=" . $range;
* $query = "UPDATE " . $this->TDB_THEME . " SET " . $to_update . " WHERE theme_id=" . $table_range[$i] . ";";
* $result = $sql_object->DBQuery($query);
* echo $query . "
";
* }
* }
* }
* }
*
* return $result;
* }
*/
}
?>