Index: trunk/kernel/include/itemreview.php =================================================================== diff -u -N --- trunk/kernel/include/itemreview.php (revision 8436) +++ trunk/kernel/include/itemreview.php (revision 0) @@ -1,803 +0,0 @@ -Execute($sql); - if($rs) - { - $count = $rs->fields["DupCount"]; - } - return ($count>0); -} - -RegisterPrefix("clsItemReview","review","kernel/include/itemreview.php"); - -class clsItemReview extends clsParsedItem -{ - function clsItemReview($ReviewId=NULL,$table="ItemReview") - { - $this->clsParsedItem(); - $this->tablename = $table; - $this->id_field = "ReviewId"; - $this->type=-20; - $this->NoResourceId=1; - $this->TagPrefix = "review"; - - if($ReviewId!=NULL) - $this->LoadFromDatabase($ReviewId); - } - - function Validate() - { - global $Errors; - - $dataValid = true; - if(!isset($this->m_CreatedOn)) - { - $Errors->AddError("error.fieldIsRequired",'CreatedOn',"","",get_class($this),"Validate"); - $dataValid = false; - } - - if(!isset($this->m_ReviewText)) - { - $Errors->AddError("error.fieldIsRequired",'ReviewText',"","",get_class($this),"Validate"); - $dataValid = false; - } - - if(!isset($this->m_Pending)) - { - $Error->AddError("error.fieldIsRequired",'Pending',"","",get_class($this),"Validate"); - $dataValid = false; - } - - if(!isset($this->m_IPAddress)) - { - $Error->AddError("error.fieldIsRequired",'IPAddress',"","",get_class($this),"Validate"); - $dataValid = false; - } - - if(!isset($this->m_ItemId)) - { - $Error->AddError("error.fieldIsRequired",'ItemId',"","",get_class($this),"Validate"); - $dataValid = false; - } - - if(!isset($this->m_CreatedById)) - { - $Error->AddError("error.fieldIsRequired",'CreatedBy',"","",get_class($this),"Validate"); - $dataValid = false; - } - - return $dataValid; - } - - function LoadFromDatabase($Id) - { - global $objSession, $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 ReviewId = '%s'",$Id); - if( $GLOBALS['debuglevel'] ) 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; - if(is_array($data)) - $this->SetFromArray($data); - $this->Clean(); - return TRUE; - } - - function MoveUp() - { - $this->Increment("Priority"); - } - - function MoveDown() - { - $this->Decrement("Priority"); - } - - function getMainItem($module_info, $field_name) - { - static $item_data = Array (); - - $resource_id = $this->Get('ItemId'); - if (!isset($item_data[$resource_id])) { - $sql = 'SELECT * - FROM '.TABLE_PREFIX.$module_info['MainTable'].' - WHERE ResourceId = '.$resource_id; - $item_data[$resource_id] = $this->adodbConnection->GetRow($sql); - } - - return $item_data[$resource_id][$field_name]; - } - - function ParseObject($element) - { - global $objConfig, $objCatList, $rootURL, $objUsers, $objModules; - - $extra_attribs = ExtraAttributes($element->attributes); - - if(strtolower($element->name)==$this->TagPrefix) - { - $field = strtolower($element->attributes["_field"]); - switch($field) - { - case 'itemname': - $db=&GetADODBConnection(); - $module_info=$objModules->ExecuteFunction('GetModuleInfo','rel_list'); - $module_info=$module_info[$this->Get('Module')]; - $ret = $this->getMainItem($module_info, $module_info['ItemNameField']); - break; - - case 'itemlink': - $db=&GetADODBConnection(); - $module_info=$objModules->ExecuteFunction('GetModuleInfo','rel_list'); - $module_info=$module_info[$this->Get('Module')]; - $prefix = $this->Application->findModule('Name', $this->Get('Module'), 'Var'); - - $id = $this->getMainItem($module_info, $module_info['MainTable'].'Id'); - $GLOBALS[$prefix.'_var_list_update'][ $module_info['EnvIDField'] ]=$id; - - /*$env_unparsed=explode(':',$_REQUEST['env']); - m_ParseEnv($tmp[1]);*/ - - $url=rtrim(GetIndexUrl(2),'index.php'); - - $ret = $url.strtolower($this->Get('Module')).'/admin/'.$module_info['EditFile'].'?env='.BuildEnv(); - unset($GLOBALS[$prefix.'_var_list_update'][ $module_info['EnvIDField'] ]); - break; - - case "id": - /* - @field:review.id - @description: review id - */ - $ret = $this->Get("ReviewId"); - break; - case "item_id": - /* - @field:review.item_id - @description: ID of the item being reviewed - */ - $ret = $this->Get("ItemId"); - break; - case "text": - /* - @field:review.text - @description:Review text - */ - if($this->Get("TextFormat")==0 || $element->GetAttributeByName('_textonly') ) - { - $ret = inp_htmlize($this->Get("ReviewText")); - } - else - { - $ret = $this->Get("ReviewText"); - } - - $cut_first_chars=$element->GetAttributeByName('_CutFirst'); - if($cut_first_chars && strlen($ret)>$cut_first_chars) - { - $ret=substr($ret,0,$cut_first_chars).' ...'; - } - break; - case "ip": - /* - @field:review.ip - @description:IP address of remote host submitting the review - */ - $ret = $this->Get("IPAddress"); - break; - case "pending": - /* - @field:review.pending - @description: Returns the review pening status - */ - $ret = $this->Get("Pending"); - break; - case "item_type": - /* - @field:review.item_type - @description:Returns the name of the reviewed item type - */ - $type =& $objItemTypes->GetItem($this->Get("ItemType")); - if(is_object($type)) - $ret = $type->Get("ItemName"); - break; - case "date": - /* - @field:review.date - @description:Returns the date/time the review was created - @attrib:_tz:bool:Convert the date to the user's local time - @attrib:_part::Returns part of the date. The following options are available: month,day,year,time_24hr,time_12hr - */ - $d = $this->Get("CreatedOn"); - if($element->GetAttributeByName('_tz')) - { - $d = GetLocalTime($d,$objSession->Get("tz")); - } - - $part = strtolower( $element->GetAttributeByName('_part') ); - if(strlen($part)) - { - $ret = ExtractDatePart($part,$d); - } - else - { - if($d<=0) - { - $ret = ""; - } - else - $ret = LangDate($d); - } - break; - case "reviewer": - /* - @field:revier.reviewer - @description:Parse a user tag for the user submitting the review - @attrib:_usertag::User tag to parse, defaults to the users login name - */ - $userfield = $element->GetAttributeByName('_usertag'); - if(!strlen($userfield)) - { - $userfield = "login"; - } - if($this->Get("CreatedById")>0) - { - $u =& $objUsers->GetItem($this->Get("CreatedById")); - $e = new clsHtmlTag(); - $e->name = $u->TagPrefix; - $e->attributes = $element->attributes; - $e->attributes["_field"] = $userfield; - $ret = $u->ParseObject($e); - } - else - if($userfield=="login") - $ret = "root"; - break; - - case "admin_icon": - if( $element->GetAttributeByName('fulltag') ) - { - $ret = "StatusIcon()."\">"; - } - else - { - $ret = $this->StatusIcon(); - } - break; - - default: - $tag = $this->TagPrefix."_".$field; - $ret = "Undefined: ".$tag->name; - break; - } - } - else - { - $ret = $element->Execute(); - } - return $ret; - } - - function StatusIcon() - { - global $imagesURL; - $ret = $imagesURL.'/itemicons/'; - - switch($this->Get('Status')) - { - case STATUS_DISABLED: - $ret .= "icon16_review_disabled.gif"; - break; - case STATUS_PENDING: - $ret .= "icon16_review_pending.gif"; - break; - case STATUS_ACTIVE: - $ret .= "icon16_review.gif"; - break; - } - return $ret; - } - - function parsetag($tag) - { - global $objConfig, $objUsers, $objItemTypes; - if(is_object($tag)) - { - $tagname = $tag->name; - } - else - $tagname = $tag; - switch($tagname) - { - case "review_id": - return $this->Get("ReviewId"); - break; - case "review_item_id": - return $this->Get("ItemId"); - break; - case "review_text": - return $this->Get("ReviewText"); - break; - case "review_ip_address": - return $this->Get("IPAddress"); - break; - case "review_pending": - return $this->Get("Pending"); - break; - case "review_item_type": - $type =& $objItemTypes->GetItem($this->Get("ItemType")); - $res = $type->Get("ItemName"); - return $res; - break; - case "review_created_date": - return LangDate($this->Get('CreatedOn'), 0, true); - break; - - case "review_created_time": - if ($this->Get('CreatedOn') <= 0) { - return ''; - } - return LangTime($this->Get('CreatedOn'), 0, true); - break; - - case "review_created_date_month": - return adodb_date("m", $this->Get("CreatedOn")); - break; - case "review_created_date_day": - return adodb_date("d", $this->Get("CreatedOn")); - break; - case "review_created_date_year": - return adodb_date("Y", $this->Get("CreatedOn")); - break; - default: - if (substr($tagname, 0, 16) == "review_createdby") - { - /* parse the created by user */ - $u = $objUsers->GetUser($this->Get("CreatedById")); - $usertag = substr($tag,17); - return $u->parsetag($usertag); - } - else - return "Undefined:$tagname"; - break; - } - } - - function SendUserEventMail($Suffix,$ToUserId,$LangId=NULL) - { - global $objItemTypes, $objMessageList; - - $types = array( - 'In-Link' => 4, - 'In-Bulletin' => 3, - 'In-Commerce' => 11, - 'In-News' => 2, - ); - $type_id = $types[$this->Get('Module')]; - - $type =& $objItemTypes->GetItem($type_id); - $res = $type->Get("ItemName"); - $EventName = $res.$Suffix; - - $Event =& $objMessageList->GetEmailEventObject($EventName,0,$LangId); - if(is_object($Event)) - { - if($Event->Get("Enabled")=="1") - { - $Event->Item = $this; - return $Event->SendToUser($ToUserId); - } - } - } - - function SendAdminEventMail($EventName,$LangId=NULL) - { - global $objItemTypes, $objMessageList; - - $types = array( - 'In-Link' => 4, - 'In-Bulletin' => 3, - 'In-Commerce' => 11, - 'In-News' => 2, - ); - $type_id = $types[$this->Get('Module')]; - - $type =& $objItemTypes->GetItem($type_id); - - $res = $type->Get("ItemName"); - $EventName = $res; //.$Suffix; - - $Event =& $objMessageList->GetEmailEventObject($EventName,1,$LangId); - if(is_object($Event)) - { - if($Event->Get("Enabled")=="1") - { - $Event->Item = $this; - return $Event->SendAdmin($ToUserId); - } - } - } -} /*clsIItemReview*/ - -class clsItemReviewList extends clsItemList // clsItemCollection -{ - var $itemID; - //var $Page; - //var $PerPageVar; - - function clsItemReviewList($id=NULL) - { - global $objConfig; - $this->clsItemCollection(); - $this->classname = "clsItemReview"; - $this->SetTable('live',GetTablePrefix().'ItemReview'); - $this->Page = isset($_GET['lpn']) ? $_GET['lpn'] : 1; - $this->PerPageVar = 'Perpage_Reviews'; - $this->PerPage = $objConfig->Get($this->PerPageVar); - if(isset($id)) - $this->itemID=$id; - $this->AdminSearchFields = array("ReviewText"); - } - - function SaveNewPage() - { - $GLOBALS['m_var_list']['reviews_page']=$this->Page; - } - - function ItemCount() - { - return $this->NumItems(); - } - - function GetReview($ID) - { - return $this->GetItem($ID); - } - - function GetReviewList($StatusWhere = "Status=1", $OrderBy=NULL) - { - $this->Clear(); - $where = "ItemId=".$this->itemID; - $sql = "SELECT * FROM ".$this->SourceTable." WHERE "; - if(strlen($StatusWhere)) - $where .= " AND ".$StatusWhere; - $sql .= $where; - if(strlen($OrderBy)) - $sql .= " ORDER BY ".$OrderBy; - $Limit = $this->GetLimitSQL(); - if(strlen($Limit)) - $sql .= " ".$Limit; - $this->QueryItemCount=TableCount($this->SourceTable,$where,0); - return $this->Query_item($sql); - } - - function GetItemReviewCount($TodayOnly = false) - { - $sql = 'SELECT COUNT(*) FROM '.$this->SourceTable.' WHERE ItemId = '.$this->itemID.' AND Status = 1'; - if($TodayOnly) - { - $today = adodb_mktime(0,0,0,adodb_date('m'),adodb_date('d'),adodb_date('Y')); - $sql .= ' AND CreatedOn >= '.$today; - } - return (int)$this->adodbConnection->GetOne($sql); - } - - function ip_exists($ip,$id) - { - return ip_exists($ip,id,$this->SourceTable); - } - - function GetLimitSQL() - { - global $objConfig; - if($this->Page<1) - $this->Page=1; - $PerPage = $objConfig->Get($this->PerPageVar); - if(is_numeric($PerPage)) - { - $Start = ($this->Page-1)*$PerPage; - $limit = "LIMIT ".$Start.",".$PerPage; - } - else - $limit = NULL; - return $limit; - } - - - function Query_Review($whereClause=NULL,$orderByClause=NULL) - { - global $Errors; - - $this->Clear(); - $sql = "SELECT * FROM ".$this->SourceTable." "; - - if(isset($whereClause) && strlen(trim($whereClause))>0) - $sql = sprintf("%s WHERE %s",$sql,$whereClause); - - if(isset($orderByClause) && strlen(trim($orderByClause))>0) - $sql = sprintf("%s ORDER BY %s",$sql,$orderByClause); - - return $this->Query_Item($sql); - } - - function &AddReview($CreatedOn,$ReviewText, $Status, $IPAddress, - $Priority, $ItemId,$ItemType,$CreatedById,$TextFormat=0,$Module) - { - global $objSession; - - $r = new clsItemReview(NULL,$this->SourceTable); - - $ReviewText = str_replace("env=".$objSession->GetSessionKey(), "env=",$ReviewText); - //$r->debuglevel = 1; - - $r->Set(array("CreatedOn","ReviewText","Status", "IPAddress", - "Priority","ItemId","ItemType","CreatedById","TextFormat","Module"), - array($CreatedOn,$ReviewText,$Status, $IPAddress, - $Priority, $ItemId,$ItemType,$CreatedById,$TextFormat,$Module)); - $r->Create(); - array_push($this->Items,$r); - if($Status==1) - { - $r->SendUserEventMail("REVIEW.ADD",$CreatedById); - $r->SendAdminEventMail("REVIEW.ADD"); - } - else - { - $r->SendUserEventMail("REVIEW.ADD.PENDING",$CreatedById); - $r->SendAdminEventMail("REVIEW.ADD.PENDING"); - } - - return $r; - } - - function EditReview($ReviewId,$CreatedOn,$ReviewText, $Status, - $IPAddress, $Priority, $ItemId,$ItemType,$CreatedById,$TextFormat,$Module='') - { - global $objSession; - - $r = $this->GetItem($ReviewId); - if($CreatedById==0) - $CreatedById = $r->Get("CreatedById"); - $r->Set(array("ReviewId","CreatedOn","ReviewText","Status", - "IPAddress", "Priority", "ItemId","ItemType","CreatedById","TextFormat"), - array($ReviewId,$CreatedOn,$ReviewText,$Status, - $IPAddress, $Priority, $ItemId,$ItemType,$CreatedById,$TextFormat)); - if($Module) $r->Set('Module',$Module); - - $r->Update(); - //$r->SendUserEventMail("REVIEW.MODIFY",$objSession->Get("PortalUserId")); - $r->SendAdminEventMail("REVIEW.MODIFY"); - return $r; - } - - function DeleteReview($ReviewId) - { - $r = $this->GetItem($ReviewId); - $r->Delete(); - } - - function CopyToItemId($OldId,$NewId) - { - $this->Clear(); - $this->Query_Review("ItemId=$OldId",""); - if($this->NumItems()>0) - { - foreach($this->Items as $i) - { - $i->Set("ItemId",$NewId); - $i->UnsetIdField(); - $i->Create(); - } - } - } - - function CopyFromEditTable_Direct($idfield=null) - { - global $objSession; - $GLOBALS['_CopyFromEditTable']=1; - //echo "ToLive [Reviews]
"; - $edit_table = $objSession->GetEditTable($this->SourceTable); - $idlist = array(); - $sql = 'SELECT * FROM '.$edit_table; - $this->Clear(); - - // get all items in edit-table - $rs = $this->adodbConnection->Execute($sql); - while($rs && !$rs->EOF) - { - $data =& $rs->fields; - $c = $this->AddItemFromArray($data); - $c->Dirty(); - $c->Update(); - - $idlist[] = $c->Get("ReviewId"); - $rs->MoveNext(); - } - - //echo "DEL REVIEW SQL: $sql
"; - - $this->PurgeEditTable(); - - unset($GLOBALS['_CopyFromEditTable']); - } - - function CopyFromEditTable($ResourceId, $saveEditTable = false) - { - global $objSession; - $GLOBALS['_CopyFromEditTable']=1; - //echo "ToLive [Reviews]
"; - $edit_table = $objSession->GetEditTable($this->SourceTable); - $idlist = array(); - $sql = 'SELECT * FROM '.$edit_table.' WHERE ItemId = '.(int)$ResourceId; - $this->Clear(); - // get all items in edit-table - $rs = $this->adodbConnection->Execute($sql); - while($rs && !$rs->EOF) - { - $data =& $rs->fields; - - $c = $this->AddItemFromArray($data); - - $c->Dirty(); - if($data["ReviewId"]>0) - { - $c->Update(); - } - else - { - $c->UnsetIdField(); - $c->Create(); - } - $idlist[] = $c->Get("ReviewId"); - $rs->MoveNext(); - } - //print_pre($idlist); - $sql = "DELETE FROM ".$this->SourceTable." WHERE ItemId=$ResourceId ".(count($idlist) > 0 ? "AND ReviewId NOT IN (".implode(",",$idlist).")" : ""); - //echo "DEL REVIEW SQL: $sql
"; - $this->adodbConnection->Execute($sql); - - if(!$saveEditTable) $this->PurgeEditTable(); - - unset($GLOBALS['_CopyFromEditTable']); - } - - function PurgeEditTable($idfield = null) - { - $edit_table = $GLOBALS['objSession']->GetEditTable($this->SourceTable); - @$this->adodbConnection->Execute("DROP TABLE IF EXISTS ".$edit_table); - } - - - function GetPageLinkList(&$UpdateVar,$dest_template=NULL,$page = NULL,$PagesToList=10,$HideEmpty=TRUE) - { - global $objConfig, $var_list_update, $var_list; - -// if( !strlen($page) ) $page = GetIndexURL(2); - $PerPage = $objConfig->Get($this->PerPageVar); - if($PerPage<1) - $PerPage=20; - $NumPages = ceil($this->GetNumPages($PerPage)); - - if($NumPages==1 && $HideEmpty) - return ""; - - if(strlen($dest_template)) - { - $var_list_update["t"] = $dest_template; - } - else - $var_list_update["t"] = $var_list["t"]; - - $o = ""; - if($this->Page>$NumPages) - $this->Page=$NumPages; - - $StartPage = (int)$this->Page - ($PagesToList/2); - if($StartPage<1) - $StartPage=1; - - $EndPage = $StartPage+($PagesToList-1); - if($EndPage>$NumPages) - { - $EndPage = $NumPages; - $StartPage = $EndPage-($PagesToList-1); - if($StartPage<1) - $StartPage=1; - } - - $o = ""; - if($StartPage>1) - { - $UpdateVar["rp"] = $this->Page-$PagesToList; - $prev_url = HREF_Wrapper(); - $o .= "<<"; - } - - - for($p=$StartPage;$p<=$EndPage;$p++) - { - if($p!=$this->Page) - { - $UpdateVar["rp"]=$p; - $href = HREF_Wrapper(); - $o .= " $p "; - } - else - { - $o .= "$p"; - } - } - if($EndPage<$NumPages && $EndPage>0) - { - $UpdateVar["rp"]=$this->Page+$PagesToList; - $next_url = HREF_Wrapper(); - $o .= " >>"; - } - unset($UpdateVar,$var_list_update["t"] ); - return $o; - } - - function AdminPrintItems($template) - { - // prints item listing for admin (browse/advanced view) tabs - $o = ''; - - $i = 1; - - $topleft = 0; - $topright = 0; - $rightcount = 0; - $total_items = $this->NumItems(); - $topleft = ceil($total_items / 2); - $topright = $total_items - $topleft; - - for($x = 0; $x < $topleft; $x++) - { - //printingleft - $item = $this->Items[$x]; - if ($i > 2) - { - $o .= "\n"; - $i = 1; - } - $o .= $item->AdminParseTemplate($template); - $i++; - - //printingright - if ($rightcount < $topright && ( ($x + $topleft) < $total_items) ) - { - $item = $this->Items[ $x + $topleft ]; - if ($i > 2) - { - $o.="\n"; - $i = 1; - } - $o .= $item->AdminParseTemplate($template); - $i++; - $rightcount++; - } - } - $o .= "\n
\n"; - - return $o; - } - -} /*clsItemReviewList*/ - -?> \ No newline at end of file