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 = '