fix option default values

This commit is contained in:
2014-12-14 14:33:56 +01:00
parent b098615095
commit c7aff3e347
12 changed files with 231 additions and 175 deletions

View File

@@ -238,7 +238,7 @@ class Databap extends PhpObject
self::MSG_TABLE => array(MySqlManager::getId(self::USER_TABLE), 'nickname', MySqlManager::getId(self::CHAN_TABLE), MySqlManager::getText(self::MSG_TABLE), 'type', 'date'), self::MSG_TABLE => array(MySqlManager::getId(self::USER_TABLE), 'nickname', MySqlManager::getId(self::CHAN_TABLE), MySqlManager::getText(self::MSG_TABLE), 'type', 'date'),
self::CHAN_TABLE => array('safe_name', MySqlManager::getText(self::CHAN_TABLE)), self::CHAN_TABLE => array('safe_name', MySqlManager::getText(self::CHAN_TABLE)),
self::CONN_TABLE => array(MySqlManager::getId(self::USER_TABLE), MySqlManager::getId(self::CHAN_TABLE)), self::CONN_TABLE => array(MySqlManager::getId(self::USER_TABLE), MySqlManager::getId(self::CHAN_TABLE)),
self::OPT_TABLE => array(MySqlManager::getId(self::USER_TABLE), MySqlManager::getId(self::OPTNAME_TABLE), MySqlManager::getId(self::OPTVAL_TABLE), MySqlManager::getText(self::OPT_TABLE)), self::OPT_TABLE => array(MySqlManager::getId(self::USER_TABLE), MySqlManager::getId(self::OPTNAME_TABLE), MySqlManager::getId(self::OPTVAL_TABLE)),
self::OPTNAME_TABLE => array(MySqlManager::getText(self::OPTNAME_TABLE), 'type', 'language'), self::OPTNAME_TABLE => array(MySqlManager::getText(self::OPTNAME_TABLE), 'type', 'language'),
self::OPTVAL_TABLE => array(MySqlManager::getId(self::OPTNAME_TABLE), MySqlManager::getText(self::OPTVAL_TABLE), 'default_value', 'language'), self::OPTVAL_TABLE => array(MySqlManager::getId(self::OPTNAME_TABLE), MySqlManager::getText(self::OPTVAL_TABLE), 'default_value', 'language'),
self::PROC_TABLE => array(MySqlManager::getId(self::USER_TABLE), 'title', 'description', 'refer_id'), self::PROC_TABLE => array(MySqlManager::getId(self::USER_TABLE), 'title', 'description', 'refer_id'),
@@ -271,9 +271,8 @@ class Databap extends PhpObject
'type' => "varchar(2) NOT NULL", 'type' => "varchar(2) NOT NULL",
'safe_name' => "varchar(50) NOT NULL", 'safe_name' => "varchar(50) NOT NULL",
MySqlManager::getText(self::CHAN_TABLE) => "varchar(50) NOT NULL", MySqlManager::getText(self::CHAN_TABLE) => "varchar(50) NOT NULL",
MySqlManager::getText(self::OPT_TABLE) => "varchar(100) NOT NULL",
MySqlManager::getText(self::OPTNAME_TABLE) => "varchar(100) NOT NULL", MySqlManager::getText(self::OPTNAME_TABLE) => "varchar(100) NOT NULL",
MySqlManager::getText(self::OPTVAL_TABLE)=> "varchar(50) NOT NULL", MySqlManager::getText(self::OPTVAL_TABLE)=> "varchar(100) NOT NULL",
'language' => "varchar(2) NOT NULL", 'language' => "varchar(2) NOT NULL",
'file_name' => "varchar(40) NOT NULL", 'file_name' => "varchar(40) NOT NULL",
'preview_name' => "varchar(40) NOT NULL", 'preview_name' => "varchar(40) NOT NULL",
@@ -367,12 +366,14 @@ class Databap extends PhpObject
//Select and Default Option values //Select and Default Option values
$asDefaultValues = array( self::OPT_CONSOLE=>array(self::OPT_VAL_YES=>false, self::OPT_VAL_NO=>true), $asDefaultValues = array( self::OPT_CONSOLE=>array(self::OPT_VAL_YES=>false, self::OPT_VAL_NO=>true),
self::OPT_NICKNAME=>array('Utilisateur inconnu'=>true),
self::OPT_BG=>array('#04357B'=>true), self::OPT_BG=>array('#04357B'=>true),
self::OPT_BG_2=>array('#88B2F0'=>true), self::OPT_BG_2=>array('#88B2F0'=>true),
self::OPT_BG_3=>array('#D9E5F2'=>true), self::OPT_BG_3=>array('#D9E5F2'=>true),
self::OPT_HOVER=>array('#EFAB00'=>true), self::OPT_HOVER=>array('#EFAB00'=>true),
self::OPT_IMAGE_CHAT=>array('images/sap_gold_332.jpg'=>true), self::OPT_IMAGE_CHAT=>array('images/sap_gold_332.jpg'=>true),
self::OPT_STATUS=>array('aucune mission en cours'=>true), self::OPT_STATUS=>array('aucune mission en cours'=>true),
self::OPT_EMAIL=>array('email inconnu'=>true),
self::OPT_CHAT_HISTO=>array('0'=>true)); self::OPT_CHAT_HISTO=>array('0'=>true));
foreach($asDefaultValues as $sOptionNameId=>$asOptionValues) foreach($asDefaultValues as $sOptionNameId=>$asOptionValues)
{ {
@@ -762,7 +763,6 @@ class Databap extends PhpObject
//Checking company existency in company table //Checking company existency in company table
$sCompanyTextCol = MySqlManager::getText(self::COMP_TABLE); $sCompanyTextCol = MySqlManager::getText(self::COMP_TABLE);
$iCompanyId = $this->oMySql->selectInsert(self::COMP_TABLE, array($sCompanyTextCol=>$sCompany, 'logo'=>self::DEFAULT_COMPANY_LOGO), array($sCompanyTextCol)); $iCompanyId = $this->oMySql->selectInsert(self::COMP_TABLE, array($sCompanyTextCol=>$sCompany, 'logo'=>self::DEFAULT_COMPANY_LOGO), array($sCompanyTextCol));
$asInfo = array('first_name'=>$sFirstName, $asInfo = array('first_name'=>$sFirstName,
'last_name'=>$sLastName, 'last_name'=>$sLastName,
'active'=>self::MEMBER_ACTIVE, 'active'=>self::MEMBER_ACTIVE,
@@ -772,13 +772,17 @@ class Databap extends PhpObject
'led'=>'0000-00-00 00:00:00'); 'led'=>'0000-00-00 00:00:00');
$iUserId = $this->oMySql->insertRow(self::USER_TABLE, $asInfo); $iUserId = $this->oMySql->insertRow(self::USER_TABLE, $asInfo);
//Admin Options //Options & default values
$sOptionTable = self::OPT_TABLE; $this->setOptions(array(self::OPT_NICKNAME=>self::getNickNameFormat($sFirstName), self::OPT_EMAIL=>$sEmail), true, $iUserId);
$sUserIdCol = MySqlManager::getId(self::USER_TABLE);
$sOptNameIdCol = MySqlManager::getId(self::OPTNAME_TABLE); $asInfo = array('select' => array($sOptNameIdCol, $sOptValueTextCol),
$sOptionTextCol = MySqlManager::getText(self::OPT_TABLE); 'from' => self::OPTVAL_TABLE,
$this->oMySql->insertRow($sOptionTable, array($sUserIdCol=>$iUserId, $sOptNameIdCol=>self::OPT_NICKNAME, $sOptionTextCol=>self::getNickNameFormat($sFirstName))); 'constraint'=> array('default_value'=>true, $sOptNameIdCol => "(".implode(", ", $oOptionNameIds).")"),
$this->oMySql->insertRow($sOptionTable, array($sUserIdCol=>$iUserId, $sOptNameIdCol=>self::OPT_EMAIL, $sOptionTextCol=>$sEmail)); 'constOpe' => array('default_value'=>"=", $sOptNameIdCol=>" IN "),
'constVar' => true);
//Spread the word
$this->addMessage('Nouvel utilisateur: '.self::getNameFormat($sFirstName, $sLastName).' !', self::MESSAGE_NEWS, self::DEFAULT_CHAN_ID);
return $iUserId; return $iUserId;
} }
@@ -1284,102 +1288,30 @@ class Databap extends PhpObject
{ {
return ($this->getUserClearance() >= $iClearance); return ($this->getUserClearance() >= $iClearance);
} }
public function getOptions() /* Options Management */
//TODO Create class
//TODO delete
public function migrateOptionValues()
{ {
$sOptValueIdCol = MySqlManager::getId(self::OPTVAL_TABLE); $sResult = 'ok';
$sOptionTextCol = MySqlManager::getText(self::OPT_TABLE); $asInfo = array('select' => array('id_option', 'id_option_name', 'option'),
$sOptNameTextCol = MySqlManager::getText(self::OPTNAME_TABLE); 'from' => self::OPT_TABLE,
$sOptValueTextCol = MySqlManager::getText(self::OPTVAL_TABLE); 'constraint'=> array('id_option_value'=>'NULL'),
'constOpe' => array('id_option_value'=>" IS "),
//Available Options 'constVar' => true);
$asAvailableOptions = $this->getAvailableOptions(); $asOptions = $this->oMySql->selectRows($asInfo, true, 'id_option');
//User options foreach($asOptions as $iOptionId=>$asOption)
$asUserOptions = $this->getUserOptions();
//Build Options panel
$asSelectedOptions = array();
foreach($asAvailableOptions as $sOptNameId=>$asOption)
{ {
$sOptionName = self::getDescriptionFormat($asOption[$sOptNameTextCol]); $iOptionValueId = $this->oMySql->insertRow(self::OPTVAL_TABLE, array('id_option_name'=>$asOption['id_option_name'], 'option_value'=>$asOption['option'], 'language'=>self::LANG_FR));
$asSelectedOptions[$sOptionName]['option_id'] = $sOptNameId; if($iOptionValueId>0) $this->oMySql->updateRow(self::OPT_TABLE, $iOptionId, array('id_option_value'=>$iOptionValueId));
$asSelectedOptions[$sOptionName]['option_name'] = $sOptionName; else $sResult = 'ko';
$asSelectedOptions[$sOptionName]['user_value_id'] = array_key_exists($sOptNameId, $asUserOptions)?$asUserOptions[$sOptNameId][$sOptValueIdCol]:0;
$asSelectedOptions[$sOptionName]['user_value'] = array_key_exists($sOptNameId, $asUserOptions)?$asUserOptions[$sOptNameId][$sOptionTextCol]:'';
$asSelectedOptions[$sOptionName]['type'] = $asOption['type'];
if($asOption['type']==self::OPT_SELECT)
{
$asOptionValuesInfo = array('select'=>array($sOptValueIdCol, $sOptValueTextCol),
'from'=>self::OPTVAL_TABLE,
'constraint'=>array('language'=>$this->sLanguage,
MySqlManager::getId(self::OPTNAME_TABLE)=>$sOptNameId),
'orderBy'=>array('led'=>'ASC'));
$asSelectedOptions[$sOptionName]['select'] = $this->oMySql->selectRows($asOptionValuesInfo, true, $sOptValueIdCol);
}
} }
ksort($asSelectedOptions); return $sResult;
return $this->jsonExport($asSelectedOptions);
} }
public function setOptions($asUserOptions, $bSilentUpdate=true)
{
$asAvailableOptions = $this->getAvailableOptions();
foreach($asAvailableOptions as $sOptNameId=>$asOption)
{
if(array_key_exists($sOptNameId, $asUserOptions))
{
switch($asOption['type'])
{
case self::OPT_SELECT: //insert id of option value table
$sUpdateCol = MySqlManager::getId(self::OPTVAL_TABLE);
break;
case self::OPT_TEXT: //insert value
$sUpdateCol = MySqlManager::getText(self::OPT_TABLE);
break;
default:
continue 2;
}
$sNewValue = $asUserOptions[$sOptNameId];
//Check identical data
$asKeys = array(MySqlManager::getId(self::USER_TABLE)=>$this->getUserId(), MySqlManager::getId(self::OPTNAME_TABLE)=>$sOptNameId);
$asData = array($sUpdateCol=>$sNewValue) + $asKeys;
$sOldValue = $this->oMySql->selectValue(self::OPT_TABLE, $sUpdateCol, $asKeys);
//Update value
if($sOldValue!=$sNewValue)
{
//Update value
$this->oMySql->insertUpdateRow(self::OPT_TABLE, $asData, array_keys($asKeys));
//Spread the word
if(!$bSilentUpdate)
{
//TODO rassembler les messages similaires dans une fonction de template
switch($sOptNameId)
{
case self::OPT_NICKNAME:
$sType = self::MESSAGE_NICK;
$sChanName = self::DEFAULT_CHAN;
$sMessage = $sOldValue.' a changé son pseudo en '.$sNewValue;
break;
case self::OPT_STATUS:
$sType = self::MESSAGE_STATUS;
$sChanName = self::DEFAULT_CHAN;
$sMessage = 'est sur une nouvelle mission : '.$this->getDescriptionFormat($sNewValue);
break;
default:
continue 2;
}
$sChanId = $this->getChanId($sChanName);
$this->addMessage($sMessage, $sType, $sChanId);
}
}
}
}
}
private function getAvailableOptions() private function getAvailableOptions()
{ {
$sOptNameIdCol = MySqlManager::getId(self::OPTNAME_TABLE); $sOptNameIdCol = MySqlManager::getId(self::OPTNAME_TABLE);
@@ -1402,7 +1334,9 @@ class Databap extends PhpObject
$sOptNameIdCol = MySqlManager::getId(self::OPTNAME_TABLE); $sOptNameIdCol = MySqlManager::getId(self::OPTNAME_TABLE);
$sOptValIdCol = MySqlManager::getId(self::OPTVAL_TABLE); $sOptValIdCol = MySqlManager::getId(self::OPTVAL_TABLE);
$sOptValueTextCol = MySqlManager::getText(self::OPTVAL_TABLE); $sOptValueTextCol = MySqlManager::getText(self::OPTVAL_TABLE);
if(!is_array($oOptionNameIds)) $oOptionNameIds = array($oOptionNameIds); if(!is_array($oOptionNameIds)) $oOptionNameIds = array($oOptionNameIds);
elseif(empty($oOptionNameIds)) $oOptionNameIds = array_keys($this->getAvailableOptions());
$asInfo = array('select' => array($sOptNameIdCol, $sOptValueTextCol), $asInfo = array('select' => array($sOptNameIdCol, $sOptValueTextCol),
'from' => self::OPTVAL_TABLE, 'from' => self::OPTVAL_TABLE,
@@ -1417,44 +1351,161 @@ class Databap extends PhpObject
{ {
$asUserOptions = $this->getUserOptions($sOptionNameId, $iUserId); $asUserOptions = $this->getUserOptions($sOptionNameId, $iUserId);
$asOptionInfo = array_shift($asUserOptions); $asOptionInfo = array_shift($asUserOptions);
return $asOptionInfo[MySqlManager::getText(self::OPT_TABLE)]; return $asOptionInfo[MySqlManager::getText(self::OPTVAL_TABLE)];
} }
private function getUserOptions($oOptionNameIds=array(), $iUserId=0) private function getUserOptions($oOptionNameIds=array(), $iUserId=0)
{ {
$iUserId = $iUserId>0?$iUserId:$this->getUserId(); $iUserId = $iUserId>0?$iUserId:$this->getUserId();
$sUserIdCol = MySqlManager::getId(self::USER_TABLE); $sUserIdCol = MySqlManager::getId(self::USER_TABLE);
$sOptNameIdCol = MySqlManager::getId(self::OPTNAME_TABLE); $sOptNameIdCol = MySqlManager::getId(self::OPTNAME_TABLE);
$sOptNameIdColOptTable = MySqlManager::getFullColumnName(self::OPT_TABLE, $sOptNameIdCol);
$sOptValueIdCol = MySqlManager::getId(self::OPTVAL_TABLE); $sOptValueIdCol = MySqlManager::getId(self::OPTVAL_TABLE);
$sOptionTextCol = MySqlManager::getText(self::OPT_TABLE); $sOptValueIdColOptTable = MySqlManager::getFullColumnName(self::OPT_TABLE, $sOptValueIdCol);
$sOptValueTextCol = MySqlManager::getText(self::OPTVAL_TABLE); $sOptValueTextCol = MySqlManager::getText(self::OPTVAL_TABLE);
$sOptIdCol = MySqlManager::getId(self::OPT_TABLE);
if(!is_array($oOptionNameIds)) $oOptionNameIds = array($oOptionNameIds); if(!is_array($oOptionNameIds)) $oOptionNameIds = array($oOptionNameIds);
elseif(empty($oOptionNameIds)) $oOptionNameIds = array_keys($this->getAvailableOptions()); elseif(empty($oOptionNameIds)) $oOptionNameIds = array_keys($this->getAvailableOptions());
$asUserinfo = array('select' => array($sOptNameIdCol, $sOptValueIdCol, $sOptionTextCol), $asUserinfo = array('select' => array($sOptIdCol, $sOptNameIdColOptTable, $sOptValueIdColOptTable, $sOptValueTextCol),
'from' => self::OPT_TABLE, 'from' => self::OPT_TABLE,
'constraint'=> array($sUserIdCol=>$iUserId, $sOptNameIdCol => "(".implode(", ", $oOptionNameIds).")"), 'join' => array(self::OPTVAL_TABLE=>MySqlManager::getId(self::OPTVAL_TABLE)),
'constOpe' => array($sUserIdCol=>"=", $sOptNameIdCol=>" IN "), 'constraint'=> array($sUserIdCol=>$iUserId, $sOptNameIdColOptTable => "(".implode(", ", $oOptionNameIds).")"),
'constOpe' => array($sUserIdCol=>"=", $sOptNameIdColOptTable => " IN "),
'constVar' => true); 'constVar' => true);
$asOptions = $this->oMySql->selectRows($asUserinfo, true, $sOptNameIdCol); $asOptions = $this->oMySql->selectRows($asUserinfo, true, $sOptNameIdCol);
foreach($oOptionNameIds as $iOptionId)
//No user value: adding default value to user values
$asDefaultOptions = $this->getDefaultOptionValues();
foreach($oOptionNameIds as $iOptionNameId)
{ {
$sNewValue = ''; if(!array_key_exists($iOptionNameId, $asOptions)) $asOptions[$iOptionNameId] = $asDefaultOptions[$iOptionNameId];
//Default value
if(!array_key_exists($iOptionId, $asOptions) || $asOptions[$iOptionId][$sOptValueIdCol]=='' && $asOptions[$iOptionId][$sOptionTextCol]=='')
{
$asDefaultOption = $this->getDefaultOptionValues($iOptionId);
$asOptions[$iOptionId][$sOptValueIdCol] = $asDefaultOption[$iOptionId][$sOptValueIdCol];
$asOptions[$iOptionId][$sOptionTextCol] = $asDefaultOption[$iOptionId][$sOptValueTextCol];
}
//Text value
elseif(!$asOptions[$iOptionId][$sOptValueIdCol]) $asOptions[$iOptionId][$sOptValueIdCol] = $asOptions[$iOptionId][$sOptionTextCol];
//Select value
else $asOptions[$iOptionId][$sOptionTextCol] = $this->oMySql->selectValue(self::OPTVAL_TABLE, $sOptValueTextCol, $asOptions[$iOptionId][$sOptValueIdCol]);
} }
return $asOptions; return $asOptions;
} }
public function getOptions()
{
$sOptNameTextCol = MySqlManager::getText(self::OPTNAME_TABLE);
$sOptValueIdCol = MySqlManager::getId(self::OPTVAL_TABLE);
$sOptValueTextCol = MySqlManager::getText(self::OPTVAL_TABLE);
//Available Options
$asAvailableOptions = $this->getAvailableOptions();
//User options
$asUserOptions = $this->getUserOptions();
//Build Options panel
$asSelectedOptions = array();
foreach($asAvailableOptions as $sOptNameId=>$asOption)
{
$sOptionName = self::getDescriptionFormat($asOption[$sOptNameTextCol]);
$asSelectedOptions[$sOptionName]['option_id'] = $sOptNameId;
$asSelectedOptions[$sOptionName]['option_name'] = $sOptionName;
$asSelectedOptions[$sOptionName]['user_value_id'] = $asUserOptions[$sOptNameId][$sOptValueIdCol];
$asSelectedOptions[$sOptionName]['user_value'] = $asUserOptions[$sOptNameId][$sOptValueTextCol];
$asSelectedOptions[$sOptionName]['type'] = $asOption['type'];
if($asOption['type']==self::OPT_SELECT)
{
$asOptionValuesInfo = array('select'=>array($sOptValueIdCol, $sOptValueTextCol),
'from'=>self::OPTVAL_TABLE,
'constraint'=>array('language'=>$this->sLanguage, MySqlManager::getId(self::OPTNAME_TABLE)=>$sOptNameId),
'orderBy'=>array('led'=>'ASC'));
$asSelectedOptions[$sOptionName]['select'] = $this->oMySql->selectRows($asOptionValuesInfo, true, $sOptValueIdCol);
}
}
ksort($asSelectedOptions);
return $this->jsonExport($asSelectedOptions);
}
public function setOptions($asNewOptions, $bSilentUpdate=true, $iUserId=0)
{
$sOptIdCol = MySqlManager::getId(self::OPT_TABLE);
$sOptValueIdCol = MySqlManager::getId(self::OPTVAL_TABLE);
$sOptValueTextCol = MySqlManager::getText(self::OPTVAL_TABLE);
$sUserIdCol = MySqlManager::getId(self::USER_TABLE);
$sOptNameIdCol = MySqlManager::getId(self::OPTNAME_TABLE);
$iUserId = ($iUserId>0)?$iUserId:$this->getUserId();
$asAvailableOptions = $this->getAvailableOptions();
$asUserOptions = $this->getUserOptions(array_keys($asAvailableOptions), $iUserId);
$asDefaultOptions = $this->getDefaultOptionValues(array_keys($asAvailableOptions));
foreach($asAvailableOptions as $sOptNameId=>$asOption)
{
if(array_key_exists($sOptNameId, $asNewOptions))
{
$sUserValue = $asUserOptions[$sOptNameId][$sOptValueTextCol];
$sUserValueId = $asUserOptions[$sOptNameId][$sOptValueIdCol];
$sUserOptId = array_key_exists($sOptIdCol, $asUserOptions[$sOptNameId])?$asUserOptions[$sOptNameId][$sOptIdCol]:0;
$sDefaultValue = $asDefaultOptions[$sOptNameId][$sOptValueTextCol];
$sDefaultValueId = $asDefaultOptions[$sOptNameId][$sOptValueIdCol];
if(!$sDefaultValueId) $this->addError('Missing option default value for option id='.$sOptNameId);
switch($asOption['type'])
{
case self::OPT_SELECT:
$sNewValueId = $asNewOptions[$sOptNameId];
$sNewValue = $this->oMySql->selectValue(self::OPTVAL_TABLE, $sOptValueTextCol, $sNewValueId);
break;
case self::OPT_TEXT:
$sNewValue = $asNewOptions[$sOptNameId];
break;
}
//Update text
if($sNewValue!=$sUserValue)
{
//Clear user values if exist (back to default)
if(($sNewValue=='' || $sNewValue==$sDefaultValue) && $sUserOptId>0)
{
$this->oMySql->deleteRow(self::OPT_TABLE, $sUserOptId);
if($asOption['type']==self::OPT_TEXT) $this->oMySql->deleteRow(self::OPTVAL_TABLE, $sUserValueId);
}
//New or updated value
elseif($sNewValue!=$sDefaultValue)
{
//Update option values table
if($asOption['type']==self::OPT_TEXT)
{
$asData = array($sOptNameIdCol=>$sOptNameId, $sOptValueTextCol=>$sNewValue, 'language'=>self::LANG_FR);
if($sUserValueId==$sDefaultValueId) $sNewValueId = $this->oMySql->insertRow(self::OPTVAL_TABLE, $asData);
else $sNewValueId = $this->oMySql->updateRow(self::OPTVAL_TABLE, $sUserValueId, array($sOptValueTextCol=>$sNewValue));
}
//Update option table
$asKeys = array($sUserIdCol=>$iUserId, $sOptNameIdCol=>$sOptNameId);
$asData = array($sOptValueIdCol=>$sNewValueId) + $asKeys;
$this->oMySql->insertUpdateRow(self::OPT_TABLE, $asData, array_keys($asKeys));
}
//Spread the word
if(!$bSilentUpdate)
{
//TODO rassembler les messages similaires dans une fonction de template
switch($sOptNameId)
{
case self::OPT_NICKNAME:
$sType = self::MESSAGE_NICK;
$sChanName = self::DEFAULT_CHAN;
$sMessage = $sUserValue.' a changé son pseudo en '.$sNewValue;
break;
case self::OPT_STATUS:
$sType = self::MESSAGE_STATUS;
$sChanName = self::DEFAULT_CHAN;
$sMessage = 'est sur une nouvelle mission : '.$this->getDescriptionFormat($sNewValue);
break;
default:
continue 2;
}
$sChanId = $this->getChanId($sChanName);
$this->addMessage($sMessage, $sType, $sChanId);
}
}
}
}
}
public function getProfile($oUser) public function getProfile($oUser)
{ {
@@ -1466,10 +1517,6 @@ class Databap extends PhpObject
case is_numeric($oUser): case is_numeric($oUser):
$iUserId = $oUser; $iUserId = $oUser;
break; break;
case is_string($oUser):
$oRes = $this->oMySql->selectValue(self::OPT_TABLE, MySqlManager::getId(self::USER_TABLE), array('option'=>mb_strtolower($oUser), MySqlManager::getId(self::OPTNAME_TABLE)=>self::OPT_NICKNAME));
$iUserId = !$oRes?$this->getUserId():$oRes;
break;
default: default:
$iUserId = $this->getUserId(); $iUserId = $this->getUserId();
break; break;
@@ -2134,39 +2181,38 @@ class Databap extends PhpObject
public function getConnectedUsers($bUserRestricted=false, $bJson=true) public function getConnectedUsers($bUserRestricted=false, $bJson=true)
{ {
$sQuery = " SELECT /* config.php 1313 */ conn2.id_channel, conn2.id_user, conn2.led, IF(DATE_SUB(NOW(), INTERVAL 1 MINUTE) < conn2.led, 0, 1) AS afk, $sQuery = " SELECT /* config.php 1313 */ conn2.id_channel, conn2.id_user, conn2.led, IF(DATE_SUB(NOW(), INTERVAL 1 MINUTE) < conn2.led, 0, 1) AS afk,
users.first_name, users.last_name, companies.company, companies.logo, option_nickname.option AS nickname, option_status.option AS status users.first_name, users.last_name, companies.company, companies.logo
FROM connections AS conn1 FROM connections AS conn1
LEFT JOIN connections AS conn2 ON conn2.id_channel = conn1.id_channel LEFT JOIN connections AS conn2 ON conn2.id_channel = conn1.id_channel
LEFT JOIN users ON users.id_user = conn2.id_user LEFT JOIN users ON users.id_user = conn2.id_user
LEFT JOIN companies ON companies.id_company = users.id_company LEFT JOIN companies ON companies.id_company = users.id_company
LEFT JOIN `options` AS option_nickname ON option_nickname.id_user = users.id_user AND option_nickname.id_option_name = ".self::OPT_NICKNAME."
LEFT JOIN `options` AS option_status ON option_status.id_user = users.id_user AND option_status.id_option_name = ".self::OPT_STATUS."
WHERE conn2.led > DATE_SUB(NOW(), INTERVAL ".self::KEEP_ALIVE." SECOND)". WHERE conn2.led > DATE_SUB(NOW(), INTERVAL ".self::KEEP_ALIVE." SECOND)".
($bUserRestricted?"AND conn1.id_user = ".$this->getUserId():"")." ($bUserRestricted?"AND conn1.id_user = ".$this->getUserId():"")."
GROUP BY conn2.id_channel, conn2.id_user GROUP BY conn2.id_channel, conn2.id_user";
ORDER BY option_nickname.option ASC";
$asUserChannels = $this->oMySql->getArrayQuery($sQuery, true); $asUserChannels = $this->oMySql->getArrayQuery($sQuery, true);
//Last messages //Last messages
$iUserIdCol = MySqlManager::getId(self::USER_TABLE); $iUserIdCol = MySqlManager::getId(self::USER_TABLE);
$asLastMsg = $this->oMySql->selectRows(array('select'=>array($iUserIdCol, 'MAX(led)'), 'from'=>self::MSG_TABLE), true, $iUserIdCol); $asLastMsg = $this->oMySql->selectRows(array('select'=>array($iUserIdCol, 'MAX(led)'), 'from'=>self::MSG_TABLE), true, $iUserIdCol);
$asConnectedUsers = array(); $asConnectedUsers = $asUserOptions = array();
foreach($asUserChannels as $asUser) foreach($asUserChannels as $asUser)
{ {
$sChanId = $asUser[MySqlManager::getId(self::CHAN_TABLE)]; $sChanId = $asUser[MySqlManager::getId(self::CHAN_TABLE)];
$iUserId = $asUser[$iUserIdCol]; $iUserId = $asUser[$iUserIdCol];
$sNickName = $asUser['nickname']; if(!array_key_exists($iUserId, $asUserOptions)) $asUserOptions[$iUserId] = $this->getUserOptions(array(self::OPT_NICKNAME, self::OPT_STATUS));
$sNickName = self::getNickNameFormat($asUserOptions[$iUserId][self::OPT_NICKNAME][MySqlManager::getText(self::OPTVAL_TABLE)]);
$asConnectedUsers[$sChanId][$sNickName.$iUserId]['id_user'] = $iUserId; $asConnectedUsers[$sChanId][$sNickName.$iUserId]['id_user'] = $iUserId;
$asConnectedUsers[$sChanId][$sNickName.$iUserId]['name'] = self::getNameFormat($asUser['first_name'], $asUser['last_name']); $asConnectedUsers[$sChanId][$sNickName.$iUserId]['name'] = self::getNameFormat($asUser['first_name'], $asUser['last_name']);
$asConnectedUsers[$sChanId][$sNickName.$iUserId]['company'] = self::getCompanyFormat($asUser['company']); $asConnectedUsers[$sChanId][$sNickName.$iUserId]['company'] = self::getCompanyFormat($asUser['company']);
$asConnectedUsers[$sChanId][$sNickName.$iUserId]['status'] = $asUser['status']; $asConnectedUsers[$sChanId][$sNickName.$iUserId]['status'] = $asUserOptions[$iUserId][self::OPT_STATUS][MySqlManager::getText(self::OPTVAL_TABLE)];
$asConnectedUsers[$sChanId][$sNickName.$iUserId]['logo'] = $asUser['logo']; $asConnectedUsers[$sChanId][$sNickName.$iUserId]['logo'] = $asUser['logo'];
$asConnectedUsers[$sChanId][$sNickName.$iUserId]['nickname'] = self::getNickNameFormat($sNickName==''?$asUser['first_name']:$sNickName); $asConnectedUsers[$sChanId][$sNickName.$iUserId]['nickname'] = $sNickName;
$asConnectedUsers[$sChanId][$sNickName.$iUserId]['last_activity'] = array_key_exists($iUserId, $asLastMsg)?self::getDateFormat($asLastMsg[$iUserId], self::TIME_FORMAT):''; $asConnectedUsers[$sChanId][$sNickName.$iUserId]['last_activity'] = array_key_exists($iUserId, $asLastMsg)?self::getDateFormat($asLastMsg[$iUserId], self::TIME_FORMAT):'';
$asConnectedUsers[$sChanId][$sNickName.$iUserId]['ping'] = self::getDateFormat($asUser['led'], self::TIME_FORMAT); $asConnectedUsers[$sChanId][$sNickName.$iUserId]['ping'] = self::getDateFormat($asUser['led'], self::TIME_FORMAT);
$asConnectedUsers[$sChanId][$sNickName.$iUserId]['afk'] = $asUser['afk']; $asConnectedUsers[$sChanId][$sNickName.$iUserId]['afk'] = $asUser['afk'];
} }
return $bJson?$this->jsonExport($asConnectedUsers):$asConnectedUsers; return $bJson?$this->jsonExport($asConnectedUsers):$asConnectedUsers;
} }
@@ -2180,21 +2226,16 @@ class Databap extends PhpObject
private function getChatNickNames($iUserId=0) private function getChatNickNames($iUserId=0)
{ {
$sUserIdCol = MySqlManager::getId(self::USER_TABLE); $sUserIdCol = MySqlManager::getId(self::USER_TABLE);
$sNicknameCol = MySqlManager::getText(self::OPT_TABLE); $sNicknameCol = MySqlManager::getText(self::OPTVAL_TABLE);
$asConstraints = array(MySqlManager::getId(self::OPTNAME_TABLE)=>self::OPT_NICKNAME); $sOptionNameId = MySqlManager::getFullColumnName(self::OPT_TABLE, MySqlManager::getId(self::OPTNAME_TABLE));
if($iUserId>0) $asInfo = array('select'=>array($sUserIdCol, $sNicknameCol),
{ 'from'=>self::OPT_TABLE,
$asConstraints[MySqlManager::getId(self::USER_TABLE)] = $iUserId; 'join'=> array(self::OPTVAL_TABLE=>MySqlManager::getId(self::OPTVAL_TABLE)),
$oResult = $this->oMySql->selectValue(self::OPT_TABLE, $sNicknameCol, $asConstraints); 'constraint'=>array($sOptionNameId=>self::OPT_NICKNAME));
} if($iUserId>0) $asInfo['constraint'][MySqlManager::getId(self::USER_TABLE)] = $iUserId;
else $oResult = $this->oMySql->selectRows($asInfo, true, $sUserIdCol);
{ if(count($oResult)==1) return $oResult[$iUserId];
$asInfo = array('select'=>array($sUserIdCol, $sNicknameCol),
'from'=>self::OPT_TABLE,
'constraint'=>$asConstraints);
$oResult = $this->oMySql->selectRows($asInfo, true, $sUserIdCol);
}
return $oResult; return $oResult;
} }
@@ -2686,8 +2727,7 @@ class Databap extends PhpObject
$asOptionvalues = $this->getUserOptions($asStyleParams); $asOptionvalues = $this->getUserOptions($asStyleParams);
foreach($asColorAnchors as $iOptionNameId=>$sColorAnchor) foreach($asColorAnchors as $iOptionNameId=>$sColorAnchor)
{ {
$sOptionValue = (array_key_exists($iOptionNameId, $asOptionvalues) && $asOptionvalues[$iOptionNameId]['option']!='')?$asOptionvalues[$iOptionNameId]['option']:$asDefaultValues[$iOptionNameId]; $sStyle = str_replace($sColorAnchor, $asOptionvalues[$iOptionNameId][MySqlManager::getText(self::OPTVAL_TABLE)], $sStyle);
$sStyle = str_replace($sColorAnchor, $sOptionValue, $sStyle);
} }
//setting header content type //setting header content type

View File

@@ -149,13 +149,16 @@ class Procedure extends PhpObject
$iDbStepId = $this->oMySql->insertRow(Databap::STEP_TABLE, $asStepData); $iDbStepId = $this->oMySql->insertRow(Databap::STEP_TABLE, $asStepData);
//Add new images //Add new images
$asImgData[MySqlManager::getId(Databap::STEP_TABLE)] = $iDbStepId; if(array_key_exists($iStepId, $this->asImages))
foreach($this->asImages[$iStepId] as $asImageInfo)
{ {
$asImgData['description'] = $asImageInfo['desc']; $asImgData[MySqlManager::getId(Databap::STEP_TABLE)] = $iDbStepId;
$asImgData['file_name'] = $asImageInfo['name']; foreach($this->asImages[$iStepId] as $asImageInfo)
$iDbImageId = $this->oMySql->insertRow(Databap::IMG_TABLE, $asImgData); {
$this->saveImage($asImgData['file_name']); $asImgData['description'] = $asImageInfo['desc'];
$asImgData['file_name'] = $asImageInfo['name'];
$iDbImageId = $this->oMySql->insertRow(Databap::IMG_TABLE, $asImgData);
$this->saveImage($asImgData['file_name']);
}
} }
} }

View File

@@ -206,6 +206,9 @@ if($bUserOk && $sAction!=Databap::EXT_ACCESS)
case 'reset_chan_safe_names': case 'reset_chan_safe_names':
$sResult = $oDatabap->resetChanSafeNames(); $sResult = $oDatabap->resetChanSafeNames();
break; break;
case 'migrate':
$sResult = $oDatabap->migrateOptionValues();
break;
} }
} }
break; break;
@@ -260,5 +263,4 @@ $sDebug = ob_get_clean();
if(Settings::DEBUG && $sDebug!='') $oDatabap->addUncaughtError($sDebug); if(Settings::DEBUG && $sDebug!='') $oDatabap->addUncaughtError($sDebug);
echo $sResult; echo $sResult;
//echo json_encode($sDebug);
?> ?>

2
jquery/databap.js vendored
View File

@@ -347,7 +347,7 @@ function Databap()
{ {
iDelta = $Elem.getEmptyHeight(); iDelta = $Elem.getEmptyHeight();
if(iDelta > 0) $Elem.height('-='+iDelta); if(iDelta > 0) $Elem.height('-='+iDelta);
debug('Removing useless '+iDelta+'px from #'+$Elem.attr('id')); //debug('Removing useless '+iDelta+'px from #'+$Elem.attr('id'));
} }
}; };

View File

@@ -38,7 +38,7 @@ databap.pageInit = function()
sp_fixes: [ ], sp_fixes: [ ],
ehp_improvements: [ 'Possibilité d\'accéder à tous les messags non lus, mêmes plus anciens qu\'une journée. cf. <a href="#options">#options</a>', ehp_improvements: [ 'Possibilité d\'accéder à tous les messags non lus, mêmes plus anciens qu\'une journée. cf. <a href="#options">#options</a>',
'Nouveau design', 'Nouveau design',
'Ajout des notes sans authentification : #note-<num>', 'Lecture de notes SAP (sans authentification) : #note-&lt;num&gt;',
'Annonceurs: Commande /news X : Vous annoncez le message X (votre message est ajouté à la liste des news automatiquement)', 'Annonceurs: Commande /news X : Vous annoncez le message X (votre message est ajouté à la liste des news automatiquement)',
'Les valeurs par default des options sont maintenant écrites', 'Les valeurs par default des options sont maintenant écrites',
'Le blog <a href="http://scn.sap.com/community/bw-hana/blog" target="_blank">SAP BW on HANA</a> a été ajouté à la liste des blogs parsés', 'Le blog <a href="http://scn.sap.com/community/bw-hana/blog" target="_blank">SAP BW on HANA</a> a été ajouté à la liste des blogs parsés',

View File

@@ -249,7 +249,7 @@ a.button {
padding:7px; padding:7px;
margin-right:5px; margin-right:5px;
background:$col_main_3; background:$col_main_3;
font-size:$size_big; font-size:$size_vbig;
cursor:pointer; cursor:pointer;
/*position:relative;*/ /*position:relative;*/
display:inline-block; display:inline-block;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -99,16 +99,17 @@
table { table {
margin-left:68px; margin-left:68px;
padding:10px; padding:10px;
background:$col_main_3;
td { td {
padding:0; padding:0;
text-align:left; text-align:left;
font-size:18px;
color:$col_main_1; color:$col_main_1;
} }
td.desc { td.desc {
width:160px; width:160px;
font-size:$size_subtitle;
line-height:20px; line-height:20px;
padding:10px 0; padding:10px 0;
} }
@@ -119,21 +120,24 @@
} }
.feedback { .feedback {
float:left; float:left;
font-size:14px; font-size:$size_vbig;
margin-top:5px; margin-top:5px;
font-style:italic; font-style:italic;
color:red; color:red;
} }
input { input {
border:1px solid $col_main_1;
color:$col_main_1; color:$col_main_1;
font-size:18px; font-size:$size_vbig;
line-height:20px; line-height:20px;
padding:2px 5px; padding:2px 5px;
width:200px; width:200px;
} }
a.button { a.button {
margin-right:0; margin-right:0;
background: $col_none;
}
a.button:hover {
background: $col_hover_1;
} }
a.button .fa { a.button .fa {
margin:1px; margin:1px;

13
todo
View File

@@ -4,7 +4,7 @@ Todo
Internal: Internal:
- independant code/procedure/article/table/document php classes ? - independant code/procedure/article/table/document php classes ?
- Admin param page - Admin param page
- Independant Option Class - Independant Option Class + delete 'option' column in options table
- put feedback box in title - put feedback box in title
- Créer un fichier de testing - Créer un fichier de testing
- harmonize local file access: table "files" ? No file name / extension on server - harmonize local file access: table "files" ? No file name / extension on server
@@ -19,8 +19,9 @@ Bug fix:
- Trouver une meilleure place pour le menu - Trouver une meilleure place pour le menu
New features: New features:
- aide à la saisie dans les options
- [1.2.0] Chat: New "Connected Users" Panel: On click, opening a sub panl with icons: profil link, status, PM. - [1.2.0] Chat: New "Connected Users" Panel: On click, opening a sub panl with icons: profil link, status, PM.
- [1.2.0] Unread messages par user (dedicated table). No more daily cut - [1.2.0] Unread messages par user (dedicated table).
- [1.2.0] Refiltre par type dans le search - [1.2.0] Refiltre par type dans le search
- [1.2.0] Remplacer dans les options : oui / non par [-0] (f205) [O-] (f204) - [1.2.0] Remplacer dans les options : oui / non par [-0] (f205) [O-] (f204)
- [1.2.0] Son pour les nouveaux messages - [1.2.0] Son pour les nouveaux messages
@@ -57,4 +58,10 @@ Testing
MEP 1.2 MEP 1.2
------- -------
- - ALTER TABLE option_values MODIFY option_value varchar(100) NOT NULL;
- insert into option_values (id_option_name, option_value, default_value, language) values (1, 'utilisateur inconnu', 1, 'FR');
- insert into option_values (id_option_name, option_value, default_value, language) values (9, 'email inconnu', 1, 'FR');
- Commit & push git
- ALTER TABLE `options` DROP `option`;
- delete migrateOptionValues(); (databap.php)
- delete case 'migrate' (index.php)