This commit is contained in:
2014-12-13 03:18:04 +01:00
parent ae20f82a43
commit 0e4b1a3e6d
24 changed files with 499 additions and 497 deletions

View File

@@ -7,8 +7,8 @@
class Databap extends PhpObject
{
//Common Constants
const VERSION = '1.0.3'; //Versioning: <Main_Version>.<Enhancement_Package>.<Patch>-<Release_Candidate>
const VERSION_DATE = '27/11/2014';
const VERSION = '1.1.0'; //Versioning: <Main_Version>.<Enhancement_Package>.<Patch>-<Release_Candidate>
const VERSION_DATE = '13/12/2014';
const EXPECTED_PAGE_COOKIE = 'exp_page';
const MAIN_SEPARATOR = ' ';
const DATE_FORMAT = 'd/m/Y';
@@ -136,10 +136,7 @@ class Databap extends PhpObject
const OPT_STATUS = 7;
const OPT_CONSOLE = 8;
const OPT_EMAIL = 9;
//Options Values Id Constants
const OPT_CONSOLE_YES = 1;
const OPT_CONSOLE_NO = 2;
const OPT_CHAT_HISTO = 10;
//Options Values Constants
const OPT_VAL_YES = 'oui';
@@ -242,7 +239,7 @@ class Databap extends PhpObject
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::OPTNAME_TABLE => array(MySqlManager::getText(self::OPTNAME_TABLE), 'type', 'language'),
self::OPTVAL_TABLE => array(MySqlManager::getId(self::OPTNAME_TABLE), MySqlManager::getText(self::OPTVAL_TABLE), '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::STEP_TABLE => array(MySqlManager::getId(self::PROC_TABLE), 'description'),
self::IMG_TABLE => array(MySqlManager::getId(self::PROC_TABLE), MySqlManager::getId(self::STEP_TABLE), 'description', 'file_name'),
@@ -285,7 +282,8 @@ class Databap extends PhpObject
'logo' => "varchar(20) NOT NULL",
'date' => "date NOT NULL",
'system' => "varchar(3)",
'extension' => "varchar(10)"
'extension' => "varchar(10)",
'default_value'=>"tinyint(1) DEFAULT 0"
);
$asOptions['constraints'] = array
(
@@ -355,18 +353,31 @@ class Databap extends PhpObject
$sOptionValueCol = MySqlManager::getText(self::OPTVAL_TABLE);
$sOptionNameIdCol = MySqlManager::getId(self::OPTNAME_TABLE);
$sOptionValueIdCol = MySqlManager::getId(self::OPTVAL_TABLE);
$iNicknameOptId = $this->oMySql->insertRow(self::OPTNAME_TABLE, array($sOptionNameIdCol=>self::OPT_NICKNAME, $sOptionNameCol=>'pseudo du chat', 'type'=>self::OPT_TEXT, 'language'=>self::LANG_FR));
$iBgColorOptId = $this->oMySql->insertRow(self::OPTNAME_TABLE, array($sOptionNameIdCol=>self::OPT_BG, $sOptionNameCol=>'couleur de fond', 'type'=>self::OPT_TEXT, 'language'=>self::LANG_FR));
$iBgColorOpt2Id = $this->oMySql->insertRow(self::OPTNAME_TABLE, array($sOptionNameIdCol=>self::OPT_BRIGHT_BG, $sOptionNameCol=>'couleur de fond 2 (claire)', 'type'=>self::OPT_TEXT, 'language'=>self::LANG_FR));
$iHoverColorOptId = $this->oMySql->insertRow(self::OPTNAME_TABLE, array($sOptionNameIdCol=>self::OPT_HOVER, $sOptionNameCol=>'couleur de survol', 'type'=>self::OPT_TEXT, 'language'=>self::LANG_FR));
$iChatImageOptId = $this->oMySql->insertRow(self::OPTNAME_TABLE, array($sOptionNameIdCol=>self::OPT_IMAGE_CHAT, $sOptionNameCol=>'image du chat', 'type'=>self::OPT_TEXT, 'language'=>self::LANG_FR));
$iStatusOptId = $this->oMySql->insertRow(self::OPTNAME_TABLE, array($sOptionNameIdCol=>self::OPT_STATUS, $sOptionNameCol=>'mission en cours', 'type'=>self::OPT_TEXT, 'language'=>self::LANG_FR));
$iConsoleOptId = $this->oMySql->insertRow(self::OPTNAME_TABLE, array($sOptionNameIdCol=>self::OPT_CONSOLE, $sOptionNameCol=>'afficher la console du chat', 'type'=>self::OPT_SELECT, 'language'=>self::LANG_FR));
$iEmailOptId = $this->oMySql->insertRow(self::OPTNAME_TABLE, array($sOptionNameIdCol=>self::OPT_EMAIL, $sOptionNameCol=>'Email', 'type'=>self::OPT_TEXT, 'language'=>self::LANG_FR));
$this->oMySql->insertRow(self::OPTNAME_TABLE, array($sOptionNameIdCol=>self::OPT_NICKNAME, $sOptionNameCol=>'pseudo du chat', 'type'=>self::OPT_TEXT, 'language'=>self::LANG_FR));
$this->oMySql->insertRow(self::OPTNAME_TABLE, array($sOptionNameIdCol=>self::OPT_BG, $sOptionNameCol=>'couleur de fond', 'type'=>self::OPT_TEXT, 'language'=>self::LANG_FR));
$this->oMySql->insertRow(self::OPTNAME_TABLE, array($sOptionNameIdCol=>self::OPT_BRIGHT_BG, $sOptionNameCol=>'couleur de fond 2 (claire)', 'type'=>self::OPT_TEXT, 'language'=>self::LANG_FR));
$this->oMySql->insertRow(self::OPTNAME_TABLE, array($sOptionNameIdCol=>self::OPT_HOVER, $sOptionNameCol=>'couleur de survol', 'type'=>self::OPT_TEXT, 'language'=>self::LANG_FR));
$this->oMySql->insertRow(self::OPTNAME_TABLE, array($sOptionNameIdCol=>self::OPT_IMAGE_CHAT, $sOptionNameCol=>'image du chat', 'type'=>self::OPT_TEXT, 'language'=>self::LANG_FR));
$this->oMySql->insertRow(self::OPTNAME_TABLE, array($sOptionNameIdCol=>self::OPT_STATUS, $sOptionNameCol=>'mission en cours', 'type'=>self::OPT_TEXT, 'language'=>self::LANG_FR));
$this->oMySql->insertRow(self::OPTNAME_TABLE, array($sOptionNameIdCol=>self::OPT_CONSOLE, $sOptionNameCol=>'afficher la console du chat', 'type'=>self::OPT_SELECT, 'language'=>self::LANG_FR));
$this->oMySql->insertRow(self::OPTNAME_TABLE, array($sOptionNameIdCol=>self::OPT_EMAIL, $sOptionNameCol=>'email', 'type'=>self::OPT_TEXT, 'language'=>self::LANG_FR));
$this->oMySql->insertRow(self::OPTNAME_TABLE, array($sOptionNameIdCol=>self::OPT_CHAT_HISTO, $sOptionNameCol=>'nombre de jours d\'historique dans le chat', 'type'=>self::OPT_TEXT, 'language'=>self::LANG_FR));
//Console Option
$asConsoleValues = array(self::OPT_CONSOLE_YES=>self::OPT_VAL_YES, self::OPT_CONSOLE_NO=>self::OPT_VAL_NO);
foreach($asConsoleValues as $sConsoleValId=>$sConsoleValue){$this->oMySql->insertRow(self::OPTVAL_TABLE, array($sOptionValueIdCol=>$sConsoleValId, $sOptionNameIdCol=>self::OPT_CONSOLE, $sOptionValueCol=>$sConsoleValue, 'language'=>self::LANG_FR));}
//Select and Default Option values
$asDefaultValues = array( self::OPT_CONSOLE=>array(self::OPT_VAL_YES=>false, self::OPT_VAL_NO=>true),
self::OPT_BG=>array('#04357B'=>true),
self::OPT_BRIGHT_BG=>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_CHAT_HISTO=>array('0'=>true));
foreach($asDefaultValues as $sOptionNameId=>$asOptionValues)
{
foreach($asOptionValues as $sOptionValue=>$bDefault)
{
$this->oMySql->insertRow(self::OPTVAL_TABLE, array($sOptionNameIdCol=>$sOptionNameId, $sOptionValueCol=>$sOptionValue, 'default_value'=>$bDefault, 'language'=>self::LANG_FR));
}
}
//Insert default and all channels
$this->oMySql->insertRow(self::CHAN_TABLE, array('safe_name'=>self::getChanSafeName(self::ALL_CHAN_TEXT), MySqlManager::getText(self::CHAN_TABLE)=>self::ALL_CHAN_TEXT));
@@ -430,9 +441,9 @@ class Databap extends PhpObject
'pm_separator'=>self::PM_SEP,
'reboot_delay'=>self::REBOOT_DELAY,
'versionHtml'=>$this->getItemBlock(),
'opt_console_no'=>self::OPT_CONSOLE_NO,
'types'=>$this->getTypeInfo('title'),
'msg_types'=>self::$MESSAGE_TYPES);
'msg_types'=>self::$MESSAGE_TYPES,
'cur_date'=>date(self::DATE_FORMAT));
$oPage->setTag('constants', $this->jsonConvert($asConstants));
//Variables
@@ -440,7 +451,7 @@ class Databap extends PhpObject
$asVars['user_id'] = $this->getUserId();
$asVars['hash_to_page'] = $this->getPagesFromHash();
$asVars['page_to_hash'] = array_flip($asVars['hash_to_page']);
$asVars['opt_console'] = $this->getUserOptionValue(self::OPT_CONSOLE);
$asVars['opt_console'] = ($this->getUserOptionValue(self::OPT_CONSOLE)==self::OPT_VAL_YES);
$oPage->setTag('variables', $this->jsonConvert($asVars));
return $oPage->getMask();
@@ -587,7 +598,9 @@ class Databap extends PhpObject
$sSAPDomain = 'http://scn.sap.com';
$asBlogPaths = array( '/community/data-warehousing/bw/blog',
'/community/data-warehousing/blog',
'/community/bw-hana/blog');
'/community/bw-hana/blog',
'/community/businessobjects-design-studio/blog',
'/community/businessobjects-analysis-ms-office/blog');
foreach($asBlogPaths as $sSAPBlogPath)
{
$sSAPBlogUrl = $sSAPDomain.$sSAPBlogPath;
@@ -761,14 +774,7 @@ class Databap extends PhpObject
$sUserIdCol = MySqlManager::getId(self::USER_TABLE);
$sOptNameIdCol = MySqlManager::getId(self::OPTNAME_TABLE);
$sOptionTextCol = MySqlManager::getText(self::OPT_TABLE);
$sOptionValIdCol = MySqlManager::getId(self::OPTVAL_TABLE);
$this->oMySql->insertRow($sOptionTable, array($sUserIdCol=>$iUserId, $sOptNameIdCol=>self::OPT_NICKNAME, $sOptionTextCol=>$sFirstName));
//$this->oMySql->insertRow($sOptionTable, array($sUserIdCol=>$iUserId, $sOptNameIdCol=>self::OPT_BG, $sOptionTextCol=>'#04357B'));
//$this->oMySql->insertRow($sOptionTable, array($sUserIdCol=>$iUserId, $sOptNameIdCol=>self::OPT_BRIGHT_BG, $sOptionTextCol=>'#D9E5F2'));
//$this->oMySql->insertRow($sOptionTable, array($sUserIdCol=>$iUserId, $sOptNameIdCol=>self::OPT_HOVER, $sOptionTextCol=>'#EFAB00'));
//$this->oMySql->insertRow($sOptionTable, array($sUserIdCol=>$iUserId, $sOptNameIdCol=>self::OPT_TOKEN, $sOptionTextCol=>$this->generateExternalAccessLink('rss', $iUserId)));
//$this->oMySql->insertRow($sOptionTable, array($sUserIdCol=>$iUserId, $sOptNameIdCol=>self::OPT_IMAGE_CHAT, $sOptionTextCol=>'images/sap_gold_332.jpg'));
$this->oMySql->insertRow($sOptionTable, array($sUserIdCol=>$iUserId, $sOptNameIdCol=>self::OPT_CONSOLE, $sOptionValIdCol=>self::OPT_CONSOLE_NO));
$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));
return $iUserId;
@@ -1312,7 +1318,8 @@ class Databap extends PhpObject
public function setOptions($asUserOptions, $bSilentUpdate=true)
{
foreach($this->getAvailableOptions() as $sOptNameId=>$asOption)
$asAvailableOptions = $this->getAvailableOptions();
foreach($asAvailableOptions as $sOptNameId=>$asOption)
{
if(array_key_exists($sOptNameId, $asUserOptions))
{
@@ -1377,11 +1384,34 @@ class Databap extends PhpObject
return $this->oMySql->selectRows($asInfo, true, $sOptNameIdCol);
}
private function getDefaultOptionValue($sOptionNameId)
{
$asDefaultOptions = $this->getDefaultOptionValues($sOptionNameId);
$asOptionInfo = array_shift($asDefaultOptions);
return $asOptionInfo[MySqlManager::getText(self::OPTVAL_TABLE)];
}
private function getDefaultOptionValues($oOptionNameIds=array(), $bOptValId=true)
{
$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);
$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);
if($bOptValId) $asInfo['select'][] = $sOptValIdCol;
return $this->oMySql->selectRows($asInfo, true, $sOptNameIdCol);
}
private function getUserOptionValue($sOptionNameId, $iUserId=0)
{
$asUserOptions = $this->getUserOptions($sOptionNameId, $iUserId);
$asOptionInfo = array_shift($asUserOptions);
return $asOptionInfo[MySqlManager::getId(self::OPTVAL_TABLE)];
return $asOptionInfo[MySqlManager::getText(self::OPT_TABLE)];
}
private function getUserOptions($oOptionNameIds=array(), $iUserId=0)
@@ -1391,25 +1421,31 @@ class Databap extends PhpObject
$sOptNameIdCol = MySqlManager::getId(self::OPTNAME_TABLE);
$sOptValueIdCol = MySqlManager::getId(self::OPTVAL_TABLE);
$sOptionTextCol = MySqlManager::getText(self::OPT_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());
$asUserinfo = array('select'=>array($sOptNameIdCol, $sOptValueIdCol, $sOptionTextCol),
'from'=>self::OPT_TABLE,
'constraint'=>array($sUserIdCol=>$iUserId));
if(count($oOptionNameIds)>0)
{
$asUserinfo['constraint'][$sOptNameIdCol] = "(".implode(", ", $oOptionNameIds).")";
$asUserinfo['constOpe'] = array($sUserIdCol=>"=", $sOptNameIdCol=>" IN ");
$asUserinfo['constVar'] = true;
}
$asUserinfo = array('select' => array($sOptNameIdCol, $sOptValueIdCol, $sOptionTextCol),
'from' => self::OPT_TABLE,
'constraint'=> array($sUserIdCol=>$iUserId, $sOptNameIdCol => "(".implode(", ", $oOptionNameIds).")"),
'constOpe' => array($sUserIdCol=>"=", $sOptNameIdCol=>" IN "),
'constVar' => true);
$asOptions = $this->oMySql->selectRows($asUserinfo, true, $sOptNameIdCol);
foreach($asOptions as $iOptionId=>$asOption)
foreach($oOptionNameIds as $iOptionId)
{
if(!$asOption[$sOptValueIdCol]) $asOptions[$iOptionId][$sOptValueIdCol] = $asOptions[$iOptionId][$sOptionTextCol];
$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]);
}
return $asOptions;
}
@@ -1559,7 +1595,7 @@ class Databap extends PhpObject
foreach($asMessages as $iChanId=>$sMsgChanName)
{
$asPm = $this->isPmChan($sMsgChanName);
$this->addMessage(' de '.$asUserInfo['company'].' ('.($sStatus==''?'aucune mission en cours':$this->getDescriptionFormat($sStatus)).') rejoint '.($asPm['is_pm']?'le chan priv&eacute;':'#'.$sMsgChanName), self::MESSAGE_CONN, $iChanId);
$this->addMessage(' de '.$asUserInfo['company'].' ('.$this->getDescriptionFormat($sStatus).') rejoint '.($asPm['is_pm']?'le chan priv&eacute;':'#'.$sMsgChanName), self::MESSAGE_CONN, $iChanId);
}
//Send invites to attendees
@@ -1922,21 +1958,23 @@ class Databap extends PhpObject
$sConnTableUserIdCol = MySqlManager::getFullColumnName(self::CONN_TABLE, MySqlManager::getId(self::USER_TABLE));
$sConnTableChanIdCol = MySqlManager::getFullColumnName(self::CONN_TABLE, MySqlManager::getId(self::CHAN_TABLE));
//channel related messages
$sCurDate = date(Databap::DATE_SQL_FORMAT);
//User channels related messages
$iCurTimeStamp = time();
$sCurDate = date(Databap::DATE_SQL_FORMAT, $iCurTimeStamp);
$sLimitDate = date(Databap::DATE_SQL_FORMAT, $iCurTimeStamp - $this->getUserOptionValue(self::OPT_CHAT_HISTO)*24*60*60);
$asInfo = array('select' => array($sMsgTableChanIdCol, $sMsgIdCol, $sMsgTextCol, 'type', $sMsgTableLed, 'first_name', 'last_name', $sUserIdCol, 'nickname'),
'from' => self::CONN_TABLE,
'joinOn' => array( self::MSG_TABLE =>array($sMsgTableChanIdCol, '=', $sConnTableChanIdCol),
self::USER_TABLE=>array($sUserTableUserIdCol, '=', $sMsgTableUserIdCol)),
'constraint'=> array($sConnTableUserIdCol=>$this->getUserId(), $sMsgIdCol=>$iFirstMsgId, 'date'=>$sCurDate),
'constOpe' => array($sConnTableUserIdCol=>'=', $sMsgIdCol=>'>', 'date'=>'='));
'constraint'=> array($sConnTableUserIdCol=>$this->getUserId(), $sMsgIdCol=>$iFirstMsgId, 'date'=>$sLimitDate),
'constOpe' => array($sConnTableUserIdCol=>'=', $sMsgIdCol=>'>', 'date'=>'>='));
$asSqlMessages = $this->oMySql->selectRows($asInfo, true, 'id_message');
//Global messages
$asInfo['from'] = self::MSG_TABLE;
$asInfo['joinOn'] = array(self::USER_TABLE=>array($sUserTableUserIdCol, '=', $sMsgTableUserIdCol));
$asInfo['constraint'] = array($sMsgTableChanIdCol=>self::ALL_CHAN_ID, $sMsgIdCol=>$iFirstMsgId, 'date'=>$sCurDate);
$asInfo['constOpe'] = array($sMsgTableChanIdCol=>'=', $sMsgIdCol=>'>', 'date'=>'=');
$asInfo['constraint'] = array($sMsgTableChanIdCol=>self::ALL_CHAN_ID, $sMsgIdCol=>$iFirstMsgId, 'date'=>$sLimitDate);
$asInfo['constOpe'] = array($sMsgTableChanIdCol=>'=', $sMsgIdCol=>'>', 'date'=>'>=');
$asSqlGlobalMessages = $this->oMySql->selectRows($asInfo, true, 'id_message');
//Invites messages
@@ -1953,13 +1991,9 @@ class Databap extends PhpObject
//Sort out messages for Json Export
$iPrefixLen = mb_strlen(self::JSON_PREFIX);
//$iConsoleDisplay = $this->getUserOptionValue(self::OPT_CONSOLE);
$asMessages = array('messages'=>array(), 'last_message_id'=>0);
foreach($asSqlMessages as $iMessageId=>$asMessageInfo)
{
//Connection message filter
//if($iConsoleDisplay==self::OPT_CONSOLE_NO && $asMessageInfo['type']==self::MESSAGE_CONN) continue;
//General message info
$iChanId = $asMessageInfo[MySqlManager::getId(self::CHAN_TABLE)];
$iUserId = $asMessageInfo[MySqlManager::getId(self::USER_TABLE)];
@@ -1968,6 +2002,7 @@ class Databap extends PhpObject
$asMessages['messages'][$iMessageId]['id_user'] = $iUserId;
$asMessages['messages'][$iMessageId]['message'] = $asMessageInfo[$sMsgTextCol];
$asMessages['messages'][$iMessageId]['msg_class'] = $sMessageType;
$asMessages['messages'][$iMessageId]['date'] = self::getDateFormat($asMessageInfo['led'], self::DATE_FORMAT);
$asMessages['messages'][$iMessageId]['time'] = self::getDateFormat($asMessageInfo['led'], self::TIME_FORMAT);
$asMessages['messages'][$iMessageId]['name'] = self::getNameFormat($asMessageInfo['first_name'], $asMessageInfo['last_name']);
$asMessages['messages'][$iMessageId]['nickname'] = self::getNickNameFormat($asMessageInfo['nickname']);
@@ -2566,11 +2601,17 @@ class Databap extends PhpObject
}
}
public function checkValue($sTableName, $asConstraints)
private function checkValue($sTableName, $asConstraints)
{
return $this->oMySql->selectValue($sTableName, 'COUNT(1)', $asConstraints);
}
public function getUrlAvailability($sLink)
{
$bAvailable = !$this->checkValue(self::URL_TABLE, array('phrase'=>$sLink));
return self::getJsonPostResult($bAvailable, '');
}
public function resetChanSafeNames()
{
$iChanIdCol = MySqlManager::getId(self::CHAN_TABLE);
@@ -2628,23 +2669,18 @@ class Databap extends PhpObject
public function getStyleSheet()
{
$sStyle = file_get_contents(self::STYLE_PATH);
$asDefaultColors = array( self::OPT_BG=>'#04357B',
self::OPT_BRIGHT_BG=>'#D9E5F2',
self::OPT_HOVER=>'#EFAB00',
self::OPT_IMAGE_CHAT=>'images/sap_gold_332.jpg');
$asStyleParams = array(self::OPT_BG, self::OPT_BRIGHT_BG, self::OPT_HOVER, self::OPT_IMAGE_CHAT);
//Inserting Color Ids
foreach($asDefaultColors as $iOptionNameId=>$sDefaultColor)
{
$asColorAnchors[$iOptionNameId] = '[OPT#'.$iOptionNameId.']';
}
$sStyle = str_replace($asDefaultColors, $asColorAnchors, $sStyle);
//Inserting Color Anchors
$asDefaultValues = $this->getDefaultOptionValues($asStyleParams, false);
foreach($asDefaultValues as $iOptionNameId=>$sDefaultValue) $asColorAnchors[$iOptionNameId] = '[OPT#'.$iOptionNameId.']';
$sStyle = str_replace($asDefaultValues, $asColorAnchors, $sStyle);
//Switching color Ids with user colors
$asOptionvalues = $this->getUserOptions(array_keys($asDefaultColors));
//Switching color Anchors with user colors
$asOptionvalues = $this->getUserOptions($asStyleParams);
foreach($asColorAnchors as $iOptionNameId=>$sColorAnchor)
{
$sOptionValue = (array_key_exists($iOptionNameId, $asOptionvalues) && $asOptionvalues[$iOptionNameId]['option']!='')?$asOptionvalues[$iOptionNameId]['option']:$asDefaultColors[$iOptionNameId];
$sOptionValue = (array_key_exists($iOptionNameId, $asOptionvalues) && $asOptionvalues[$iOptionNameId]['option']!='')?$asOptionvalues[$iOptionNameId]['option']:$asDefaultValues[$iOptionNameId];
$sStyle = str_replace($sColorAnchor, $sOptionValue, $sStyle);
}

View File

@@ -129,7 +129,7 @@ if($bUserOk && $sAction!=Databap::EXT_ACCESS)
$sResult = $oDatabap->uploadFile('doc');
break;
case 'url':
$sResult = $oDatabap->checkValue(Databap::URL_TABLE, array('phrase'=>$sLink));
$sResult = $oDatabap->getUrlAvailability($sLink);
break;
case 'user_info':
$sResult = $oDatabap->getUserInfo($oDatabap->getUserId(), true);

4
jquery/common.js vendored
View File

@@ -88,7 +88,7 @@ $.prototype.getEmptyHeight = function()
//debug('#'+$(this).attr('id')+'|.'+$(this).attr('class')+' gives '+$(this).outerHeight(true));
iTotalHeight += $(this).outerHeight(true);
});
return $This.height() - iTotalHeight;
return $This.innerHeight() - iTotalHeight;
};
$.prototype.getEmptyWidth = function()
@@ -98,7 +98,7 @@ $.prototype.getEmptyWidth = function()
{
iTotalWidth += $(this).outerWidth(true);
});
return $This.width() - iTotalWidth;
return $This.innerWidth() - iTotalWidth;
};
$.prototype.addDefaultValue = function(sDefaultValue, sInitValue)

97
jquery/databap.js vendored
View File

@@ -163,100 +163,7 @@ function Databap()
this.initMenu = function()
{
//Hover Event: open/close
self.$menu.hover
(
self.openMenu,
function()
{
closeMenu = true;
if(typeof oMenuTimer != "undefined") clearTimeout(oMenuTimer);
oMenuTimer = setTimeout(self.closeMenu, 1000);
}
);
//Close on click
self.$menu.find('a').click(self.instantCloseMenu);
};
this.openMenu = function()
{
//Disable closing
closeMenu = false;
if(typeof oMenuTimer != "undefined") clearTimeout(oMenuTimer);
//If not already opened / about to open
if(typeof openedMenu == 'undefined' || openedMenu != true)
{
openedMenu = true;
self.$menu.find('#menu_title').hide();
//Main shadow
self.$main.add(self.$title)
.click(self.instantCloseMenu)
.fadeTo('fast', 0.2);
//Switch useless button
self.$menu.find('.useless_button').removeClass('round').addClass('tiny_top_right');
//Move menu items
var iVPos = Math.max(0, $(window).scrollTop() - 46 - 46);
self.$menu.find('#menu_items').css('margin-top', iVPos);
//Expand menu
self.$menu
.stop()
.animate
(
{width:'300px'/*, borderWidth:'10px'*/},
'fast',
function()
{
self.$menu.find('#menu_box').show();
$(this).addClass('opened');
}
);
}
};
this.instantCloseMenu = function()
{
closeMenu=true;
if(typeof oMenuTimer != "undefined") clearTimeout(oMenuTimer);
self.closeMenu();
};
this.closeMenu = function()
{
if(closeMenu == true)
{
if(typeof oMenuTimer != "undefined") clearTimeout(oMenuTimer);
//Switch uselecc button
self.$menu.find('.useless_button').removeClass('tiny_top_right').addClass('round');
//Main shadow
self.$main.add(self.$title)
.off('click')
.fadeTo('fast', 1);
//Reduce menu
self.$menu.find('#menu_box').hide();
self.$menu
.stop()
.animate
(
{width:'20px'/*, borderWidth:'0'*/},
'fast',
function()
{
self.$menu.find('#menu_title').show();
$(this).removeClass('opened');
}
);
openedMenu = false;
closeMenu = false;
}
self.$menu.find('a').each(function(){$(this).attr('title', $(this).find('span').text());});
};
this.setInitEnd = function(bEnded, bAddScrollBar)
@@ -440,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

@@ -22,7 +22,7 @@
<div id="chat_messages"></div>
</div>
</div>
<div id="chat_input" class="tiny_round">
<div id="chat_input" class="round">
<form id="chat_form" name="chat_form">
<i id="message_img" class="fa fa-fw fa-20 fa-c-comment"></i><input type="text" id="message" name="message" value="" maxlength="500" autofocus />
<input type="hidden" id="chan" name="chan" value="" maxlength="50" />
@@ -252,7 +252,7 @@ function setChanButton()
.append
(
$('<span>', {id:'join_chan_input'})
.text('#')
.append($('<span>', {'class':'hash'}).text('#'))
.append
(
$('<input>', {type:'text', id:'input_chan', 'class':'round'})
@@ -755,7 +755,7 @@ function addMessage(message_info, bReset)
break;
case databap.consts.msg_types.conn:
updateUsersList = true;
msg_body = (self.vars2('opt_console')==self.consts.opt_console_no)?'':'<span class="text action">'+message_info.nickname+' '+message_info.message+'</span>';
msg_body = (!self.vars2('opt_console'))?'':'<span class="text action">'+message_info.nickname+' '+message_info.message+'</span>';
bSystemMsg = true;
break;
case databap.consts.msg_types.img:
@@ -809,7 +809,7 @@ function addMessage(message_info, bReset)
if(msg_body != '')
{
//Adding message to channel panel
$Message = $('<p class="'+message_info.msg_class+' class_'+sChanKeyName+' hide round_right"></p>').append('<span class="time">'+message_info.time+'</span>', msg_body);
$Message = $('<p>', {'class':message_info.msg_class+' class_'+sChanKeyName+' hide round_right'}).append($('<span>', {'class':'time'}).text(((message_info.date==databap.consts.cur_date)?'':message_info.date+' - ')+message_info.time), msg_body);
$Message.find('.chan_link').click(function(){joinChan($(this).find('.chan_text').text());});
$Message.find('.user').click(setPm);
databap.getMainElem('#chat_messages').append($Message);

View File

@@ -55,6 +55,10 @@ databap.onResize = function()
//Read Code
self.setScrollBarSize('optimize');
//FIXME
$('#reader_subbox').height('+=1px');
self.updateScrollBar();
};
databap.onQuit = function(){ return (self.tmp('started') === false); };
@@ -142,31 +146,31 @@ function checkUrlAvailability(phrase, bTriggered)
databap.getInfo
(
'url',
function(bExist)
function(oData)
{
var availabilityClass, availabilityText;
var $link = databap.getMainElem('#link_result');
if(bExist=='0')
if(oData.result==databap.consts.success)
{
availabilityClass = 'available';
availabilityText = 'Disponible';
if($link.is(':hidden')) $link.show('fast');
if($link.is(':hidden')) $link.fadeIn('fast');
}
else
{
availabilityClass = 'unavailable';
availabilityText = 'Indisponible';
if($link.is(':visible')) $link.hide('fast');
if($link.is(':visible')) $link.fadeOut('fast');
}
var $AvailableBox = databap.getMainElem('#available_phrase');
$AvailableBox
.removeClass('available unavailable')
.addClass(availabilityClass);
$AvailableBox.find('#available_phrase_text').text(availabilityText);
$AvailableBox.show('fast');
$AvailableBox.fadeIn('fast');
},
{link_escaped:phrase},
'html',
'json',
function(){},
true
);

View File

@@ -39,26 +39,26 @@
</table>
</div>
<div id="menu" class="round">
<div id="menu_title"><i class="fa fa-c-next"></i></div>
<!-- <div id="menu_title"><i class="fa fa-c-next"></i></div> -->
<div id="menu_box">
<ul id="menu_items">
<li><i class="fa fa-fw fa-20 fa-c-next fa-rotate-90"></i>menu</li>
<li><a href="#accueil"><i class="fa fa-fw fa-20 fa-c-welcome"></i>accueil</a></li>
<li><a href="#code"><i class="fa fa-fw fa-20 fa-c-code"></i>ajouter du code</a></li>
<li><a href="#procedure"><i class="fa fa-fw fa-20 fa-c-procedure"></i>ajouter une proc&eacute;dure</a></li>
<li><a href="#table"><i class="fa fa-fw fa-20 fa-c-table"></i>ajouter une table</a></li>
<li><a href="#doc"><i class="fa fa-fw fa-20 fa-c-doc"></i>ajouter une doc</a></li>
<li><a href="#liste"><i class="fa fa-fw fa-20 fa-c-list"></i>liste compl&egrave;te</a></li>
<li><a href="#note"><i class="fa fa-fw fa-20 fa-c-note"></i>Note OSS</a></li>
<li><a href="#profil"><i class="fa fa-fw fa-20 fa-c-profile"></i>profil</a></li>
<li><a href="#chat"><i class="fa fa-fw fa-20 fa-c-chat"></i>chat</a></li>
<li><a href="#options"><i class="fa fa-fw fa-20 fa-c-options"></i>paramètres</a></li>
<li><a href="[#]rss_link[#]" target="_blank"><i class="fa fa-fw fa-20 fa-c-rss"></i>flux Rss</a></li>
<li><a href="#logout"><i class="fa fa-fw fa-20 fa-c-logmeout"></i>quitter</a></li>
<li class="mobile"><a id="close_menu_ln"><i class="fa fa-fw fa-20 fa-c-fold"></i>fermer</a></li>
<!-- <li><i class="fa fa-fw fa-20 fa-c-next fa-rotate-90"></i>menu</li> -->
<li><a href="#accueil"><i class="fa fa-fw fa-20 fa-c-welcome"></i>&nbsp;<span>accueil</span></a></li>
<li><a href="#code"><i class="fa fa-fw fa-20 fa-c-code"></i>&nbsp;<span>ajouter du code</span></a></li>
<li><a href="#procedure"><i class="fa fa-fw fa-20 fa-c-procedure"></i>&nbsp;<span>ajouter une procédure</span></a></li>
<li><a href="#table"><i class="fa fa-fw fa-20 fa-c-table"></i>&nbsp;<span>ajouter une table</span></a></li>
<li><a href="#doc"><i class="fa fa-fw fa-20 fa-c-doc"></i>&nbsp;<span>ajouter une doc</span></a></li>
<li><a href="#liste"><i class="fa fa-fw fa-20 fa-c-list"></i>&nbsp;<span>liste complète</span></a></li>
<li><a href="#note"><i class="fa fa-fw fa-20 fa-c-note"></i>&nbsp;<span>Note OSS</span></a></li>
<li><a href="#profil"><i class="fa fa-fw fa-20 fa-c-profile"></i>&nbsp;<span>profil</span></a></li>
<li><a href="#chat"><i class="fa fa-fw fa-20 fa-c-chat"></i>&nbsp;<span>chat</span></a></li>
<li><a href="#options"><i class="fa fa-fw fa-20 fa-c-options"></i>&nbsp;<span>paramètres</span></a></li>
<li><a href="[#]rss_link[#]" target="_blank"><i class="fa fa-fw fa-20 fa-c-rss"></i>&nbsp;<span>flux Rss</span></a></li>
<li><a href="#logout"><i class="fa fa-fw fa-20 fa-c-logmeout"></i>&nbsp;<span>quitter</span></a></li>
<li class="mobile"><a id="close_menu_ln"><i class="fa fa-fw fa-20 fa-c-fold"></i>&nbsp;<span>fermer</span></a></li>
</ul>
</div>
<a href="[#]index_link[#]" class="useless_button round" title="The Secret Useless Button"></a>
<!-- <a href="[#]index_link[#]" class="useless_button round" title="The Secret Useless Button"></a> -->
</div>
<div id="main_container" class="round">
<div id="page_title">

View File

@@ -1,5 +1,5 @@
<div id="logout">
<p><i class="fa fa-spin fa-c-loading"></i>Déconnexion...</p>
<p class="round"><i class="fa fa-spin fa-20 fa-inline fa-c-loading"></i>Déconnexion...</p>
</div>
<script type="text/javascript">
self.getInfo('log_me_out', function(){document.location='';});

View File

@@ -17,7 +17,9 @@ databap.pageInit = function()
.addButton('ok', 'Ok', function($This){$This.submit();}, 'submit', 'heavy')
.submit(function(){databap.goToInternalLink('note', $('#note_id').val())});
$Frame.css('height', 'calc(100% - '+($('#note_form').outerHeight()+14)+'px)');
$Frame
.css('height', 'calc(100% - '+($('#note_form').outerHeight()+10)+'px)')
.hide();
//Start fetching note
var iNote = databap.vars.id;
@@ -26,6 +28,7 @@ databap.pageInit = function()
$('#note_id').val(iNote).focus();
self.addBufferIcon();
$Frame
.show('slow')
.attr('src', 'index.php?a=note&id='+iNote)
.load(databap.resetIcon);

View File

@@ -1,5 +1,4 @@
<div id="procedure_box">
<div id="procedure">
<div id="procedure">
<form id="procedure_form" name="procedure_form">
<input type="hidden" id="procedure_id" name="procedure_id" value="0" />
<div class="proc_menu" id="top_menu">
@@ -10,6 +9,8 @@
</a>
<a id="share" class="button round"><i class="fa fa-c-share"></i>Partager</a>
</div>
<div id="scrollbox">
<div id="scrollcontent">
<div id="titles_edit" class="hide">
<div id="procedure_title" class="step_box round">
<p class="step_nb_box">Titre</p>
@@ -26,6 +27,8 @@
<p class="read_description"><span id="description_read" class="read"></span></p>
</div>
<div id="procedure_steps"></div>
</div>
</div>
<div class="proc_menu" id="bottom_menu">
<a id="add_step" class="button round"><i class="fa fa-c-add"></i>Ajouter une &eacute;tape</a>
<a id="submit_procedure" class="button round"><i class="fa fa-c-ok"></i>Valider</a>
@@ -36,7 +39,6 @@
</a>
</div>
</form>
</div>
</div>
<div id="models" class="hide">
<div id="step_model">
@@ -77,7 +79,7 @@ databap.pageInit = function()
{
databap.vars.mode = '';
self.tmp('started', false);
self.initScrollBar('#main', '#procedure_box', '#procedure');
self.initScrollBar('#main', '#scrollbox', '#scrollcontent');
//Get step HTML
self.vars.stepHtml = self.getMainElem('#step_model').html();

View File

@@ -35,19 +35,19 @@ databap.pageInit = function()
//Add EHP improvements, SP bug fixes and WIP
var $ActivityBox, sIcon;
var asActivityTypes = {
sp_fixes: [ 'Réparation des fichiers téléchargés (documentation)',
'Réparation du /img dans le chat : Le type de l\'image est lu dans le header de la requête http et non dans l\'extension'],
ehp_improvements: [ 'Utilisation des # pour les accès aux pages, compatible avec les boutons prec/suiv des navigateurs. Ex: <a href="#chat">databap.lutran.fr#chat</a>',
'Mot de passe personnalisé et modifiable dans les <a href="#options">options</a>',
'paramètre dans les <a href="#options">options</a> pour supprimer les messages d\'arrivée et de départ des gens (console)',
'Téléversement de documentation',
'Documentation de tables ECC / BW',
'Homogénéisation des icônes',
'Recherche élargie sur tous les types de documents (codes, procédures, docs, articles et tables)',
'Commande /invite X : invite X à rejoindre le chan ouvert (Cf. Clippy)',
'Des filtres peuvent être appliqués à la liste complète des documents'],
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>',
'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',
'Le blog <a href="http://www.biportal.org/sap_bi_blog" target="_blank">BI Portal</a> a été ajouté à la liste des blogs parsés',
'Le blog <a href="http://sapbwbw.com/" target="_blank">SAP BW BW</a> a été ajouté à la liste des blogs parsés',
'Le blog <a href="http://scn.sap.com/community/businessobjects-design-studio/blog" target="_blank">SAP Design Studio</a> a été ajouté à la liste des blogs parsés',
'Le blog <a href="http://scn.sap.com/community/businessobjects-analysis-ms-office/blog" target="_blank">SAP Analysis for Office</a> a été ajouté à la liste des blogs parsés'],
wip: [ 'Filtre par type de documents (table, code, procédure, ...) applicable post-recherche (affinage)',
'Messages non lus mémorisés par utilisateur. Possibilité d\'accéder à tous les messags non lus, mêmes plus anciens qu\'une journée<span class="round milestone"><i class="fa fa-c-version"></i>1.1</span>',
'Messages non lus mémorisés par utilisateur',
'Son lors de nouveaux messages (chat)',
'lecteur de fichier online (pdf, txt, image, word ?)',
'Version compatible mobile (surtout pour le chat)',

View File

@@ -1,8 +1,35 @@
/* Fonts */
@font-face {
font-family: 'Databap';
font-style: normal;
font-weight: 400;
src: local('Databap'), url(style/databap_normal_normal.woff) format('woff');
}
@font-face {
font-family: 'Databap';
font-style: normal;
font-weight: 700;
src: local('Databap Bold'), local('Databap-Bold'), url(style/databap_normal_bold.woff) format('woff');
}
@font-face {
font-family: 'Databap';
font-style: italic;
font-weight: 400;
src: local('Databap Italic'), local('Databap-Italic'), url(style/databap_italic_normal.woff) format('woff');
}
@font-face {
font-family: 'Databap';
font-style: italic;
font-weight: 700;
src: local('Databap Bold Italic'), local('Databap-BoldItalic'), url(style/databap_italic_bold.woff) format('woff');
}
/* Standard Tags */
body, html {
background:$col_none;
font-family:Verdana, Arial;
font-family: 'Databap', sans-serif;
color:$col_main_1;
background:$col_main_1;
padding:0;
@@ -24,13 +51,12 @@ table td {
}
input, textarea, select {
font-family:Verdana, Arial;
font-size:12px;
background:none;
font-family: 'Databap', sans-serif;
font-size:$size_big;
background:$col_none;
border:none;
}
input[type=text], input[type=password] {
border:2px solid $col_main_1;
padding:5px;
width:200px;
}
@@ -41,8 +67,6 @@ input[type=button]:hover, input[type=submit]:hover, input[type=password]:hover,
input[disabled="disabled"], textarea[disabled="disabled"], input:disabled, textarea:disabled {
background-color:$col_main_2;
border-color:$col_main_2;
border:2px solid $col_main_1;
}
input[disabled="disabled"]:hover, textarea[disabled="disabled"]:hover, input:disabled:hover, textarea:disabled:hover {
@@ -57,9 +81,17 @@ input[type=button], .clickable {
cursor:pointer;
}
iframe {
width:100%;
height:100%;
margin: 0;
overflow: hidden;
background:$col_main_3;
border:none;
}
select {
background:$col_none;
border:2px solid $col_main_1;
padding:5px;
color:$col_main_1;
margin:0;
@@ -103,6 +135,13 @@ img {
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='$fromColor', endColorstr='$ToColor',GradientType=1 );
}
@mixin round($TopLeft, $TopRight, $BottomLeft, $BottomLeft) {
-moz-border-radius:$TopLeft $TopRight $BottomLeft $BottomLeft;
-webkit-border-radius:$TopLeft $TopRight $BottomLeft $BottomLeft;
-khtml-border-radius:$TopLeft $TopRight $BottomLeft $BottomLeft;
border-radius:$TopLeft $TopRight $BottomLeft $BottomLeft;
}
/* Classes */
.round_top {
@@ -185,21 +224,21 @@ img {
.error, .error a {
color:$col_error;
border-color:$col_error;
font-size:14px;
font-size:$size_vbig;
font-weight:bold;
}
.warning, .warning a {
color:$col_warning;
border-color:$col_warning;
font-size:13px;
font-size:$size_vbig;
font-style:italic;
}
.success, .success a {
color:$col_success;
border-color:$col_success;
font-size:13px;
font-size:$size_vbig;
}
.default_text {
@@ -209,10 +248,9 @@ img {
a.button {
padding:7px;
margin-right:5px;
background:$col_main_2;
font-size:12px;
background:$col_main_3;
font-size:$size_big;
cursor:pointer;
border:1px solid $col_main_1;
/*position:relative;*/
display:inline-block;
}
@@ -300,19 +338,18 @@ a[href^="table"].internal_link span.item {
.author_box {
padding:5px 10px;
border:1px solid $col_main_1;
color:$col_main_1;
font-style:italic;
font-size:12px;
font-size:$size_big;
}
.author_box:nth-child(odd) {
background:$col_main_3;
background:$col_none;
}
.author_box:nth-child(even) {
background:$col_main_2;
background:$col_main_4;
}
.author_box:hover {
border-color:$col_hover_1;
.author_box:hover a {
color:$col_hover_1;
}
.author_box a {
@@ -329,7 +366,7 @@ a[href^="table"].internal_link span.item {
.author_box span.description {
font-weight:bold;
font-style:normal;
font-size:13px;
font-size:$size_vbig;
}
.author_box span.rank {
@@ -340,9 +377,6 @@ a[href^="table"].internal_link span.item {
.standalone .author_box {
margin-top:10px;
}
.standalone .author_box:hover {
color:$col_hover_1;
}
.hide, .mobile {
display:none;
@@ -354,18 +388,17 @@ a[href^="table"].internal_link span.item {
margin-top:5px;
margin-bottom:5px;
padding:10px;
background:$col_main_2;
background:$col_main_3;
color:$col_main_1;
border: 2px solid $col_main_1;
}
.step_box:nth-child(even) {
background:$col_main_3;
background:$col_main_4;
}
.step_box input, .step_box textarea, .step_box select, .step_box .read.textarea, .step_box .read.input {
margin-top:10px;
background:$col_none;
font-size:14px;
font-size:$size_vbig;
border-width:1px;
}
.step_box input:disabled, .step_box textarea:disabled, .step_box select:disabled, .step_box input:hover:disabled, .step_box textarea:hover:disabled, .step_box select:hover:disabled {
@@ -378,7 +411,6 @@ a[href^="table"].internal_link span.item {
height:200px;
padding:5px;
background:$col_none;
border:1px solid $col_main_1;
}
.step_box .read.textarea, .step_box .read.input {
border-color:$col_main_2;
@@ -388,7 +420,7 @@ a[href^="table"].internal_link span.item {
background-color:$col_main_3;
}
.step_box:nth-child(even) .read.textarea {
background-color:$col_main_2;
background-color:$col_main_4;
}
.step_box .read.input {
background-color:$col_main_2;
@@ -462,7 +494,6 @@ a[href^="table"].internal_link span.item {
height:100%;
height:210px;
z-index:2;
border:1px solid $col_main_1;
background:$col_none;
text-align:center;
}
@@ -498,7 +529,7 @@ a[href^="table"].internal_link span.item {
}
.uploader_item_size, .uploader_item_cancel {
font-size:12px;
font-size:$size_big;
font-weight: normal;
}
@@ -515,7 +546,7 @@ a.uploader_item_cancel {
.uploader_box .image_action {
font-size:12px;
font-size:$size_big;
}
.uploader_box .image_action input {

View File

@@ -4,8 +4,9 @@
/* Main colors */
$col_main_1: #04357B;
$col_main_2: #D9E5F2;
$col_main_3: #DCF2FB;
$col_main_2: /*#D9E5F2;*/#88B2F0;
$col_main_3: /*#DCF2FB;*/#D9E5F2;
$col_main_4:#f2f5f9;
/* Flashy hover colors */
$col_hover_1: #EFAB00;
@@ -13,10 +14,22 @@ $col_hover_2: #F2E1B5;
/* Traffic light colors */
$col_success: green;
$col_success_2:#B2D6B2;
$col_warning: orange;
$col_error: red;
$col_error_2:#F6D3D3;
/* Technical colors */
$col_none: #FFFFFF;
$col_black: #000000;
$col_main_4: #0C8BCE;
/* Font size */
$size_small:9px;
$size_medium:10px;
$size_big:11px;
$size_vbig:13px;
$size_vvbig:15px;
$size_subtitle:16px;
$size_title:20px;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -10,7 +10,7 @@
#container {
background:$col_main_1;
padding:10px 10px 1px;
padding:10px 10px 1px 1px;
}
/* Header */
@@ -49,7 +49,6 @@
#search_btn_submit {
background:$col_main_2;
border-left:2px solid $col_main_1;
height:20px;
padding-top:5px;
}
@@ -62,28 +61,26 @@
/* Main */
#main_container {
background:$col_none;
margin-left:30px;
background:$col_main_2;
margin-left:35px;
position:relative;
overflow:hidden;
border:10px solid $col_none;
border:10px solid $col_main_2;
}
#page_title {
margin-bottom:10px;
#page_title .side_margins {
margin:0 0 10px 0;
}
#page_title h1 {
margin:0 -12px 12px;
padding:12px 10px;
padding:2px 0; /*To fit the icon in*/
margin:0;
width:100%;
border:2px solid $col_main_1;
font-family:Arial;
font-family: 'Databap', sans-serif;
font-size:32px;
line-height:32px;
font-style:italic;
font-weight:600;
@include gradient-diag($col_main_2, $col_none, 25%, 75%);
font-weight:bold;
}
#page_title h1 #title_feedback {
@@ -109,32 +106,11 @@
#menu {
position:absolute;
width:20px;
width:auto;
padding:10px 0;
z-index:10;
border-right:0 solid $col_main_1;
background: $col_main_2;
background: -moz-linear-gradient(top, $col_main_2 0%, $col_none 25%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,$col_main_2), color-stop(25%,$col_none));
background: -webkit-linear-gradient(top, $col_main_2 0%,$col_none 25%);
background: -o-linear-gradient(top, $col_main_2 0%,$col_none 25%);
background: -ms-linear-gradient(top, $col_main_2 0%,$col_none 25%);
background: linear-gradient(to bottom, $col_main_2 0%,$col_none 25%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='$col_main_2', endColorstr='$col_none',GradientType=0 );
}
#menu.opened {
background: $col_none;
background: -moz-linear-gradient(left, $col_none 75%, rgba(255,255,255,0) 100%);
background: -webkit-gradient(linear, left top, right top, color-stop(75%,$col_none), color-stop(100%,rgba(255,255,255,0)));
background: -webkit-linear-gradient(left, $col_none 75%,rgba(255,255,255,0) 100%);
background: -o-linear-gradient(left, $col_none 75%,rgba(255,255,255,0) 100%);
background: -ms-linear-gradient(left, $col_none 75%,rgba(255,255,255,0) 100%);
background: linear-gradient(to right, $col_none 75%,rgba(255,255,255,0) 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='$col_none', endColorstr='#00ffffff',GradientType=1 );
}
#menu #menu_title {
#menu_title {
position:relative;
padding:0;
margin:21px 0 0 0;
@@ -143,77 +119,77 @@
font-size:20px;
line-height:20px;
font-weight:bold;
}
}
#menu #menu_box {
display:none;
color:$col_main_1;
text-align:center;
}
#menu #menu_box ul {
#menu_box ul {
margin:0;
padding:0;
text-align:left;
font-size: 20px;
list-style:none;
}
}
#menu #menu_box ul li {
#menu_box ul li {
padding:10px 10px 10px 0;
margin:0;
padding:5px 3px 5px 15px;
list-style:none;
cursor:pointer;
line-height:20px;
height:20px;
font-size:20px;
text-transform:capitalize;
}
}
#menu #menu_box ul li:FIRST-CHILD {
padding-left:5px;
font-weight: bold;
}
#menu_box ul li:FIRST-CHILD {
padding-top:0;
}
#menu #menu_box ul li a {
color:$col_main_1;
display:block;
#menu_box ul li:FIRST-CHILD a {
padding-top:8px;
}
#menu_box ul li a {
padding:10px 0 10px 0;
color:$col_main_2;
display:inline-block;
width:100%;
}
#menu #menu_box ul li:hover a {
}
#menu_box ul li:hover a {
color:$col_hover_1;
}
}
#menu #menu_box ul li#rss_ln a {
#menu_box a.active {
background:#88B2F0;
color:$col_hover_1;
padding-right: 10px;
@include round(10px, 10px, 10px, 10px);
}
#menu_box ul li a span {
display: none;
}
#menu_box a.active span {
display:inline-block;
text-transform:capitalize;
background:#04357B;
}
#menu_box ul li a.active .fa {
margin-right:10px;
}
#menu_box ul li#rss_ln a {
color:$col_main_1;
}
#menu #menu_box ul li#quick_code_access_ln input {
border:2px solid $col_main_1;
width:60px;
padding:0 5px;
font-size:16px;
color:$col_main_1;
}
#menu #menu_box ul li .fa {
margin-right:5px;
}
#menu .useless_button {
width:0;
height:0;
position:absolute;
bottom:5px;
left:5px;
border:5px solid $col_main_1;
}
}
/* Welcome */
#welcome #welcome_container {
border:2px solid $col_main_1;
background:$col_main_2;
background:$col_main_3;
padding:10px;
}
@@ -230,13 +206,13 @@
}
#welcome #welcome_container ul li {
font-size:13px;
font-size:$size_vbig;
margin-top:10px;
font-weight: bold;
}
#welcome #welcome_container ul li ul {
font-size:12px;
font-size:$size_big;
margin-top:2px;
}
@@ -285,7 +261,7 @@
/* Add Code */
#add_code_container, #add_code_container input {
font-size:14px;
font-size:$size_vbig;
}
#add_code_container table {
@@ -308,12 +284,11 @@
margin:0 -10px;
padding:10px 6px 10px 10px;
width:100%;
border:2px solid $col_main_1;
min-height:100px;
height:300px;
font-family:courier;
font-family:Courier New, Courier;
color:$col_black;
font-size:14px;
font-size:$size_vbig;
}
#add_code_container .loggued {
@@ -321,7 +296,6 @@
}
#add_code_container input[type=text] {
border:2px solid $col_main_1;
width:400px;
padding:5px;
color:$col_main_1;
@@ -342,15 +316,13 @@
#link_result, #available_phrase {
display:none;
border:2px solid;
margin-left:15px;
padding:5px;
font-size:14px;
font-size:$size_vbig;
}
#link_result {
color:$col_main_1;
border-color:$col_main_1;
}
#available_phrase {
@@ -359,11 +331,11 @@
#available_phrase.available {
color:$col_success;
border-color:$col_success;
background:$col_success_2;
}
#available_phrase.unavailable {
color:$col_error;
border-color:$col_error;
background:$col_error_2;
}
/* read code */
@@ -380,7 +352,6 @@
#code_container .code_reader {
margin:10px 0 0 0;
border:2px solid $col_main_1;
padding:0;
background:#b5b5c6;
background:$col_main_1;
@@ -431,7 +402,7 @@
border-left:1px dotted #398c8c;
background:$col_none;
font-family:Courier New, Courier;
font-size:12px;
font-size:$size_big;
line-height:12px;
text-indent:20px;
color:#398c8c;
@@ -447,7 +418,7 @@
}
#code_container .code_reader ol li:hover, #code_container .code_reader ol li.code_hover {
background-color:$col_main_2;
background-color:$col_main_3;
}
#code_container .code_reader .core {color:#0000ff; text-transform:uppercase;}
@@ -483,7 +454,7 @@
color:$col_black;
}
#code_container .code_reader ol li span.code, ol li span.comment {
font-size:14px;
font-size:$size_vbig;
margin-left:15px;
}
#code_container .code_reader ol li span.comment span, #code_container .code_reader ol li span.code span.comment {
@@ -568,7 +539,7 @@
#search .summary {
margin: 10px 0 0px 5px;
font-size:14px;
font-size:$size_vbig;
font-style: italic;
}
@@ -597,7 +568,6 @@
width:96px;
height:96px;
background:url("images/avatar_96.png") 0 0 no-repeat;
border:2px solid $col_main_1;
float:left;
}
@@ -612,8 +582,7 @@
margin-left:110px; /* 96 (picture) + 10 (margin) + 4 (borders) */
padding:10px 16px;
height:76px; /* 96 (picture height) - 20 (padding) */
border:2px solid $col_main_1;
background:$col_main_2;
background:$col_main_3;
}
#profile .user .fa {
@@ -640,18 +609,17 @@
#profile #history_subbox {
margin-top:10px;
border:2px solid $col_main_1;
}
#profile #user_history p.history_line {
padding:5px 10px;
font-size:14px;
font-size:$size_vbig;
}
#profile #user_history p.history_line:nth-child(odd) {
background:$col_main_2;
background:$col_none;
}
#profile #user_history p.history_line:nth-child(even) {
background:$col_none;
background:$col_main_4;
}
#profile #user_history p.history_line:FIRST-CHILD {
-moz-border-radius-topleft: 10px;
@@ -692,9 +660,9 @@
#chat #chat_room {
margin-right:175px; /* 165px + 10px (margin-left) */
border:2px solid $col_main_1;
background:$col_none;
height:100%;
padding:5px;
}
.g_white_transparent {
@@ -727,7 +695,7 @@
#chat #chat_room #chat_container {
clear:both;
margin:5px 5px 0;
padding-bottom:5px;
}
#chat #chat_room #chat_container #chat_messages_box {
position:relative;
@@ -762,7 +730,7 @@
/*background-color:white;*/
}
#chat_messages p.A, #chat_messages p.PA, #chat_messages p.E, #chat_messages p.PE, #chat_messages p.N {
background-color:$col_main_2;
background-color:$col_main_3;
font-style:italic;
}
#chat_messages p.C {
@@ -772,11 +740,11 @@
}
#chat_messages p span.time {
color:$col_hover_1;
font-size:10px;
font-size:$size_small;
font-style:normal;
}
#chat_messages p a.user, #chat_messages p span.console {
font-size:12px;
font-size:$size_medium;
font-weight:bold;
color:$col_main_1;
}
@@ -788,7 +756,7 @@
}
#chat_messages p span.text {
margin-left:5px;
font-size:13px;
font-size:$size_big;
}
#chat_messages p span.action {
font-style:italic;
@@ -819,10 +787,10 @@
#chat_messages .help p {
padding:0 5px;
color:#666666;
font-size:10px;
font-size:$size_medium;
}
#chat_messages .help p.title {
font-size:14px;
font-size:$size_big;
padding:3px 5px;
border-bottom:1px dashed #666666;
letter-spacing:0;
@@ -832,7 +800,7 @@
}
#chat_messages .help p.subtitle {
margin-top:5px;
font-size:12px;
font-size:$size_medium;
}
#chat_messages .help p.item {
margin-top:1px;
@@ -847,24 +815,24 @@
}
#chat #chat_input {
margin:5px;
padding:0 5px;
background:$col_main_1;
background:$col_main_3;
color:#94BDF9;
overflow: hidden;
}
#chat #chat_input .fa {
color:$col_main_2;
margin-right:2px;
color:$col_main_1;
margin-right:3px;
margin-left:3px;
}
#chat #chat_input input#message {
color:$col_none;
background:$col_main_3;
margin:0;
padding:7px 0;
border:none;
min-width:200px;
font-size:13px;
line-height:13px;
font-size:$size_vbig;
}
#chat #chat_input input#message:hover, #chat #chat_input input#message:focus {
@@ -883,25 +851,26 @@
#chat #sidebar .sidebar_box {
position:relative;
border:2px solid $col_main_1;
font-weight:bold;
padding:0;
margin-bottom:10px;
overflow: hidden;
}
#chat #sidebar .sidebar_box_title {
background-color:$col_main_2;
background-color:$col_main_3;
text-align:center;
font-size:$size_subtitle;
}
#chat #sidebar .sidebar_box_content {
border-top:2px solid $col_main_1;
font-size:12px;
background:$col_none;
font-size:$size_medium;
font-weight:normal;
}
#chat #sidebar .help_paperclip {
background: transparent url('images/ms_paperclip_112.jpg') 50% 50% no-repeat;
background: $col_none url('images/ms_paperclip_112.jpg') 50% 50% no-repeat;
height:109px;
}
@@ -916,7 +885,7 @@
}
#chat #sidebar p.connected_user {
font-size:16px;
font-size:$size_vbig;
}
#chat #sidebar a.connected_user_logo img {
vertical-align:middle;
@@ -944,22 +913,20 @@
}
#chat #chat_chan {
margin-bottom: -2px;
}
#chat #chat_chan .tab_bar {
font-weight:bold;
text-align:right;
margin:0 184px 0 0; /* 165px + the round corner */
margin:0 0 0 5px; /* 165px + the round corner */
}
#chat #chat_chan .tab_bar span.chan {
display: inline-block;
background-color:$col_main_2;
background-color:$col_main_3;
padding:2px 8px;
border:2px solid $col_main_1;
margin-left:5px;
color:$col_main_1;
font-size:$size_vvbig;
}
#chat #chat_chan .tab_bar span#join_chan {
@@ -995,9 +962,12 @@
color:$col_hover_1;
}
#chat #chat_chan .tab_bar span#join_chan .hash {
margin-left:5px;
}
#chat #chat_chan .tab_bar span#join_chan input, #chat #chat_chan .tab_bar span#join_chan input:hover {
border:none;
font-size:14px;
font-size:$size_vvbig;
padding:0;
margin:0;
width:70px;
@@ -1022,10 +992,10 @@
padding:6px 5px;
}
#chat #news .new:nth-child(even) {
background:$col_main_3;
background:$col_none;
}
#chat #news .new:nth-child(odd) {
background:$col_main_2;
background:$col_main_4;
}
#chat #news .new:last-child {
-moz-border-radius:0 0 10px 10px;
@@ -1044,8 +1014,7 @@
/* Options */
#options .options_box {
background:$col_main_2;
border:2px solid $col_main_1;
background:$col_main_3;
width:490px;
float:left;
margin:0 10px 10px 0;
@@ -1068,10 +1037,10 @@
}
#options .options_box input[type=text], #options .options_box input[type=password], #options .options_box select {
font-size:14px;
font-size:$size_big;
background:$col_none;
border-width:1px;
font-size:14px;
font-size:$size_vbig;
padding:5px;
float:right;
}
@@ -1082,7 +1051,6 @@
}
#options .options_box select {
border:1px solid $col_main_1;
color:$col_main_1;
}
@@ -1103,19 +1071,23 @@
background-color:$col_hover_1
}
#procedure #procedure_steps .step_box:LAST-CHILD {
margin-bottom:0;
}
#titles_read p.read_title {
border-bottom:1px solid $col_main_1;
font-weight:bold;
}
#titles_read p.read_details {
font-size:12px;
font-size:$size_big;
font-style:italic;
margin:3px 0 15px 0;
}
#titles_read p.read_description {
font-size:14px;
font-size:$size_vbig;
}
#titles_read p.read_description .fa {
@@ -1158,6 +1130,10 @@
background:$col_none;
}
#procedure #procedure_title {
margin-top:0;
}
#procedure #bottom_menu {
margin:10px 0 0 0;
}
@@ -1189,7 +1165,7 @@
}
#procedure .thumbnail_desc {
font-size:12px;
font-size:$size_big;
}
/* Procedure - Uploader */
@@ -1199,7 +1175,7 @@
}
#procedure .uploader_box .error {
font-size:12px;
font-size:$size_big;
margin:10px 0;
}
@@ -1214,6 +1190,10 @@
margin-bottom:10px;
}
#doc .step_box:nth-child(odd) {
background:$col_main_4;
}
#doc #attach_file {
margin-top:10px;
}
@@ -1309,7 +1289,7 @@
#footer p, #footer a {
color:$col_none;
margin:0;
font-size:9px;
font-size:$size_small;
}
#footer a {
@@ -1320,8 +1300,9 @@
#logout p {
font-size:18px;
color:$col_main_1;
background-color:$col_main_3;
margin-top:25px;
padding:5px;
}
/* Note */
@@ -1330,14 +1311,6 @@
height:100%;
}
#note_frame {
width:calc(100% - 4px);
height:calc(100% - 4px);
border: 2px solid $col_main_1;
margin: 0;
overflow: hidden;
}
#note_form {
margin-bottom: 10px;
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -5,8 +5,7 @@
@import 'fa-custom';
@import 'common';
/* Fix librairies location */
/* FIXME */
/* FIXME librairies location */
@font-face {
font-family: 'FontAwesome';
src: url('fontawesome-webfont.eot?v=4.2.0');
@@ -14,6 +13,30 @@
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Databap';
font-style: normal;
font-weight: 400;
src: local('Databap'), url(databap_normal_normal.woff) format('woff');
}
@font-face {
font-family: 'Databap';
font-style: normal;
font-weight: 700;
src: local('Databap Bold'), local('Databap-Bold'), url(databap_normal_bold.woff) format('woff');
}
@font-face {
font-family: 'Databap';
font-style: italic;
font-weight: 400;
src: local('Databap Italic'), local('Databap-Italic'), url(databap_italic_normal.woff) format('woff');
}
@font-face {
font-family: 'Databap';
font-style: italic;
font-weight: 700;
src: local('Databap Bold Italic'), local('Databap-BoldItalic'), url(databap_italic_bold.woff) format('woff');
}
/* Logon */

40
todo
View File

@@ -8,22 +8,24 @@ Internal:
- put feedback box in title
- Créer un fichier de testing
- harmonize local file access: table "files" ? No file name / extension on server
- Supprimer l'extension pendant le stockage et la remettre dans la getDownload(). La stocker en base.
- Mettre tous les docs/img dans table FILES
Bug fix:
- add big company logo in db (new col). Use it in profile ?
- [1.0.3] Resize .gif + fix unresized ones
- [1.1.1] Resize .gif + fix unresized ones
- Fix les "xxx se déconnecte" intempestives
- code reader : mettre la scrollbar à l'intérieur du code
- Trouver une meilleure place pour le menu
New features:
- [1.1.0] Chat: New "Connected Users" Panel: On click, opening a sub panl with icons: profil link, status, PM.
- [1.1.0] Unread messages par user (dedicated table). No more daily cut
- [1.1.0] Refiltre par type dans le search
- [1.1.0] Remplacer dans les options : oui / non par [-0] (f205) [O-] (f204)
- [1.1.0] Son pour les nouveaux messages
- [1.1.0] Chat : compatibilité mobile (utiliser la fonctionnalité ff)
- [1.1.0] search : add tagname, like code:blabla to search blabla in codes only
- [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] 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
- [1.2.0] Chat : compatibilité mobile (utiliser la fonctionnalité ff)
- [1.2.0] search : add tagname, like code:blabla to search blabla in codes only
- [1.2.0] Delete phrases table / généraliser ? ne pas oublier la item list
- [1.3.0] Reward on post
- modification code : possibilité de modifier la description d'un code après enregistrement + entre les versions
@@ -36,15 +38,10 @@ New features:
Design
- profil : donner la possibilité de mettre des images de profil
EHP 1
EHP 2
-----
- Annonceurs: Commande /news X : Vous annoncez le message X (votre message est ajouté à la liste des news automatiquement)
- 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://www.biportal.org/sap_bi_blog" target="_blank">BI Portal</a> a été ajouté à la liste des blogs parsés
- Le blog <a href="http://sapbwbw.com/" target="_blank">SAP BW BW</a> a été ajouté à la liste des blogs parsés
- Interface menu modifié
- Ajout des notes sans authentification : #note-<num>
-
Testing
-------
@@ -56,3 +53,16 @@ Testing
- mysql --local-infile
- LOAD DATA LOCAL INFILE '/var/www/databap/test.csv' INTO TABLE tables CHARACTER SET UTF8 FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\';
- Rebuild search : ?a=build_index
MEP 1.1
-------
ALTER TABLE option_values add default_value tinyint(1) default 0 after option_value;
update option_values set default_value = 1 where id_option_value = 2;
insert into option_names (id_option_name, option_name, type, language) values (10, 'Chat: nombre de jours d\'historique', 'T', 'FR');
insert into option_values (id_option_name, option_value, default_value, language) values (2, '#04357B', 1, 'FR');
insert into option_values (id_option_name, option_value, default_value, language) values (3, '#D9E5F2', 1, 'FR');
insert into option_values (id_option_name, option_value, default_value, language) values (4, '#EFAB00', 1, 'FR');
insert into option_values (id_option_name, option_value, default_value, language) values (6, 'images/sap_gold_332.jpg', 1, 'FR');
insert into option_values (id_option_name, option_value, default_value, language) values (7, 'aucune mission en cours', 1, 'FR');
insert into option_values (id_option_name, option_value, default_value, language) values (10, '0', 1, 'FR');