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; } }