clsParsedItem();
$this->tablename=GetTablePrefix()."Emoticon";
$this->NoResourceId=1;
$this->id_field = "EmoticonId";
$this->TagPrefix = "smiley";
if($id)
$this->LoadFromDatabase($id);
}
function Delete()
{
$i = $this->GetImageObject();
if(is_object($i))
$i->Delete();
parent::Delete();
}
function LoadFromDatabase($Id)
{
global $Errors;
if(!isset($Id))
{
$Errors->AddError("error.AppError",NULL,'Internal error: LoadFromDatabase id',"",get_class($this),"LoadFromDatabase");
return false;
}
$sql = sprintf("SELECT * FROM ".$this->tablename." WHERE ".$this->IdField()." = '%s'",$Id);
// echo $sql;
$result = $this->adodbConnection->Execute($sql);
if ($result === false)
{
$Errors->AddError("error.DatabaseError",NULL,$this->adodbConnection->ErrorMsg(),"",get_class($this),"LoadFromDatabase");
return false;
}
$data = $result->fields;
$this->SetFromArray($data);
$this->Clean();
return true;
}
function &GetImageObject()
{
if(!is_object($this->Image))
{
$this->Image = new clsImage($this->Get("ImageId"));
}
return $this->Image;
}
function GetURL()
{
$img =& $this->GetImageObject();
return $img->FullURL();
}
function ParseObject($element)
{
$extra_attribs = ExtraAttributes($element->attributes);
if(strtolower($element->name)==$this->TagPrefix)
{
$field = strtolower($element->attributes["_field"]);
switch($field)
{
case "name":
/*
@field:smiley.name
@description:text name of the smiley image
*/
$ret = $this->Get("Name");
break;
case "keystroke":
/*
@field:smiley.keystroke
@description:keystroke equivelent of the smiley
*/
$ret = $this->Get("KeyStroke");
break;
case "url":
/*
@field:smiley.url
@description:Image URL pointing to the smiley image
@attrib:_fulltag:bool:If set, returns a complete image tag, otherwise just the url is returned
*/
$src = $this->GetURL();
if($element->attributes["_fulltag"])
{
$ret = "
";
}
else
$ret = $src;
break;
}
}
return $ret;
}
}
class clsEmoticonList extends clsItemCollection
{
var $UrlCache;
var $SmileyIndex = Array(); // used for quick smiley conversion
function clsEmoticonList()
{
$this->clsItemCollection();
$this->classname = "clsEmoticon";
$this->SourceTable = GetTablePrefix()."Emoticon";
$this->AdminSearchFields = array($this->SourceTable.".Name","KeyStroke");
$this->UrlCache = Array();
}
function AddEmoticon($Name,$KeyStroke,$ImageId,$Enabled=1)
{
$e = new clsEmoticon();
$e->Set(array("Name","KeyStroke","ImageId","Enabled"),
array($Name,$KeyStroke,$ImageId,$Enabled));
$e->Create();
return $e;
}
function EditEmoticon($EmotionId,$Name,$KeyStroke,$ImageId=-1,$Enabled=1)
{
$e = $this->GetItem($EmotionId);
if($ImageId==-1)
$ImageId=$e->Get("ImageId");
$e->Set(array("Name","KeyStroke","ImageId","Enabled"),
array($Name,$KeyStroke,$ImageId,$Enabled));
$e->Update();
return $e;
}
function DeleteEmoticon($EmoticonId)
{
$e = $this->GetItem($EmoticonId,TRUE);
if(is_object($e))
{
if($e->Get("EmoticonId")==$EmoticonId)
$e->Delete();
}
}
function UploadEmoticon($file,$Name,$KeyStroke,$Enabled,$IsUpload=TRUE)
{
$objImageList = new clsImageList();
$LocalImage = 1;
$LocalThumb = 1;
if (strlen($_POST["imgThumbURL"])==0)
$LocalThumb = 1;
$img = $objImageList->Add($Name, $Name, 0, 1, 1, "", "", $Enabled, 0, 0, 0,1);
$localpath = $img->StoreUploadedImage($file,1, "in-bulletin/images/emoticons/",0,$IsUpload);
$img->Set("LocalPath",$localpath);
$img->Set("ThumbPath",$localpath);
$img->Update();
$e = $this->AddEmoticon($Name,$KeyStroke,$img->Get("ImageId"),$Enabled);
return $e;
}
function &LoadEmoticons($where=NULL,$orderBy=NULL)
{
$this->Clear();
$etable = $this->SourceTable;
$itable = GetTablePrefix()."Images";
$sql = "SELECT ".$this->SourceTable.".*,$itable.LocalPath FROM $etable LEFT JOIN $itable ON ($etable.ImageId=$itable.ImageId)";
//echo $sql."
";
if(strlen(trim($where))>0)
$sql .= " WHERE $where";
if(strlen(trim($orderBy))>0)
$sql .= " ORDER BY $orderBy";
//$sql = str_replace(" ORDER BY ".GetTablePrefix()."Emoticon.Image", " ORDER BY ".GetTablePrefix()."Emoticon.ImageId", $sql);
//echo $sql;
$this->Query_Item($sql);
// create Smiley Index
$i = 0; $sm_count = $this->NumItems();
while($i < $sm_count)
{
$this->SmileyIndex[ $this->Items[$i]->Get('KeyStroke') ] = $this->GetEmoticonUrl( $this->Items[$i]->UniqueId() );
$i++;
}
return $this->Items;
}
function &LoadActiveEmoticons()
{
$order = "CHAR_LENGTH(KeyStroke) DESC";
return $this->LoadEmoticons($this->SourceTable.".Enabled=1",$order);
}
function GetEmoticonUrl($id)
{
global $rootURL, $pathtoroot;
$url = isset($this->UrlCache[$id]) ? trim($this->UrlCache[$id]) : '';
if(!strlen($url))
{
$i =& $this->GetItem($id);
$url = $i->Get("LocalPath");
// if(file_exists($pathtoroot.$url))
// {
if(strlen($url))
{
$url = $rootURL.$url;
}
else
$url = " ";
$this->UrlCache[$id] = $url;
return trim($url);
// }
// else
// return "";
}
else
return $url;
}
function ParseText($src)
{
if($this->NumItems()==0)
{
$this->LoadActiveEmoticons();
}
$ret = $src;
for($x=0;$x<$this->NumItems();$x++)
{
$i =& $this->Items[$x];
$url = $this->GetEmoticonUrl($i->Get("EmoticonId"));
if(strlen($url))
{
$tag = '
';
}
else
$tag="";
$ret = str_replace($i->Get("KeyStroke"),$tag,$ret);
// echo "Replacing ".$i->Get("KeyStroke")." with ".htmlentities($tag)."
\n";
}
return $ret;
}
/**
* @return string
* @param string $text
* @desc Remove smiley images html back with their codes
*/
function UndoSmileys($text)
{
foreach($this->SmileyIndex as $KeyStoke => $SmileURL)
{
$text = str_replace('
',$KeyStoke,$text);
}
return $text;
}
}