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
+194 -154
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
+9 -6
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']);
}
} }
} }
+3 -1
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);
?> ?>
+1 -1
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'));
} }
}; };
+1 -1
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',
+1 -1
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;
+1 -1
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+8 -4
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;
+10 -3
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)