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::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::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::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'),
@@ -271,9 +271,8 @@ class Databap extends PhpObject
'type' => "varchar(2) NOT NULL",
'safe_name' => "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::OPTVAL_TABLE)=> "varchar(50) NOT NULL",
MySqlManager::getText(self::OPTVAL_TABLE)=> "varchar(100) NOT NULL",
'language' => "varchar(2) NOT NULL",
'file_name' => "varchar(40) NOT NULL",
'preview_name' => "varchar(40) NOT NULL",
@@ -367,12 +366,14 @@ class Databap extends PhpObject
//Select and Default Option values
$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_2=>array('#88B2F0'=>true),
self::OPT_BG_3=>array('#D9E5F2'=>true),
self::OPT_HOVER=>array('#EFAB00'=>true),
self::OPT_IMAGE_CHAT=>array('images/sap_gold_332.jpg'=>true),
self::OPT_STATUS=>array('aucune mission en cours'=>true),
self::OPT_EMAIL=>array('email inconnu'=>true),
self::OPT_CHAT_HISTO=>array('0'=>true));
foreach($asDefaultValues as $sOptionNameId=>$asOptionValues)
{
@@ -762,7 +763,6 @@ class Databap extends PhpObject
//Checking company existency in company table
$sCompanyTextCol = MySqlManager::getText(self::COMP_TABLE);
$iCompanyId = $this->oMySql->selectInsert(self::COMP_TABLE, array($sCompanyTextCol=>$sCompany, 'logo'=>self::DEFAULT_COMPANY_LOGO), array($sCompanyTextCol));
$asInfo = array('first_name'=>$sFirstName,
'last_name'=>$sLastName,
'active'=>self::MEMBER_ACTIVE,
@@ -772,13 +772,17 @@ class Databap extends PhpObject
'led'=>'0000-00-00 00:00:00');
$iUserId = $this->oMySql->insertRow(self::USER_TABLE, $asInfo);
//Admin Options
$sOptionTable = self::OPT_TABLE;
$sUserIdCol = MySqlManager::getId(self::USER_TABLE);
$sOptNameIdCol = MySqlManager::getId(self::OPTNAME_TABLE);
$sOptionTextCol = MySqlManager::getText(self::OPT_TABLE);
$this->oMySql->insertRow($sOptionTable, array($sUserIdCol=>$iUserId, $sOptNameIdCol=>self::OPT_NICKNAME, $sOptionTextCol=>self::getNickNameFormat($sFirstName)));
$this->oMySql->insertRow($sOptionTable, array($sUserIdCol=>$iUserId, $sOptNameIdCol=>self::OPT_EMAIL, $sOptionTextCol=>$sEmail));
//Options & default values
$this->setOptions(array(self::OPT_NICKNAME=>self::getNickNameFormat($sFirstName), self::OPT_EMAIL=>$sEmail), true, $iUserId);
$asInfo = array('select' => array($sOptNameIdCol, $sOptValueTextCol),
'from' => self::OPTVAL_TABLE,
'constraint'=> array('default_value'=>true, $sOptNameIdCol => "(".implode(", ", $oOptionNameIds).")"),
'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;
}
@@ -1285,99 +1289,27 @@ class Databap extends PhpObject
return ($this->getUserClearance() >= $iClearance);
}
public function getOptions()
{
$sOptValueIdCol = MySqlManager::getId(self::OPTVAL_TABLE);
$sOptionTextCol = MySqlManager::getText(self::OPT_TABLE);
$sOptNameTextCol = MySqlManager::getText(self::OPTNAME_TABLE);
$sOptValueTextCol = MySqlManager::getText(self::OPTVAL_TABLE);
/* Options Management */
//TODO Create class
//Available Options
$asAvailableOptions = $this->getAvailableOptions();
//TODO delete
public function migrateOptionValues()
{
$sResult = 'ok';
$asInfo = array('select' => array('id_option', 'id_option_name', 'option'),
'from' => self::OPT_TABLE,
'constraint'=> array('id_option_value'=>'NULL'),
'constOpe' => array('id_option_value'=>" IS "),
'constVar' => true);
$asOptions = $this->oMySql->selectRows($asInfo, true, 'id_option');
//User options
$asUserOptions = $this->getUserOptions();
//Build Options panel
$asSelectedOptions = array();
foreach($asAvailableOptions as $sOptNameId=>$asOption)
foreach($asOptions as $iOptionId=>$asOption)
{
$sOptionName = self::getDescriptionFormat($asOption[$sOptNameTextCol]);
$asSelectedOptions[$sOptionName]['option_id'] = $sOptNameId;
$asSelectedOptions[$sOptionName]['option_name'] = $sOptionName;
$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 $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);
}
}
}
$iOptionValueId = $this->oMySql->insertRow(self::OPTVAL_TABLE, array('id_option_name'=>$asOption['id_option_name'], 'option_value'=>$asOption['option'], 'language'=>self::LANG_FR));
if($iOptionValueId>0) $this->oMySql->updateRow(self::OPT_TABLE, $iOptionId, array('id_option_value'=>$iOptionValueId));
else $sResult = 'ko';
}
return $sResult;
}
private function getAvailableOptions()
@@ -1402,7 +1334,9 @@ class Databap extends PhpObject
$sOptNameIdCol = MySqlManager::getId(self::OPTNAME_TABLE);
$sOptValIdCol = MySqlManager::getId(self::OPTVAL_TABLE);
$sOptValueTextCol = MySqlManager::getText(self::OPTVAL_TABLE);
if(!is_array($oOptionNameIds)) $oOptionNameIds = array($oOptionNameIds);
elseif(empty($oOptionNameIds)) $oOptionNameIds = array_keys($this->getAvailableOptions());
$asInfo = array('select' => array($sOptNameIdCol, $sOptValueTextCol),
'from' => self::OPTVAL_TABLE,
@@ -1417,7 +1351,7 @@ class Databap extends PhpObject
{
$asUserOptions = $this->getUserOptions($sOptionNameId, $iUserId);
$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)
@@ -1425,37 +1359,154 @@ class Databap extends PhpObject
$iUserId = $iUserId>0?$iUserId:$this->getUserId();
$sUserIdCol = MySqlManager::getId(self::USER_TABLE);
$sOptNameIdCol = MySqlManager::getId(self::OPTNAME_TABLE);
$sOptNameIdColOptTable = MySqlManager::getFullColumnName(self::OPT_TABLE, $sOptNameIdCol);
$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);
$sOptIdCol = MySqlManager::getId(self::OPT_TABLE);
if(!is_array($oOptionNameIds)) $oOptionNameIds = array($oOptionNameIds);
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,
'constraint'=> array($sUserIdCol=>$iUserId, $sOptNameIdCol => "(".implode(", ", $oOptionNameIds).")"),
'constOpe' => array($sUserIdCol=>"=", $sOptNameIdCol=>" IN "),
'join' => array(self::OPTVAL_TABLE=>MySqlManager::getId(self::OPTVAL_TABLE)),
'constraint'=> array($sUserIdCol=>$iUserId, $sOptNameIdColOptTable => "(".implode(", ", $oOptionNameIds).")"),
'constOpe' => array($sUserIdCol=>"=", $sOptNameIdColOptTable => " IN "),
'constVar' => true);
$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 = '';
//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]);
if(!array_key_exists($iOptionNameId, $asOptions)) $asOptions[$iOptionNameId] = $asDefaultOptions[$iOptionNameId];
}
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)
{
switch($oUser)
@@ -1466,10 +1517,6 @@ class Databap extends PhpObject
case is_numeric($oUser):
$iUserId = $oUser;
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:
$iUserId = $this->getUserId();
break;
@@ -2134,39 +2181,38 @@ class Databap extends PhpObject
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,
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
LEFT JOIN connections AS conn2 ON conn2.id_channel = conn1.id_channel
LEFT JOIN users ON users.id_user = conn2.id_user
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)".
($bUserRestricted?"AND conn1.id_user = ".$this->getUserId():"")."
GROUP BY conn2.id_channel, conn2.id_user
ORDER BY option_nickname.option ASC";
GROUP BY conn2.id_channel, conn2.id_user";
$asUserChannels = $this->oMySql->getArrayQuery($sQuery, true);
//Last messages
$iUserIdCol = MySqlManager::getId(self::USER_TABLE);
$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)
{
$sChanId = $asUser[MySqlManager::getId(self::CHAN_TABLE)];
$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]['name'] = self::getNameFormat($asUser['first_name'], $asUser['last_name']);
$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]['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]['ping'] = self::getDateFormat($asUser['led'], self::TIME_FORMAT);
$asConnectedUsers[$sChanId][$sNickName.$iUserId]['afk'] = $asUser['afk'];
}
return $bJson?$this->jsonExport($asConnectedUsers):$asConnectedUsers;
}
@@ -2180,21 +2226,16 @@ class Databap extends PhpObject
private function getChatNickNames($iUserId=0)
{
$sUserIdCol = MySqlManager::getId(self::USER_TABLE);
$sNicknameCol = MySqlManager::getText(self::OPT_TABLE);
$asConstraints = array(MySqlManager::getId(self::OPTNAME_TABLE)=>self::OPT_NICKNAME);
$sNicknameCol = MySqlManager::getText(self::OPTVAL_TABLE);
$sOptionNameId = MySqlManager::getFullColumnName(self::OPT_TABLE, MySqlManager::getId(self::OPTNAME_TABLE));
if($iUserId>0)
{
$asConstraints[MySqlManager::getId(self::USER_TABLE)] = $iUserId;
$oResult = $this->oMySql->selectValue(self::OPT_TABLE, $sNicknameCol, $asConstraints);
}
else
{
$asInfo = array('select'=>array($sUserIdCol, $sNicknameCol),
'from'=>self::OPT_TABLE,
'constraint'=>$asConstraints);
'join'=> array(self::OPTVAL_TABLE=>MySqlManager::getId(self::OPTVAL_TABLE)),
'constraint'=>array($sOptionNameId=>self::OPT_NICKNAME));
if($iUserId>0) $asInfo['constraint'][MySqlManager::getId(self::USER_TABLE)] = $iUserId;
$oResult = $this->oMySql->selectRows($asInfo, true, $sUserIdCol);
}
if(count($oResult)==1) return $oResult[$iUserId];
return $oResult;
}
@@ -2686,8 +2727,7 @@ class Databap extends PhpObject
$asOptionvalues = $this->getUserOptions($asStyleParams);
foreach($asColorAnchors as $iOptionNameId=>$sColorAnchor)
{
$sOptionValue = (array_key_exists($iOptionNameId, $asOptionvalues) && $asOptionvalues[$iOptionNameId]['option']!='')?$asOptionvalues[$iOptionNameId]['option']:$asDefaultValues[$iOptionNameId];
$sStyle = str_replace($sColorAnchor, $sOptionValue, $sStyle);
$sStyle = str_replace($sColorAnchor, $asOptionvalues[$iOptionNameId][MySqlManager::getText(self::OPTVAL_TABLE)], $sStyle);
}
//setting header content type

View File

@@ -149,6 +149,8 @@ class Procedure extends PhpObject
$iDbStepId = $this->oMySql->insertRow(Databap::STEP_TABLE, $asStepData);
//Add new images
if(array_key_exists($iStepId, $this->asImages))
{
$asImgData[MySqlManager::getId(Databap::STEP_TABLE)] = $iDbStepId;
foreach($this->asImages[$iStepId] as $asImageInfo)
{
@@ -158,6 +160,7 @@ class Procedure extends PhpObject
$this->saveImage($asImgData['file_name']);
}
}
}
//Add this procedure to the group
$bCreation = ($iPrevProcId==0);

View File

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

2
jquery/databap.js vendored
View File

@@ -347,7 +347,7 @@ function Databap()
{
iDelta = $Elem.getEmptyHeight();
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: [ ],
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',
'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)',
'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',

View File

@@ -249,7 +249,7 @@ a.button {
padding:7px;
margin-right:5px;
background:$col_main_3;
font-size:$size_big;
font-size:$size_vbig;
cursor:pointer;
/*position:relative;*/
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 {
margin-left:68px;
padding:10px;
background:$col_main_3;
td {
padding:0;
text-align:left;
font-size:18px;
color:$col_main_1;
}
td.desc {
width:160px;
font-size:$size_subtitle;
line-height:20px;
padding:10px 0;
}
@@ -119,21 +120,24 @@
}
.feedback {
float:left;
font-size:14px;
font-size:$size_vbig;
margin-top:5px;
font-style:italic;
color:red;
}
input {
border:1px solid $col_main_1;
color:$col_main_1;
font-size:18px;
font-size:$size_vbig;
line-height:20px;
padding:2px 5px;
width:200px;
}
a.button {
margin-right:0;
background: $col_none;
}
a.button:hover {
background: $col_hover_1;
}
a.button .fa {
margin:1px;

13
todo
View File

@@ -4,7 +4,7 @@ Todo
Internal:
- independant code/procedure/article/table/document php classes ?
- Admin param page
- Independant Option Class
- Independant Option Class + delete 'option' column in options table
- put feedback box in title
- Créer un fichier de testing
- 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
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] 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] Remplacer dans les options : oui / non par [-0] (f205) [O-] (f204)
- [1.2.0] Son pour les nouveaux messages
@@ -57,4 +58,10 @@ Testing
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)