db_Count("core", "(*)", "WHERE e107_name = 'emote_default' AND e107_value !='' "))
{ // Set up the default emotes
$tmp = 'a:28:{s:9:"alien!png";s:6:"!alien";s:10:"amazed!png";s:7:"!amazed";s:9:"angry!png";s:11:"!grr !angry";s:12:"biglaugh!png";s:4:"!lol";s:11:"cheesey!png";s:10:":D :oD :-D";s:12:"confused!png";s:10:":? :o? :-?";s:7:"cry!png";s:19:"&| &-| &o| :(( !cry";s:8:"dead!png";s:21:"x) xo) x-) x( xo( x-(";s:9:"dodge!png";s:6:"!dodge";s:9:"frown!png";s:10:":( :o( :-(";s:7:"gah!png";s:10:":@ :o@ :o@";s:8:"grin!png";s:10:":D :oD :-D";s:9:"heart!png";s:6:"!heart";s:8:"idea!png";s:10:":! :o! :-!";s:7:"ill!png";s:4:"!ill";s:7:"mad!png";s:13:"~:( ~:o( ~:-(";s:12:"mistrust!png";s:9:"!mistrust";s:11:"neutral!png";s:10:":| :o| :-|";s:12:"question!png";s:2:"?!";s:12:"rolleyes!png";s:10:"B) Bo) B-)";s:7:"sad!png";s:4:"!sad";s:10:"shades!png";s:10:"8) 8o) 8-)";s:7:"shy!png";s:4:"!shy";s:9:"smile!png";s:10:":) :o) :-)";s:11:"special!png";s:3:"%-6";s:12:"suprised!png";s:10:":O :oO :-O";s:10:"tongue!png";s:21:":p :op :-p :P :oP :-P";s:8:"wink!png";s:10:";) ;o) ;-)";}';
$insert = array("e107_name"=>"emote_default", "e107_value"=>$tmp);
$sql->db_Replace("core", $insert);
}
// Change the active emote pack
if (isset($_POST['active']))
{
if ($pref['smiley_activate'] != $_POST['smiley_activate'])
{
$pref['smiley_activate'] = $_POST['smiley_activate'];
$admin_log->log_event($pref['smiley_activate'] ? 'EMOTE_02' : 'EMOTE_03', $pref['emotepack'], E_LOG_INFORMATIVE, '');
save_prefs();
$update = true;
$emessage->add(LAN_UPDATED, E_MESSAGE_SUCCESS);
}
else
{
$emessage->add(LAN_NO_CHANGE);
}
}
/* get packs */
require_once(e_HANDLER."file_class.php");
$fl = new e_file;
$emote = new emotec;
$one_pack = FALSE;
// Check for pack-related buttons pressed
foreach($_POST as $key => $value)
{
if(strstr($key, "subPack_"))
{
$subpack = str_replace("subPack_", "", $key);
$emote->emoteConf($subpack);
break;
}
if(strstr($key, "XMLPack_"))
{
$subpack = str_replace("XMLPack_", "", $key);
$emote->emoteXML($subpack);
break;
}
if(strstr($key, "defPack_"))
{
$pref['emotepack'] = str_replace("defPack_", "", $key);
if(save_prefs())
{
$emessage->add(LAN_UPDATED, E_MESSAGE_SUCCESS);
}
else
{
$emessage->add(LAN_NO_CHANGE, E_MESSAGE_INFO);
}
$admin_log->log_event('EMOTE_01', $pref['emotepack'], E_LOG_INFORMATIVE, '');
break;
}
if(strstr($key, "scanPack_"))
{
$one_pack = str_replace("scanPack_", "", $key);
break;
}
}
$check = TRUE;
//$check = $emote -> installCheck();
$check = $emote->installCheck($one_pack);
if($check!==FALSE)
{
$emote -> listPacks();
}
class emotec
{
var $packArray; // Stores an array of all available emote packs (as subdirectory names)
function emotec()
{
/* constructor */
global $fl;
$this -> packArray = $fl -> get_dirs(e_IMAGE."emotes");
if(isset($_POST['sub_conf']))
{ // Update stored pack configuration
$this -> saveConf();
}
}
// List available emote packs
function listPacks()
{
global $e107, $emessage, $fl, $pref;
$text = "
";
$e107->ns->tablerender(EMOLAN_PAGE_TITLE, $emessage->render().$text);
}
// Configure an individual emote pack
function emoteConf($packID)
{
global $e107, $fl, $sysprefs, $tp;
$corea = "emote_".$packID;
$emotecode = $sysprefs -> getArray($corea);
$reject = '~^emoteconf|\.html$|\.php$|\.txt$|\.pak$|\.xml|\.phpBB'; // Files to exclude
$emoteArray = $fl -> get_files(e_IMAGE."emotes/".$packID, $reject);
$eArray = array();
foreach($emoteArray as $value)
{
$eArray[] = array('path' => $value['path'], 'fname' => $value['fname']);
}
//XXX Not sure if we need to know rhe number of files found - count($eArray) - Total ".count($eArray)." files found
$text = "
";
$e107->ns->tablerender(EMOLAN_PAGE_TITLE.' - '.EMOLAN_15.": '".$packID."'", $text);
}
// Generate an XML file - packname.xml in root emoticon directory
function emoteXML($packID, $strip_xtn = TRUE)
{
global $emessage, $fl, $sysprefs, $tp;
$fname = e_IMAGE."emotes/".$packID."/emoticons.xml";
$backname = e_IMAGE."emotes/".$packID."/emoticons.bak";
$corea = "emote_".$packID;
$emotecode = $sysprefs -> getArray($corea);
$reject = '~^emoteconf|\.html$|\.php$|\.txt$|\.pak$|\.xml|\.phpBB'; // Files to exclude
$emoteArray = $fl -> get_files(e_IMAGE."emotes/".$packID, $reject);
$eArray = array();
foreach($emoteArray as $value)
{
$eArray[] = $value['fname'];
}
$f_string = "\n\n\n\n";
foreach($eArray as $emote)
{
// Optionally strip file extension
$evalue = str_replace(".", "!", $emote);
if ($strip_xtn) $ename = substr($emote,0,strrpos($emote,'.'));
$f_string .= "\n";
foreach (explode(' ',$tp -> toForm($emotecode[$evalue])) as $v)
{
if (trim($v)) $f_string .= "\t{$v}\n";
}
$f_string .= "\n";
}
$f_string .= "\n\n";
if (is_file($backname)) unlink($backname); // Delete any old backup
if (is_file($fname)) rename($fname,$backname);
if (file_put_contents($fname,$f_string) === FALSE)
{
$emessage->add(''.EMOLAN_30.''.str_replace(e_IMAGE, e_IMAGE_ABS, $fname), E_MESSAGE_WARNING);
}
else
{
$emessage->add(''.EMOLAN_29.''.str_replace(e_IMAGE, e_IMAGE_ABS, $fname), E_MESSAGE_SUCCESS);
}
}
// Save configuration for an emote pack that's been edited
function saveConf()
{
global $sql, $tp;
$packID = $_POST['packID'];
unset($_POST['sub_conf'], $_POST['packID']);
$encoded_emotes = $tp->toDB($_POST);
// $tmp = addslashes(serialize($encoded_emotes));
$tmp = e107::getArrayStorage()->WriteArray($encoded_emotes);
if ($sql->db_Select("core", "*", "e107_name='emote_".$packID."'"))
{
admin_update($sql->db_Update("core", "`e107_value`='{$tmp}' WHERE `e107_name`='emote_".$packID."' "), 'update', EMOLAN_16, false, false);
}
else
{
admin_update($sql->db_Insert("core", "'emote_".$packID."', '$tmp' "), 'insert', EMOLAN_16, false, false);
}
}
// Identify currently selected emote pack. Read in any new ones
// Return false to disable listing of packs
function installCheck($do_one = FALSE)
{
global $e107, $emessage, $sql, $fl;
// Pick up a list of emote packs from the database
$pack_local = array();
if ($sql->db_Select("core","*","`e107_name` LIKE 'emote_%'",TRUE))
{
while ($row = $sql->db_Fetch())
{
$pack_local[substr($row['e107_name'],6)] = TRUE;
}
}
foreach($this -> packArray as $value)
{
if(strpos($value,' ')!==FALSE)
{ // Highlight any directory names containing spaces - not allowed
$msg = "
".EMOLAN_17." ".EMOLAN_18."
".EMOLAN_19.": {$value}
".EMOLAN_20.": ".e_IMAGE_ABS."emotes/
";
$emessage->add($msg, E_MESSAGE_ERROR);
$e107->ns->tablerender(EMOLAN_PAGE_TITLE.' - '.EMOLAN_21, $emessage->render());
return FALSE;
}
if (array_key_exists($value,$pack_local))
{
unset($pack_local[$value]);
}
if (($do_one == $value) || !$do_one && (!$sql -> db_Select("core", "*", "e107_name='emote_".$value."' ")))
{ // Pack info not in DB, or to be re-scanned
$no_error = TRUE;
$File_type = EMOLAN_32;
// Array of all files in the directory of the selected emote pack
$fileArray = $fl -> get_files(e_IMAGE."emotes/".$value); // We actually want all the files in the directory
$confFile = '';
foreach($fileArray as $k => $file)
{
if(strstr($file['fname'], ".xml"))
{
$confFile = array('file' => $file['fname'], 'type' => "xml");
}
else if(strstr($file['fname'], ".pak"))
{
$confFile = array('file' => $file['fname'], 'type' => "pak");
}
else if(strstr($file['fname'], ".php"))
{
$confFile = array('file' => $file['fname'], 'type' => "php");
}
if ($confFile)
{
unset($fileArray[$k]);
break;
}
}
/* .pak file */
if($confFile['type'] == "pak")
{
$filename = e_IMAGE."emotes/".$value."/".$confFile['file'];
$pakconf = file ($filename);
$contentArray = array();
foreach($pakconf as $line)
{
if(trim($line) && strstr($line, "=+") && !strstr($line, ".txt") && !strstr($line, ".html") && !strstr($line, "cvs")) $contentArray[] = $line;
}
$confArray = array();
foreach($contentArray as $pakline)
{
$tmp = explode("=+:", $pakline);
$confIC = str_replace(".", "!", $tmp[0]);
$confArray[$confIC] = trim($tmp[2]);
}
// $tmp = addslashes(serialize($confArray));
$tmp = e107::getArrayStorage()->WriteArray($confArray);
$File_type = EMOLAN_22;
}
/* end */
/* .xml file */
if($confFile['type'] == "xml")
{
$filename = e_IMAGE."emotes/".$value."/".$confFile['file'];
$contents = file_get_contents($filename);
$confArray = array();
$xml_type = 0;
if ((strpos($contents, "") !== FALSE) && (strpos($contents, "") !== FALSE))
{ // xep-0038 format
/* Example:
:-)
:)
*/
preg_match_all("#\(.*?)\<\/icon\>#si", $contents, $match);
$xml_type = 1;
// $match[0] - complete emoticon entry
// $match[1] - match string and object specification
$item_index = 1;
}
elseif (strpos($contents, "";
preg_match_all("#\(.*?)\<\/emoticon\>#si", $contents, $match);
$xml_type = 2;
// $match[0] - complete emoticon entry
// $match[1] - filename (may or may not not have file extension/suffix)
// $match[2] - match string(s) representing emote
$item_index = 2;
}
if ($xml_type)
{
for($a=0; $a < count($match[0]); $a++)
{
$e_file = '';
switch ($xml_type)
{
case 1 : // xep-0038
// Pull out a file name (only support first image type) - its in $fmatch[1]
if (preg_match("#\