Index: trunk/kernel/include/itemreview.php
===================================================================
diff -u -r534 -r642
--- trunk/kernel/include/itemreview.php (.../itemreview.php) (revision 534)
+++ trunk/kernel/include/itemreview.php (.../itemreview.php) (revision 642)
@@ -1,618 +1,618 @@
-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 ParseObject($element)
- {
- global $objConfig, $objCatList, $rootURL, $objUsers;
-
- $extra_attribs = ExtraAttributes($element->attributes);
-
- if(strtolower($element->name)==$this->TagPrefix)
- {
- $field = strtolower($element->attributes["_field"]);
- switch($field)
- {
- 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 = inp_unescape($this->Get("ItemId"));
- break;
- case "text":
- /*
- @field:review.text
- @description:Review text
- */
- if($this->Get("TextFormat")==0 || $element->attribues["_textonly"])
- {
- $ret = inp_escape($this->Get("ReviewText"),0);
- }
- else
- {
- $ret = $this->Get("ReviewText");
- }
- 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->attributes["_tz"])
- {
- $d = GetLocalTime($d,$objSession->Get("tz"));
- }
-
- $part = strtolower($element->attributes["_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->attributes["_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;
- default:
- $tag = $this->TagPrefix."_".$field;
- $ret = "Undefined: ".$tag->name;
- break;
- }
- }
- else
- {
- $ret = $element->Execute();
- }
- 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 inp_unescape($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"));
- break;
- case "review_created_time":
- if($this->Get("CreatedOn")<=0)
- return "";
- return adodb_date($objConfig->TimeFormat(), $this->Get("CreatedOn"));
- 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;
-
- $type =& $objItemTypes->GetItem($this->Get("ItemType"));
- $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;
-
- $type =& $objItemTypes->GetItem($this->Get("ItemType"));
- $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 clsItemCollection
-{
- var $itemID;
- var $Page;
- var $PerPageVar;
-
- function clsItemReviewList($id=NULL)
- {
- $this->clsItemCollection();
- $this->classname = "clsItemReview";
- $this->SourceTable = GetTablePrefix()."ItemReview";
- $this->Page = 1;
- $this->PerPageVar = "Perpage_Review";
- if(isset($id))
- $this->itemID=$id;
- $this->AdminSearchFields = array("ReviewText");
- }
-
- 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(*) as ItemCount FROM ".$this->SourceTable." WHERE ItemId=".$this->itemID." AND Status=1";
- if($TodayOnly)
- {
- $today = mktime(0,0,0,date("m"),date("d"),date("Y"));
- $where .= " AND CreatedOn>=$today";
- }
- $rs = $this->adodbConnection->execute($sql);
- $count=0;
- if($rs)
- $count = $rs->fields["ItemCount"];
- return (int)$count;
- }
-
- 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","Module"),
- array($ReviewId,$CreatedOn,$ReviewText,$Status,
- $IPAddress, $Priority, $ItemId,$ItemType,$CreatedById,$TextFormat,$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($ResourceId)
- {
- global $objSession;
- //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();
- 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);
- @$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();
- $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 = $page."?env=".BuildEnv();
- $o .= "<<";
- }
-
-
- for($p=$StartPage;$p<=$EndPage;$p++)
- {
- if($p!=$this->Page)
- {
- $UpdateVar["rp"]=$p;
- $href = $page."?env=".BuildEnv();
- $o .= " $p ";
- }
- else
- {
- $o .= "$p";
- }
- }
- if($EndPage<$NumPages && $EndPage>0)
- {
- $UpdateVar["rp"]=$this->Page+$PagesToList;
- $next_url = $page."?env=".BuildEnv();
- $o .= " >>";
- }
- unset($UpdateVar,$var_list_update["t"] );
- return $o;
- }
-
-
-} /*clsItemReviewList*/
-
-?>
+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 ParseObject($element)
+ {
+ global $objConfig, $objCatList, $rootURL, $objUsers;
+
+ $extra_attribs = ExtraAttributes($element->attributes);
+
+ if(strtolower($element->name)==$this->TagPrefix)
+ {
+ $field = strtolower($element->attributes["_field"]);
+ switch($field)
+ {
+ 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->attribues["_textonly"])
+ {
+ $ret = inp_htmlize($this->Get("ReviewText"));
+ }
+ else
+ {
+ $ret = $this->Get("ReviewText");
+ }
+ 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->attributes["_tz"])
+ {
+ $d = GetLocalTime($d,$objSession->Get("tz"));
+ }
+
+ $part = strtolower($element->attributes["_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->attributes["_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;
+ default:
+ $tag = $this->TagPrefix."_".$field;
+ $ret = "Undefined: ".$tag->name;
+ break;
+ }
+ }
+ else
+ {
+ $ret = $element->Execute();
+ }
+ 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"));
+ break;
+ case "review_created_time":
+ if($this->Get("CreatedOn")<=0)
+ return "";
+ return adodb_date($objConfig->TimeFormat(), $this->Get("CreatedOn"));
+ 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;
+
+ $type =& $objItemTypes->GetItem($this->Get("ItemType"));
+ $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;
+
+ $type =& $objItemTypes->GetItem($this->Get("ItemType"));
+ $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 clsItemCollection
+{
+ var $itemID;
+ var $Page;
+ var $PerPageVar;
+
+ function clsItemReviewList($id=NULL)
+ {
+ $this->clsItemCollection();
+ $this->classname = "clsItemReview";
+ $this->SourceTable = GetTablePrefix()."ItemReview";
+ $this->Page = 1;
+ $this->PerPageVar = "Perpage_Review";
+ if(isset($id))
+ $this->itemID=$id;
+ $this->AdminSearchFields = array("ReviewText");
+ }
+
+ 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(*) as ItemCount FROM ".$this->SourceTable." WHERE ItemId=".$this->itemID." AND Status=1";
+ if($TodayOnly)
+ {
+ $today = mktime(0,0,0,date("m"),date("d"),date("Y"));
+ $where .= " AND CreatedOn>=$today";
+ }
+ $rs = $this->adodbConnection->execute($sql);
+ $count=0;
+ if($rs)
+ $count = $rs->fields["ItemCount"];
+ return (int)$count;
+ }
+
+ 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","Module"),
+ array($ReviewId,$CreatedOn,$ReviewText,$Status,
+ $IPAddress, $Priority, $ItemId,$ItemType,$CreatedById,$TextFormat,$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($ResourceId)
+ {
+ global $objSession;
+ //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();
+ 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);
+ @$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();
+ $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 = $page."?env=".BuildEnv();
+ $o .= "<<";
+ }
+
+
+ for($p=$StartPage;$p<=$EndPage;$p++)
+ {
+ if($p!=$this->Page)
+ {
+ $UpdateVar["rp"]=$p;
+ $href = $page."?env=".BuildEnv();
+ $o .= " $p ";
+ }
+ else
+ {
+ $o .= "$p";
+ }
+ }
+ if($EndPage<$NumPages && $EndPage>0)
+ {
+ $UpdateVar["rp"]=$this->Page+$PagesToList;
+ $next_url = $page."?env=".BuildEnv();
+ $o .= " >>";
+ }
+ unset($UpdateVar,$var_list_update["t"] );
+ return $o;
+ }
+
+
+} /*clsItemReviewList*/
+
+?>