Page Menu
Home
In-Portal Phabricator
Search
Configure Global Search
Log In
Files
F804428
item.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Wed, Feb 26, 10:54 AM
Size
25 KB
Mime Type
text/x-php
Expires
Fri, Feb 28, 10:54 AM (18 h, 25 m)
Engine
blob
Format
Raw Data
Handle
576977
Attached To
rINP In-Portal
item.php
View Options
<?php
require_once
(
$pathtoroot
.
"kernel/include/itemreview.php"
);
require_once
(
$pathtoroot
.
"kernel/include/itemrating.php"
);
class
clsItem
extends
clsParsedItem
{
var
$type
;
var
$Reviews
;
var
$Related
;
var
$Images
;
var
$PrimaryCat
;
var
$IsNew
=
FALSE
;
var
$IsHot
=
FALSE
;
var
$IsPop
=
FALSE
;
var
$Keywords
;
var
$OpenTagVar
;
var
$CloseTagVar
;
var
$AdminParser
;
var
$CustomFields
;
var
$FieldClass
;
var
$CustomLoaded
=
0
;
var
$ReviewSortOrder
;
var
$ReviewPerPageVar
;
function
clsItem
(
$FullItem
=
FALSE
)
{
$this
->
clsParsedItem
();
if
(
$FullItem
==
TRUE
)
{
$this
->
Reviews
=
new
clsItemReviewList
();
$this
->
Related
=
new
clsRelationshipList
();
}
$this
->
Images
=
new
clsImageList
();
$this
->
CustomFields
=
array
();
$this
->
FieldClass
=
new
clsCustomFieldList
();
}
function
ClearCacheData
()
{
}
/* item reviews */
function
&
GetItemReviews
(
$Page
=
1
)
{
$res_id
=
$this
->
Get
(
"ResourceId"
);
$this
->
Reviews
->
itemID
=
$res_id
;
$this
->
Reviews
->
PerPageVar
=
$this
->
ReviewPerPageVar
;
$this
->
Reviews
->
Page
=
$Page
;
$this
->
Reviews
->
GetReviewList
(
"Status=1"
,
$this
->
ReviewSortOrder
);
return
$this
->
Reviews
;
}
function
ReviewCount
(
$TodayOnly
=
FALSE
)
{
if
(
is_numeric
(
$this
->
Get
(
"CachedReviewsQty"
))
&&
!
$TodayOnly
)
return
(
int
)
$this
->
Get
(
"CachedReviewsQty"
);
$this
->
Reviews
->
itemID
=
$this
->
Get
(
"ResourceId"
);
return
(
int
)
$this
->
Reviews
->
GetItemReviewCount
(
$TodayOnly
);
}
function
ReviewsLoaded
()
{
if
(
$this
->
Reviews
->
itemID
==
$this
->
Get
(
"ResourceId"
))
{
return
$this
->
Reviews
->
ItemCount
();
}
else
return
0
;
}
function
&
AddReview
(
$createdBy
,
$reviewText
,
$isPending
,
$ip
=
NULL
,
$ForceIP
=
0
,
$Module
=
""
)
{
$this
->
Reviews
->
itemID
=
$this
->
Get
(
"ResourceId"
);
if
(
$ip
==
NULL
)
$ip
=
$_SERVER
[
"REMOTE_ADDR"
];
$CreatedOn
=
mktime
(
0
,
0
,
0
,
adodb_date
(
"m"
),
adodb_date
(
"d"
),
adodb_date
(
"Y"
));
$Status
=
1
;
if
(
$isPending
)
$Status
=
2
;
$AutoModule
=
GetModuleByAction
();
// determine module name by action
if
(
$Module
&&
(
$AutoModule
!=
$Module
)
)
$AutoModule
=
$Module
;
$r
=
$this
->
Reviews
->
AddReview
(
$CreatedOn
,
$reviewText
,
$Status
,
$ip
,
0
,
$this
->
Get
(
"ResourceId"
),
$this
->
type
,
$createdBy
,
0
,
$AutoModule
);
$this
->
Increment
(
"CachedReviewsQty"
);
return
$r
;
}
function
ReviewIPExists
(
$ip
)
{
return
ip_exists
(
$ip
,
$this
->
Get
(
"ResourceId"
),
$this
->
Reviews
->
SourceTable
);
}
function
DeleteReview
(
$reviewID
)
{
$r
=
$this
->
Reviews
->
GetReview
(
$reviewID
);
if
(
is_object
(
$r
))
{
$r
->
Delete
();
$this
->
Decrement
(
"CachedReviewsQty"
);
}
}
function
DeleteReviews
()
{
$res_id
=
$this
->
Get
(
"ResourceId"
);
if
(
$res_id
)
{
$sql
=
"DELETE FROM "
.
GetTablePrefix
().
"ItemReview WHERE ResourceId=$res_id"
;
$this
->
adodbConnection
->
Execute
(
$sql
);
unset
(
$this
->
Reviews
);
$this
->
Reviews
=
new
clsItemReviewList
(
$res_id
);
}
}
/* item custom fields */
function
LoadCustomFields
()
{
if
(!
$this
->
CustomLoaded
&&
$this
->
Get
(
"ResourceId"
)>
0
)
{
$this
->
FieldClass
=
new
clsCustomFieldList
();
$this
->
FieldClass
->
Type
=
$this
->
type
;
$this
->
FieldClass
->
LoadFieldsAndValues
(
$this
->
Get
(
"ResourceId"
));
foreach
(
$this
->
FieldClass
->
Items
as
$f
)
{
$this
->
CustomFields
[
$f
->
Get
(
"FieldName"
)]
=
$f
->
HasField
(
'Value'
)
?
$f
->
Get
(
'Value'
)
:
''
;
}
$this
->
CustomLoaded
=
1
;
}
}
function
SetCustomField
(
$fieldname
,
$value
)
{
// echo "Setting CF [<b>$fieldname</b>] = [$value]<br>";
if
(!
$this
->
CustomLoaded
)
$this
->
LoadCustomFields
();
$this
->
CustomFields
[
$fieldname
]
=
$value
;
}
function
SaveCustomFields
()
{
//echo "Saving CFs<br>";
if
(!(
int
)
$this
->
Get
(
"ResourceId"
))
return
TRUE
;
if
(!
$this
->
CustomLoaded
)
return
TRUE
;
$data
=
new
clsCustomDataList
();
$data
->
LoadResource
(
$this
->
Get
(
"ResourceId"
));
foreach
(
$this
->
FieldClass
->
Items
as
$f
)
{
$value
=
$this
->
CustomFields
[
$f
->
Get
(
"FieldName"
)];
$data
->
SetFieldValue
(
$f
->
Get
(
"CustomFieldId"
),
$this
->
Get
(
"ResourceId"
),
$value
);
}
$data
->
SaveData
();
unset
(
$data
);
}
function
GetCustomFieldValue
(
$fieldname
,
$default
=
""
)
{
if
(!
$this
->
CustomLoaded
)
$this
->
LoadCustomFields
();
if
(
isset
(
$this
->
CustomFields
[
$fieldname
]))
{
$ret
=
$this
->
CustomFields
[
$fieldname
];
}
else
$ret
=
$default
;
return
$ret
;
}
function
DeleteCustomData
()
{
$cdata
=
new
clsCustomDataList
();
$cdata
->
DeleteResource
(
$this
->
Get
(
"ResourceId"
));
}
function
Delete
(
$RecordOnly
=
FALSE
)
{
global
$objFavorites
;
if
(
$RecordOnly
==
FALSE
)
{
$this
->
DeleteReviews
();
$this
->
DeleteRelations
();
$this
->
DeleteCustomData
();
if
(
$this
->
NoResourceId
==
0
)
{
if
(
$this
->
UsingTempTable
()==
FALSE
)
{
if
(
is_object
(
$this
->
Images
))
$this
->
Images
->
DeleteResource
(
$this
->
Get
(
"ResourceId"
));
$objFavorites
->
DeleteItem
(
$this
->
Get
(
"ResourceId"
));
}
}
}
parent
::
Delete
();
}
/* item relationships */
function
GetRelatedItems
()
{
global
$objConfig
;
$where
=
"SourceId = "
.
$this
->
Get
(
"ResourceId"
);
$where
.=
" OR (TargetId="
.
$this
->
Get
(
"ResourceId"
).
" AND Type=1)"
;
$orderBy
=
$objConfig
->
Get
(
"Relation_Sortfield"
).
" "
.
$objConfig
->
Get
(
"Relation_Sortorder"
);
$orderBy
=
trim
(
$orderBy
);
$this
->
Related
->
Clear
();
$res
=
$this
->
Related
->
LoadRelated
(
$where
,
$orderBy
);
return
$res
;
}
function
&
RelationObject
()
{
return
$this
->
Related
;
}
function
DeleteRelations
()
{
$res_id
=
$this
->
Get
(
"ResourceId"
);
if
(
$res_id
)
{
$sql
=
"DELETE FROM "
.
GetTablePrefix
().
"Relationship WHERE SourceId=$res_id OR TargetId=$res_id"
;
$this
->
adodbConnection
->
Execute
(
$sql
);
unset
(
$this
->
Reviews
);
$this
->
Related
=
new
clsRelationshipList
(
$res_id
);
}
}
/* keyword highlighting for searches */
function
HighlightField
(
$field
)
{
global
$objConfig
;
if
(
/*!strlen($OpenTag) || !strlen($CloseTag) ||*/
!
is_array
(
$this
->
Keywords
))
{
//echo "Missing something<br>\n";
return
$this
->
Get
(
$field
);
}
if
(
strlen
(
$this
->
OpenTagVar
))
$OpenTag
=
$objConfig
->
Get
(
$this
->
OpenTagVar
);
if
(
strlen
(
$this
->
CloseTagVar
))
$CloseTag
=
$objConfig
->
Get
(
$this
->
CloseTagVar
);
$k
=
array_merge
(
$this
->
Keywords
[
"required"
],
$this
->
Keywords
[
"normal"
]);
if
(
count
(
$k
))
{
$result
=
HighlightKeywords
(
$k
,
$this
->
Get
(
$field
),
$OpenTag
,
$CloseTag
);
}
else
{
$result
=
$this
->
Get
(
$field
);
//echo "No Keywords<br>\n";
}
return
$result
;
}
function
HighlightText
(
$text
)
{
global
$objConfig
;
if
(
strlen
(
$this
->
OpenTagVar
))
$OpenTag
=
$objConfig
->
Get
(
$this
->
OpenTagVar
);
if
(
strlen
(
$this
->
CloseTagVar
))
$CloseTag
=
$objConfig
->
Get
(
$this
->
CloseTagVar
);
if
(!
strlen
(
$OpenTag
)
||
!
strlen
(
$CloseTag
)
||
!
is_array
(
$this
->
Keywords
))
return
$text
;
$k
=
array_merge
(
$this
->
Keywords
[
"required"
],
$this
->
Keywords
[
"normal"
]);
if
(
count
(
$k
))
{
$result
=
HighlightKeywords
(
$k
,
$text
,
$OpenTag
,
$CloseTag
);
}
else
$result
=
$text
;
return
$result
;
}
/* item status functions */
function
Is
(
$name
)
{
$var
=
"m_"
.
$name
;
return
(
isset
(
$this
->
$var
)
&&
$this
->
$var
)
?
true
:
false
;
}
function
IsHotItem
()
{
switch
(
$this
->
Get
(
"HotItem"
))
{
case
ALWAYS
:
return
TRUE
;
break
;
case
NEVER
:
return
FALSE
;
break
;
case
AUTO
:
return
$this
->
IsHot
;
break
;
}
}
function
SetHotItem
()
{
$this
->
IsHot
=
FALSE
;
}
function
IsNewItem
()
{
switch
(
$this
->
Get
(
"NewItem"
))
{
case
ALWAYS
:
return
TRUE
;
break
;
case
NEVER
:
return
FALSE
;
break
;
case
AUTO
:
return
$this
->
IsNew
;
break
;
}
}
function
SetNewItem
()
{
$this
->
IsNew
=
FALSE
;
}
function
IsPopItem
()
{
switch
(
$this
->
Get
(
"PopItem"
))
{
case
ALWAYS
:
return
TRUE
;
break
;
case
NEVER
:
return
FALSE
;
break
;
case
AUTO
:
return
$this
->
IsPop
;
break
;
}
}
function
SetPopItem
()
{
$this
->
IsPop
=
FALSE
;
}
function
SetFromArray
(
$data
,
$dirty
=
false
)
{
parent
::
SetFromArray
(
$data
,
$dirty
);
if
(
is_array
(
$data
))
{
if
(
array_key_exists
(
"NewItem"
,
$data
))
{
$this
->
SetNewItem
();
}
if
(
array_key_exists
(
"HotItem"
,
$data
))
{
$this
->
SetHotItem
();
}
if
(
array_key_exists
(
"PopItem"
,
$data
))
{
$this
->
SetPopItem
();
}
}
}
function
Validate
()
{
/* skeleton*/
return
true
;
}
function
LoadFromDatabase
(
$Id
,
$IdField
=
null
)
// custom IdField by Alex)
{
/* skeleton */
parent
::
LoadFromDatabase
(
$Id
,
$IdField
);
}
//Changes priority
function
MoveDown
()
{
$this
->
Decrement
(
"Priority"
);
}
function
MoveUp
()
{
$this
->
Increment
(
"Priority"
);
}
function
CheckPermission
(
$permissionName
)
{
//Check permission and if needs approval set approval
global
$objSession
,
$objCatList
;
$perm
=
$this
->
BasePermission
;
if
(
strlen
(
$perm
)>
0
)
$perm
.=
"."
;
$perm
.=
$permissionName
;
//get an instance of the forum category
$cat
=&
$objCatList
->
GetCategory
(
$this
->
Get
(
"CategoryId"
));
if
(!
is_object
(
$cat
))
{
return
FALSE
;
}
else
{
return
(
$cat
->
HasPermission
(
$perm
,
$objSession
->
Get
(
"GroupId"
)));
}
}
function
SubmitVote
(
$voteRating
,
$voteNotes
)
{
global
$Errors
;
global
$REMOTE_ADDR
;
if
(
$this
->
rating_ip_exists
(
$REMOTE_ADDR
))
{
// $Errors->AddError("error.already_voted","","","",get_class($this),"SubmitVote");
return
false
;
}
$vote
=
new
clsItemRating
(
NULL
);
$vote
->
Set
(
"ItemId"
,
$this
->
UniqueId
());
$vote
->
Set
(
"RatingValue"
,
$voteRating
);
if
(!
$vote
->
Create
())
return
false
;
$NumVotes
=
(
int
)
$this
->
Get
(
"CachedVotesQty"
);
$CurrentRating
=
(
int
)
$this
->
Get
(
"CachedRating"
);
$Rating
=
((
$NumVotes
*
$CurrentRating
)
+
$voteRating
)/(
$NumVotes
+
1
);
$this
->
Set
(
"CachedRating"
,
$Rating
);
$this
->
Update
();
$this
->
Increment
(
"CachedVotesQty"
);
}
function
rating_ip_exists
(
$ip
)
{
$count
=
0
;
$id
=
$this
->
Get
(
"ResourceId"
);
$sql
=
"SELECT count(*) as DupCount FROM ItemRating WHERE IPAddress='$ip' and ItemId=$id"
;
$adodbConnection
=
GetADODBConnection
();
$rs
=
$adodbConnection
->
Execute
(
$sql
);
if
(
$rs
)
{
$count
=
$rs
->
fields
[
"DupCount"
];
}
return
(
$count
>
0
);
//return FALSE;
}
function
PurgeRatings
()
{
global
$objConfig
;
$expired
=
time
()-
86400
*
$objConfig
->
Get
(
"Timeout_Rating"
);
$query
=
"DELETE FROM ItemRating WHERE CreatedOn<$expired"
;
$this
->
adodbConnection
->
Execute
(
$query
);
}
function
GetThumbnailImage
()
{
if
(
$this
->
Images
->
NumItems
()==
0
)
$this
->
Images
->
GetResourceImages
(
$this
->
Get
(
"ResourceId"
));
return
$this
->
Images
->
GetResourceThumbnail
(
$this
->
Get
(
"ResourceId"
));
}
function
GetImage
(
$number
)
{
return
$this
->
Images
->
GetImageByResource
(
$this
->
Get
(
"ResourceId"
),
$number
);
}
function
GetImageByName
(
$name
)
{
if
(!
is_object
(
$this
->
Images
))
$this
->
Images
=
new
clsImageList
();
return
$this
->
Images
->
GetImageByName
(
$this
->
Get
(
"ResourceId"
),
$name
);
}
function
&
GetDefaultImage
()
{
return
$this
->
Images
->
GetDefaultImage
(
$this
->
Get
(
"ResourceId"
));
}
function
CreatePendingCopy
()
{
$OrgId
=
$this
->
IdField
();
$this
->
Dirty
();
$this
->
Set
(
"OrgId"
,
$OrgId
);
$this
->
UnsetIdField
();
$this
->
Set
(
"ResourceId"
,
0
);
$this
->
Set
(
"Status"
,-
2
);
$this
->
Create
();
}
function
AddFavorite
(
$PortalUserId
=
NULL
)
{
global
$objSession
,
$objFavorites
;
$res
=
FALSE
;
if
(
$objSession
->
HasCatPermission
(
"FAVORITES"
))
{
if
(!
$PortalUserId
)
$PortalUserId
=
$objSession
->
Get
(
"PortalUserId"
);
if
(
$PortalUserId
==
$objSession
->
Get
(
"PortalUserId"
)
||
$objSession
->
HasSystemPermission
(
"ADMIN"
))
{
$objFavorites
->
AddFavorite
(
$PortalUserId
,
$this
->
Get
(
"ResourceId"
),
$this
->
type
);
$res
=
TRUE
;
}
}
return
$res
;
}
function
DeleteFavorite
(
$PortalUserId
=
NULL
)
{
global
$objSession
,
$objFavorites
;
$res
=
FALSE
;
if
(
$objSession
->
HasCatPermission
(
"FAVORITES"
))
{
if
(!
$PortalUserId
)
$PortalUserId
=
$objSession
->
Get
(
"PortalUserId"
);
//echo $PortalUserId." ".$objSession->Get("PortalUserId");
if
(
$PortalUserId
==
$objSession
->
Get
(
"PortalUserId"
)
||
$objSession
->
HasSystemPermission
(
"ADMIN"
))
{
$objFavorites
->
DeleteFavorite
(
$PortalUserId
,
$this
->
Get
(
"ResourceId"
));
$res
=
TRUE
;
}
}
return
$res
;
}
function
IsFavorite
(
$PortalUserId
=
NULL
)
{
global
$objSession
,
$objFavorites
;
$res
=
FALSE
;
if
(
$objSession
->
HasCatPermission
(
"FAVORITES"
))
{
if
(!
$PortalUserId
)
$PortalUserId
=
$objSession
->
Get
(
"PortalUserId"
);
if
(
$PortalUserId
==
$objSession
->
Get
(
"PortalUserId"
)
||
$objSession
->
HasSystemPermission
(
"ADMIN"
))
{
$i
=
$objFavorites
->
GetFavoriteObject
(
$PortalUserId
,
$this
->
Get
(
"ResourceId"
));
if
(
is_object
(
$i
))
{
$res
=
TRUE
;
}
else
$res
=
FALSE
;
}
}
return
$res
;
}
function
CheckBanned
()
{
global
$objBanList
;
$objBanList
->
LoadItemRules
(
$this
->
type
);
$found
=
FALSE
;
$MatchedRule
=
0
;
foreach
(
$objBanList
->
Items
as
$b
)
{
$field
=
$b
->
Get
(
"ItemField"
);
if
(
$this
->
FieldExists
(
$field
))
{
$ThisValue
=
strtolower
(
$this
->
Get
(
$field
));
$TestValue
=
strtolower
(
$b
->
Get
(
"ItemValue"
));
switch
(
$b
->
Get
(
"ItemVerb"
))
{
case
0
:
/* any */
$found
=
TRUE
;
break
;
case
1
:
/* is */
if
(
$ThisValue
==
$TestValue
)
$found
=
TRUE
;
break
;
case
2
:
/* is not */
if
(
$ThisValue
!=
$TestValue
)
$found
=
TRUE
;
break
;
case
3
:
/* contains */
if
(
strstr
(
$ThisValue
,
$TestValue
))
$found
=
TRUE
;
break
;
case
4
:
/* not contains */
if
(!
strstr
(
$ThisValue
,
$TestValue
))
$found
=
TRUE
;
break
;
case
5
:
/* Greater Than */
if
(
$TestValue
>
$ThisValue
)
$found
=
TRUE
;
break
;
case
6
:
/* Less Than */
if
(
$TestValue
<
$ThisValue
)
$found
=
TRUE
;
break
;
case
7
:
/* exists */
if
(
strlen
(
$ThisValue
)>
0
)
$found
=
TRUE
;
break
;
case
8
:
/* unique */
if
(
$this
->
ValueExists
(
$field
,
$ThisValue
))
$found
=
TRUE
;
break
;
}
}
if
(
$found
)
{
if
(
$b
->
Get
(
"RuleType"
)==
0
)
{
$MatchedRule
=
$b
->
Get
(
"RuleId"
);
}
else
{
$MatchedRule
=
0
;
}
break
;
}
}
return
$MatchedRule
;
}
}
/* clsItem */
class
clsCatItem
extends
clsItem
{
function
clsCatItem
(
$FullItem
=
FALSE
)
{
$this
->
clsItem
(
$FullItem
);
}
function
Delete
(
$RecordOnly
=
FALSE
)
{
global
$objFavorites
;
parent
::
Delete
(
$RecordOnly
);
if
(
$RecordOnly
==
FALSE
)
{
$this
->
RemoveFromAllCategories
();
}
}
/* category membership functions */
function
AssignPrimaryCategory
(
$SourceTable
)
{
$catid
=
0
;
$sql
=
"SELECT * FROM $SourceTable WHERE ItemResourceId="
.
$this
->
Get
(
"ResourceId"
).
" LIMIT 1"
;
$rs
=
$this
->
adodbConnection
->
Execute
(
$sql
);
if
(
$rs
&&
!
$rs
->
EOF
)
{
$catid
=
$rs
->
fields
[
"CategoryId"
];
$this
->
SetPrimaryCategory
(
$catid
,
$SourceTable
);
}
return
$catid
;
}
function
GetPrimaryCategory
(
$SourceTable
=
""
)
{
if
(
is_numeric
(
$this
->
PrimaryCat
))
return
$this
->
PrimaryCat
;
$this
->
PrimaryCat
=
""
;
if
(
strlen
(
$SourceTable
)
==
0
)
$SourceTable
=
GetTablePrefix
().
"CategoryItems"
;
$res_id
=
$this
->
HasField
(
'ResourceId'
)
?
$this
->
Get
(
'ResourceId'
)
:
0
;
$sql
=
"SELECT * FROM $SourceTable WHERE ItemResourceId="
.
$res_id
.
" AND PrimaryCat=1"
;
$rs
=
$this
->
adodbConnection
->
Execute
(
$sql
);
if
(
$rs
&&
!
$rs
->
EOF
)
{
$this
->
PrimaryCat
=
$rs
->
fields
[
"CategoryId"
];
return
$this
->
PrimaryCat
;
}
else
{
$this
->
AssignPrimaryCategory
(
$SourceTable
);
return
$this
->
PrimaryCat
;
}
}
function
SetPrimaryCategory
(
$CategoryId
,
$SourceTable
=
""
)
{
if
(
strlen
(
$SourceTable
)==
0
)
$SourceTable
=
GetTablePrefix
().
"CategoryItems"
;
$rs
=
$this
->
adodbConnection
->
Execute
(
'SELECT * FROM '
.
$SourceTable
.
' WHERE CategoryId='
.
$CategoryId
.
' AND ItemResourceId='
.
$this
->
Get
(
"ResourceId"
));
$this
->
adodbConnection
->
Execute
(
"UPDATE $SourceTable SET PrimaryCat=0 WHERE ItemResourceId="
.
$this
->
Get
(
"ResourceId"
));
$this
->
adodbConnection
->
Execute
(
"UPDATE $SourceTable SET PrimaryCat=1 WHERE CategoryId=$CategoryId AND ItemResourceId="
.
$this
->
Get
(
"ResourceId"
));
$this
->
PrimaryCat
=
$CategoryId
;
}
function
CategoryMemberCount
(
$SourceTable
=
""
)
{
if
(
strlen
(
$SourceTable
)==
0
)
$SourceTable
=
GetTablePrefix
().
"CategoryItems"
;
$sql
=
"SELECT count(*) as CatCount FROM $SourceTable WHERE ItemResourceId="
.
$this
->
Get
(
"ResourceId"
);
if
(
$this
->
debuglevel
)
echo
$sql
.
"<br>
\n
"
;
$rs
=
$this
->
adodbConnection
->
Execute
(
$sql
);
$count
=
0
;
if
(
$rs
&&
!
$rs
->
EOF
)
$count
=
$rs
->
fields
[
"CatCount"
];
return
$count
;
}
function
CategoryMemberList
(
$SourceTable
=
""
)
{
$cats
=
array
();
if
(
strlen
(
$SourceTable
)==
0
)
$SourceTable
=
GetTablePrefix
().
"CategoryItems"
;
$sql
=
"SELECT * FROM $SourceTable WHERE ItemResourceId="
.
$this
->
Get
(
"ResourceId"
);
if
(
$this
->
debuglevel
)
echo
$sql
.
"<br>
\n
"
;
$rs
=
$this
->
adodbConnection
->
Execute
(
$sql
);
while
(
$rs
&&
!
$rs
->
EOF
)
{
$cats
[]
=
$rs
->
fields
[
"CategoryId"
];
$rs
->
MoveNext
();
}
$catlist
=
implode
(
","
,
$cats
);
return
$catlist
;
}
function
AddToCategory
(
$CatId
,
$SourceTable
=
""
,
$PrimaryValue
=
NULL
)
{
global
$objSession
,
$objCatList
;
if
(!
$SourceTable
)
$SourceTable
=
GetTablePrefix
().
"CategoryItems"
;
if
(
$this
->
type
>
0
)
{
$Primary
=
0
;
if
(
is_numeric
(
$PrimaryValue
))
{
$Primary
=
$PrimaryValue
;
if
(
$Primary
==
1
)
$this
->
PrimaryCat
=
$CatId
;
}
else
{
if
(!
is_numeric
(
$this
->
GetPrimaryCategory
()))
{
$Primary
=
1
;
$this
->
PrimaryCat
=
$CatId
;
}
}
// check if not exists
$db
=&
$this
->
adodbConnection
;
$sql
=
sprintf
(
'SELECT * FROM %s WHERE CategoryId = %s AND ItemResourceId = %s'
,
$SourceTable
,
$CatId
,
$this
->
Get
(
"ResourceId"
));
$rs
=
$db
->
Execute
(
$sql
);
if
(
$rs
->
RecordCount
()
==
0
)
{
$sql
=
"INSERT INTO $SourceTable (CategoryId,ItemResourceId, PrimaryCat) VALUES ('$CatId','"
.
$this
->
Get
(
"ResourceId"
).
"',$Primary)"
;
if
(
$this
->
debuglevel
)
echo
$sql
.
"<br>
\n
"
;
$this
->
adodbConnection
->
Execute
(
$sql
);
}
$c
=
$objCatList
->
GetCategory
(
$CatId
);
}
}
function
RemoveFromCategory
(
$CatId
,
$SourceTable
=
""
,
$Force
=
0
)
{
global
$objSession
,
$objCatList
;
if
(
strlen
(
$SourceTable
)==
0
)
$SourceTable
=
GetTablePrefix
().
"CategoryItems"
;
if
(
$this
->
type
>
0
)
{
$primary
=
$this
->
GetPrimaryCategory
();
if
((
$primary
==
$CatId
&&
$this
->
CategoryMemberCount
(
$SourceTable
)>
1
)
||
(
$primary
!=
$CatId
)
||
$Force
)
{
$sql
=
"DELETE FROM $SourceTable WHERE CategoryId=$CatId AND ItemResourceId="
.
$this
->
Get
(
"ResourceId"
);
if
(
$objSession
->
HasSystemPermission
(
"DEBUG.LIST"
))
echo
$sql
.
"<br>
\n
"
;
$this
->
adodbConnection
->
Execute
(
$sql
);
$c
=
$objCatList
->
GetCategory
(
$CatId
);
$c
->
ClearCacheData
();
}
}
}
function
MoveToCategory
(
$OldCatId
,
$NewCatId
,
$SourceTable
=
""
)
{
if
(
strlen
(
$SourceTable
)==
0
)
$SourceTable
=
GetTablePrefix
().
"CategoryItems"
;
$sql
=
"UPDATE $SourceTable SET CategoryId=$NewCatId WHERE CategoryId=$OldCatId AND ItemResourceId="
.
$this
->
Get
(
"ResourceId"
);
if
(
$this
->
debuglevel
)
echo
$sql
.
"<br>
\n
"
;
$this
->
adodbConnection
->
Execute
(
$sql
);
}
function
DeleteCategoryItems
(
$CatId
,
$SourceTable
=
""
)
{
if
(
strlen
(
$SourceTable
)==
0
)
$SourceTable
=
GetTablePrefix
().
"CategoryItems"
;
$CatCount
=
$this
->
CategoryMemberCount
(
$SourceTable
);
if
(
$CatCount
>
1
)
{
$this
->
RemoveFromCategory
(
$CatId
,
$SourceTable
);
$this
->
ClearCacheData
();
}
else
{
$this
->
Delete
();
$sql
=
"DELETE FROM $SourceTable WHERE CategoryId=$CatId AND ItemResourceId="
.
$this
->
Get
(
"ResourceId"
);
if
(
$this
->
debuglevel
)
echo
$sql
.
"<br>
\n
"
;
$this
->
adodbConnection
->
Execute
(
$sql
);
}
}
function
RemoveFromAllCategories
(
$SourceTable
=
""
)
{
if
(
strlen
(
$SourceTable
)==
0
)
$SourceTable
=
GetTablePrefix
().
"CategoryItems"
;
if
(
$this
->
type
>
0
)
{
$sql
=
"SELECT * FROM $SourceTable WHERE ResourceId="
.
$this
->
Get
(
"ResourceId"
);
$rs
=
$this
->
adodbConnection
->
Execute
(
$sql
);
while
(
$rs
&&
!
$rs
->
EOF
)
{
$CategoryId
=
$rs
->
fields
[
"CategoryId"
];
$rs
->
MoveNext
();
}
$sql
=
"DELETE FROM $SourceTable WHERE ResourceId="
.
$this
->
Get
(
"ResourceId"
);
if
(
$this
->
debuglevel
)
echo
$sql
.
"<br>
\n
"
;
$this
->
adodbConnection
->
Execute
(
$sql
);
}
}
function
CopyToNewResource
(
$TargetCat
=
NULL
,
$NameField
=
"Name"
)
{
global
$objSession
;
$CatList
=
$this
->
CategoryMemberList
();
$Cats
=
explode
(
","
,
$CatList
);
//echo "Target: $TargetCat<br>";
$OldId
=
$this
->
Get
(
"ResourceId"
);
$this
->
UnsetIdField
();
$this
->
Dirty
();
if
(!
is_numeric
(
$this
->
Get
(
"OrgId"
)))
$this
->
UnsetField
(
"OrgId"
);
$this
->
UnsetField
(
"ResourceId"
);
if
(
is_numeric
(
$TargetCat
)
&&
strlen
(
$NameField
))
{
$OldName
=
$this
->
Get
(
$NameField
);
if
(
substr
(
$OldName
,
0
,
5
)==
"Copy "
)
{
$parts
=
explode
(
" "
,
$OldName
,
4
);
if
(
$parts
[
2
]==
"of"
&&
is_numeric
(
$parts
[
1
]))
{
$Name
=
$parts
[
3
];
}
else
if
(
$parts
[
1
]==
"of"
)
{
$Name
=
$parts
[
2
].
" "
.
$parts
[
3
];
}
else
$Name
=
$OldName
;
}
else
$Name
=
$OldName
;
$Names
=
CategoryItemNameCount
(
$TargetCat
,
$this
->
tablename
,
$NameField
,
$Name
);
if
(
count
(
$Names
)>
0
)
{
$NameCount
=
count
(
$Names
);
$found
=
FALSE
;
$NewName
=
"Copy of $Name"
;
if
(!
in_array
(
"Copy of $Name"
,
$Names
))
{
$found
=
TRUE
;
}
else
{
for
(
$x
=
2
;
$x
<
$NameCount
+
2
;
$x
++)
{
$NewName
=
"Copy "
.
$x
.
" of "
.
$Name
;
if
(!
in_array
(
$NewName
,
$Names
))
{
$found
=
TRUE
;
break
;
}
}
}
if
(!
$found
)
{
$NameCount
++;
$NewName
=
"Copy $NameCount of $Name"
;
}
$this
->
Set
(
$NameField
,
$NewName
);
}
}
$this
->
Create
();
// copy relationships
$NewId
=
$this
->
Get
(
"ResourceId"
);
$reldata
=
new
clsRelationshipList
(
$DestCat
,
$this
->
IdField
());
$reldata
->
CopyToResource
(
$OldId
,
$NewId
);
// copy reviews
$rdata
=
new
clsItemReviewList
();
$rdata
->
CopyToItemId
(
$OldId
,
$NewId
);
unset
(
$rdata
);
// copy custom fields
$cdata
=
new
clsCustomDataList
();
$cdata
->
CopyResource
(
$OldId
,
$NewId
);
unset
(
$cdata
);
// copy images
if
(
is_object
(
$this
->
Images
))
$this
->
Images
->
CopyResource
(
$OldId
,
$NewId
);
$this
->
AddToCategory
(
$TargetCat
,
''
,
0
);
// insert (but with duplicate records check)
//echo "ok";
if
(
is_numeric
(
$TargetCat
))
{
if
(
is_array
(
$Cats
))
{
if
(!
in_array
(
$TargetCat
,
$Cats
))
{
$this
->
AddToCategory
(
$TargetCat
,
0
);
// insert
}
}
$this
->
SetPrimaryCategory
(
$TargetCat
);
// 2 updates
}
}
}
?>
Event Timeline
Log In to Comment