Page Menu
Home
In-Portal Phabricator
Search
Configure Global Search
Log In
Files
F1168865
listings_event_handler.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
Thu, Sep 25, 6:04 PM
Size
26 KB
Mime Type
text/x-php
Expires
Sat, Sep 27, 6:04 PM (1 d, 13 h)
Engine
blob
Format
Raw Data
Handle
757248
Attached To
rMINL Modules.In-Link
listings_event_handler.php
View Options
<?php
/**
* @version $Id: listings_event_handler.php 14850 2011-12-08 12:29:35Z alex $
* @package In-Link
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license GNU/GPL
* In-Portal is Open Source software.
* This means that this software may have been modified pursuant
* the GNU General Public License, and as distributed it includes
* or is derivative of works licensed under the GNU General Public License
* or other free or open source software licenses.
* See http://www.in-portal.org/license for copyright notices and details.
*/
defined
(
'FULL_PATH'
)
or
die
(
'restricted access!'
);
class
ListingsEventHandler
extends
kDBEventHandler
{
/**
* Allows to override standard permission mapping
*
*/
function
mapPermissions
()
{
parent
::
mapPermissions
();
$permissions
=
Array
(
// front
'OnRequestEnhancement'
=>
Array
(
'self'
=>
true
),
'OnCancelEnhancement'
=>
Array
(
'self'
=>
true
),
'OnExtendEnhancement'
=>
Array
(
'self'
=>
true
),
);
$this
->
permMapping
=
array_merge
(
$this
->
permMapping
,
$permissions
);
}
/**
* Adds selected link to listing
*
* @param kEvent $event
*/
function
OnProcessSelected
(&
$event
)
{
$object
=&
$event
->
getObject
();
$selected_ids
=
$this
->
Application
->
GetVar
(
'selected_ids'
);
if
(
$selected_ids
[
'l'
])
{
$link_id
=
$selected_ids
[
'l'
];
$sql
=
'SELECT ResourceId
FROM '
.
$this
->
Application
->
getUnitOption
(
'l'
,
'TableName'
).
'
WHERE '
.
$this
->
Application
->
getUnitOption
(
'l'
,
'IDField'
).
' = '
.
$link_id
;
$object
->
SetDBField
(
$this
->
Application
->
RecallVar
(
'dst_field'
),
$this
->
Conn
->
GetOne
(
$sql
));
$object
->
IgnoreValidation
=
true
;
// $this->RemoveRequiredFields($object);
$object
->
Update
();
}
$this
->
finalizePopup
(
$event
);
}
function
OnPreSaveListing
(&
$event
)
{
$event
->
redirect
=
false
;
$object
=&
$event
->
getObject
(
Array
(
'skip_autoload'
=>
true
)
);
$object
->
IgnoreValidation
=
true
;
// $this->RemoveRequiredFields($object);
$event
->
CallSubEvent
(
'OnPreSave'
);
$this
->
Application
->
SetVar
(
$event
->
getPrefixSpecial
(
true
).
'_id'
,
$object
->
GetId
());
return
;
}
/**
* Occurs before updating item
*
* @param kEvent $event
* @return void
* @access protected
*/
protected
function
OnBeforeItemUpdate
(&
$event
)
{
$object
=&
$event
->
getObject
();
/* @var $object kDBItem */
if
(
$object
->
IgnoreValidation
)
{
$object
->
UpdateFormattersMasterFields
();
}
}
/**
* Occurs before creating item
*
* @param kEvent $event
* @return void
* @access protected
*/
protected
function
OnBeforeItemCreate
(&
$event
)
{
parent
::
OnBeforeItemCreate
(
$event
);
$object
=&
$event
->
getObject
();
/* @var $object kDBItem */
if
(
$object
->
IgnoreValidation
)
{
$object
->
UpdateFormattersMasterFields
();
}
}
/**
* Occurs before an item is deleted from live table when copying from temp
* (temp handler deleted all items from live and then copy over all items from temp)
* Id of item being deleted is passed as event' 'id' param
*
* @param kEvent $event
* @return void
* @access protected
*/
protected
function
OnBeforeDeleteFromLive
(&
$event
)
{
parent
::
OnBeforeDeleteFromLive
(
$event
);
$object
=&
$event
->
getObject
();
/* @var $object kDBItem */
$sql
=
'SELECT *
FROM '
.
$this
->
Application
->
getUnitOption
(
$event
->
Prefix
,
'TableName'
)
.
'
WHERE ListingId = '
.
$object
->
GetId
();
$original_values
=
$this
->
Conn
->
GetRow
(
$sql
);
$type_modified
=
(
$object
->
GetDBField
(
'ListingTypeId'
)
!=
$original_values
[
'ListingTypeId'
]);
$link_modified
=
(
$object
->
GetDBField
(
'ItemResourceId'
)
!=
$original_values
[
'ItemResourceId'
]);
$status_modified
=
(
$object
->
GetDBField
(
'Status'
)
!=
$original_values
[
'Status'
]);
if
(
$status_modified
)
{
$email_event
=
$object
->
GetDBField
(
'Status'
)
?
'LINK.ENHANCE.APPROVE'
:
'LINK.ENHANCE.DENY'
;
$sql
=
'SELECT CreatedById
FROM '
.
$this
->
Application
->
getUnitOption
(
'l'
,
'TableName'
)
.
'
WHERE ResourceId = '
.
$object
->
GetDBField
(
'ItemResourceId'
);
$user_id
=
$this
->
Conn
->
GetOne
(
$sql
);
$this
->
Application
->
EmailEventUser
(
$email_event
,
$user_id
);
$this
->
Application
->
EmailEventAdmin
(
$email_event
);
}
if
(
$type_modified
||
$link_modified
)
{
$this
->
ResetLink
(
$original_values
);
}
if
(
$status_modified
||
$type_modified
||
$link_modified
)
{
$this
->
EnhanceLink
(
$object
,
$original_values
);
}
if
(
$status_modified
&&
!(
$type_modified
||
$link_modified
)
)
{
$this
->
ResetLink
(
$original_values
);
}
}
function
EnhanceLink
(&
$object
,
$original_values
)
{
if
(
$object
->
GetDBField
(
'Status'
)
!=
STATUS_ACTIVE
)
{
return
false
;
}
if
(
$object
->
GetDBField
(
'ExpiresOn'
)
<
adodb_mktime
())
{
$object
->
SetDBField
(
'Status'
,
STATUS_PENDING
);
$object
->
Update
();
$this
->
ResetLink
(
$original_values
);
return
false
;
}
$this
->
UpdateLink
(
'OnPurchase'
,
$object
->
GetDBField
(
'ItemResourceId'
),
$object
->
GetDBField
(
'ListingTypeId'
));
$listtype_object
=&
$this
->
Application
->
recallObject
(
'lst'
);
if
(
$listtype_object
->
GetDBField
(
'OnPurchaseAddToCatEnabled'
)
)
{
$link_object
=&
$this
->
Application
->
recallObject
(
'l'
);
$add_to_cat
=
(
int
)
$listtype_object
->
GetDBField
(
'OnPurchaseAddToCat'
);
$sql
=
'DELETE FROM '
.
$this
->
Application
->
getUnitOption
(
'l-ci'
,
'TableName'
).
'
WHERE CategoryId = '
.
$add_to_cat
.
'
AND ItemResourceId = '
.
$link_object
->
GetDBField
(
'ResourceId'
).
'
AND PrimaryCat = 0'
;
$this
->
Conn
->
Query
(
$sql
);
$sql
=
'INSERT INTO '
.
$this
->
Application
->
getUnitOption
(
'l-ci'
,
'TableName'
).
'
(CategoryId, ItemResourceId, PrimaryCat)
VALUES ('
.
$add_to_cat
.
', '
.
$link_object
->
GetDBField
(
'ResourceId'
).
', 0)'
;
$this
->
Conn
->
Query
(
$sql
);
}
}
function
ResetLink
(
$original_values
)
{
static
$has_been_reset
=
Array
();
if
(
$original_values
[
'Status'
]
!=
STATUS_ACTIVE
||
getArrayValue
(
$has_been_reset
,
$original_values
[
'ListingId'
])
)
{
return
;
}
$has_been_reset
[
$original_values
[
'ListingId'
]]
=
1
;
$this
->
UpdateLink
(
'OnExpire'
,
$original_values
[
'ItemResourceId'
],
$original_values
[
'ListingTypeId'
]);
$listtype_object
=&
$this
->
Application
->
recallObject
(
'lst'
);
if
(
$listtype_object
->
GetDBField
(
'OnExpireRemoveFromCatEnabled'
)
)
{
$remove_from_cat
=
$listtype_object
->
GetDBField
(
'OnExpireRemoveFromCat'
);
$sql
=
'DELETE FROM '
.
$this
->
Application
->
getUnitOption
(
'l-ci'
,
'TableName'
).
'
WHERE ItemResourceId = '
.
$original_values
[
'ItemResourceId'
].
'
AND CategoryId = '
.
$remove_from_cat
.
'
AND PrimaryCat = 0'
;
$this
->
Conn
->
Query
(
$sql
);
}
}
function
UpdateLink
(
$action_prefix
,
$resource_id
,
$listtype_id
)
{
$link_object
=&
$this
->
Application
->
recallObject
(
'l'
,
null
,
Array
(
'skip_autoload'
=>
true
));
$link_object
->
Load
(
$resource_id
,
'ResourceId'
);
// "-item", because can be called as regular after event, and just "lst" recalls list instead
$listtype_object
=&
$this
->
Application
->
recallObject
(
'lst.-item'
,
null
,
Array
(
'skip_autoload'
=>
true
));
$listtype_object
->
Load
(
$listtype_id
);
$action_fields
=
Array
(
'EdPick'
=>
'EditorsPick'
,
'New'
=>
'NewItem'
,
'Hot'
=>
'HotItem'
,
'Pop'
=>
'PopItem'
,
'Status'
=>
'Status'
,
'CustomTemplate'
=>
'CustomTemplate'
,
);
// $action_prefix = 'OnPurchase';
foreach
(
$action_fields
as
$action
=>
$field
)
{
$action_value
=
$listtype_object
->
GetDBField
(
$action_prefix
.
$action
);
if
(
$action_value
!=
3
)
{
$link_object
->
SetDBField
(
$field
,
$action_value
);
}
}
$priority_value
=
$listtype_object
->
GetDBField
(
$action_prefix
.
'PriorityValue'
);
switch
(
$listtype_object
->
GetDBField
(
$action_prefix
.
'PriorityAction'
)
)
{
case
1
:
// equal
$link_object
->
SetDBField
(
'Priority'
,
$priority_value
);
break
;
case
2
:
// increase
$original_priority
=
$link_object
->
GetDBField
(
'Priority'
);
$link_object
->
SetDBField
(
'Priority'
,
$original_priority
+
$priority_value
);
break
;
case
3
:
// decrease
$original_priority
=
$link_object
->
GetDBField
(
'Priority'
);
$link_object
->
SetDBField
(
'Priority'
,
$original_priority
-
$priority_value
);
break
;
default
:
}
$link_object
->
Update
();
}
/**
* Enter description here...
*
* @param kEvent $event
*/
function
OnRequestEnhancement
(&
$event
)
{
if
(
$this
->
Application
->
isModuleEnabled
(
'In-Commerce'
))
{
$l_info
=
$this
->
Application
->
GetVar
(
'l'
);
if
(!
$l_info
)
{
return
false
;
}
list
(
$link_id
,
$link_info
)
=
each
(
$l_info
);
$listing_type_id
=
$link_info
[
'ListingTypeId'
];
$listing_type
=&
$this
->
Application
->
recallObject
(
'lst'
,
null
,
Array
(
'skip_autoload'
=>
true
));
$listing_type
->
Load
(
$listing_type_id
);
if
(
$listing_type
->
GetDBField
(
'EnableBuying'
))
{
$add_to_cart_event
=
new
kEvent
(
'ord:OnAddVirtualProductToCart'
);
$this
->
Application
->
HandleEvent
(
$add_to_cart_event
);
if
(
$add_to_cart_event
->
redirect
)
{
$event
->
SetRedirectParam
(
'pass'
,
'm'
);
$event
->
redirect
=
$add_to_cart_event
->
redirect
;
}
return
true
;
}
}
$event
->
CallSubEvent
(
'OnListingCreate'
);
}
/**
* Create listing or extend existing listing period
*
* @param kEvent $event
*/
function
OnListingCreate
(&
$event
)
{
$new_processing
=
false
;
$link_id
=
$listing_type_id
=
0
;
$object
=&
$event
->
getObject
(
Array
(
'skip_autoload'
=>
true
)
);
/* @var $object kDBItem */
switch
(
$event
->
Name
)
{
case
'EnhanceLinkAfterOrderApprove'
:
case
'EnhancedLinkOnCompleteOrder'
:
// when order with listing virtual product is approved
$fields
=
$event
->
getEventParam
(
'field_values'
);
$item_data
=
unserialize
(
$fields
[
'ItemData'
]);
$listing_type_id
=
$item_data
[
'ListingTypeId'
];
$link_id
=
$item_data
[
'LinkId'
];
$new_processing
=
getArrayValue
(
$item_data
,
'HasNewProcessing'
);
break
;
case
'OnListingCreate'
:
// when requesting enhancement from front (and not via in-commerce)
$links_info
=
$this
->
Application
->
GetVar
(
'l'
);
if
(!
$links_info
)
return
false
;
$event
->
redirect
=
false
;
list
(
$link_id
,
$link_info
)
=
each
(
$links_info
);
$listing_type_id
=
$link_info
[
'ListingTypeId'
];
$new_processing
=
false
;
break
;
}
if
(!
$listing_type_id
)
{
// free or invalid listing type selected
return
false
;
}
// get resource_id of link beeing enhanced
$sql
=
'SELECT ResourceId
FROM '
.
$this
->
Application
->
getUnitOption
(
'l'
,
'TableName'
).
'
WHERE LinkId = '
.
$link_id
;
$resource_id
=
$this
->
Conn
->
GetOne
(
$sql
);
// get listing by link's resource_id
$object
->
Load
(
$resource_id
,
'ItemResourceId'
);
if
(
$object
->
isLoaded
())
{
$original_values
=
$object
->
GetFieldValues
();
}
else
{
// set initial fields to listing
$object
->
SetDBField
(
'ListingTypeId'
,
$listing_type_id
);
$object
->
SetDBField
(
'ItemResourceId'
,
$resource_id
);
if
(
$event
->
Name
==
'OnListingCreate'
||
$new_processing
)
{
$item_status
=
STATUS_PENDING
;
}
else
{
$item_status
=
STATUS_ACTIVE
;
}
$object
->
SetDBField
(
'Status'
,
$item_status
);
}
// set date of purchase for new listings
$purchased_on
=
max
(
adodb_mktime
(),
$object
->
GetDBField
(
'ExpiresOn'
));
if
(!
$object
->
isLoaded
())
{
$object
->
SetDBField
(
'PurchasedOn_date'
,
$purchased_on
);
$object
->
SetDBField
(
'PurchasedOn_time'
,
$purchased_on
);
}
// set expiration time for listing
$listing_type
=&
$this
->
Application
->
recallObject
(
'lst'
,
null
,
Array
(
'skip_autoload'
=>
true
));
$listing_type
->
Load
(
$listing_type_id
);
$dur_type_mapping
=
Array
(
1
=>
1
,
2
=>
60
,
3
=>
3600
,
4
=>
3600
*
24
,
5
=>
3600
*
24
*
7
,
6
=>
3600
*
24
*
365
/
12
,
7
=>
3600
*
24
*
365
);
$duration
=
$listing_type
->
GetDBField
(
'Duration'
);
$duration_type
=
$listing_type
->
GetDBField
(
'DurationType'
);
$expiration_interval
=
$duration
*
$dur_type_mapping
[
$duration_type
];
$expiration_date
=
$purchased_on
+
$expiration_interval
;
$object
->
SetDBField
(
'ExpiresOn_date'
,
$expiration_date
);
$object
->
SetDBField
(
'ExpiresOn_time'
,
$expiration_date
);
// when extending enhancement mark listing as non-received renewal reminder
$object
->
SetDBField
(
'RenewalReminderSent'
,
0
);
$action
=
$object
->
isLoaded
()
?
'Update'
:
'Create'
;
if
(
$object
->
$action
())
{
$event
->
status
=
kEvent
::
erSUCCESS
;
switch
(
$event
->
Name
)
{
case
'EnhanceLinkAfterOrderApprove'
:
case
'EnhancedLinkOnCompleteOrder'
:
// when order with listing virtual product is approved
if
(
getArrayValue
(
$original_values
,
'Status'
)
!=
STATUS_ACTIVE
)
{
$this
->
EnhanceLink
(
$object
,
Array
());
}
break
;
case
'OnListingCreate'
:
// when requesting enhancement from front (and not via in-commerce)
$event
->
redirect
=
$this
->
Application
->
GetVar
(
'success_template'
);
$sql
=
'SELECT CreatedById FROM '
.
$this
->
Application
->
getUnitOption
(
'l'
,
'TableName'
).
'
WHERE ResourceId = '
.
$object
->
GetDBField
(
'ItemResourceId'
);
$email_event_user
=&
$this
->
Application
->
EmailEventUser
(
'LINK.ENHANCE'
,
$this
->
Conn
->
GetOne
(
$sql
));
$email_event_admin
=&
$this
->
Application
->
EmailEventAdmin
(
'LINK.ENHANCE'
);
break
;
}
}
else
{
$event
->
status
=
kEvent
::
erFAIL
;
}
}
/**
* Enter description here...
*
* @param kEvent $event
*/
function
EnhancedLinkOnCompleteOrder
(&
$event
)
{
// create enhancement, but pending
$this
->
OnListingCreate
(
$event
);
// save created listing_id back to itemdata
$object
=&
$event
->
getObject
(
Array
(
'skip_autoload'
=>
true
)
);
$fields
=
$event
->
getEventParam
(
'field_values'
);
$item_data
=
unserialize
(
$fields
[
'ItemData'
]);
unset
(
$item_data
[
'ListingTypeId'
]);
$item_data
[
'ListingId'
]
=
$object
->
GetID
();
$orditems_idfield
=
$this
->
Application
->
getUnitOption
(
'orditems'
,
'IDField'
);
$orditems_table
=
$this
->
Application
->
getUnitOption
(
'orditems'
,
'TableName'
);
$this
->
Conn
->
doUpdate
(
Array
(
'ItemData'
=>
serialize
(
$item_data
)),
$orditems_table
,
$orditems_idfield
.
' = '
.
$fields
[
'OrderItemId'
]
);
}
/**
* Enter description here...
*
* @param kEvent $event
*/
function
EnhanceLinkAfterOrderApprove
(&
$event
)
{
$object
=&
$event
->
getObject
(
Array
(
'skip_autoload'
=>
true
)
);
/* @var $object kDBItem */
$fields
=
$event
->
getEventParam
(
'field_values'
);
$item_data
=
unserialize
(
$fields
[
'ItemData'
]);
if
(
getArrayValue
(
$item_data
,
'HasNewProcessing'
)
)
{
// new processing: just approve created listing here
$listing_id
=
$item_data
[
'ListingId'
];
$object
->
Load
(
$listing_id
);
// moved enhancement period to time admin approved enhancement
$time_diff
=
adodb_mktime
()
-
$object
->
GetDBField
(
'PurchasedOn'
);
$object
->
SetDBField
(
'PurchasedOn_date'
,
$object
->
GetDBField
(
'PurchasedOn_date'
)
+
$time_diff
);
$object
->
SetDBField
(
'PurchasedOn_time'
,
$object
->
GetDBField
(
'PurchasedOn_time'
)
+
$time_diff
);
$object
->
SetDBField
(
'ExpiresOn_date'
,
$object
->
GetDBField
(
'ExpiresOn_date'
)
+
$time_diff
);
$object
->
SetDBField
(
'ExpiresOn_time'
,
$object
->
GetDBField
(
'ExpiresOn_time'
)
+
$time_diff
);
$object
->
SetDBField
(
'Status'
,
STATUS_ACTIVE
);
$object
->
Update
();
$this
->
EnhanceLink
(
$object
,
Array
());
return
true
;
}
else
{
// create listing & approve it at the same time
$this
->
OnListingCreate
(
$event
);
}
}
/**
* Delete listing
*
* @param kEvent $event
*/
function
EnhanceLinkAfterOrderDeny
(&
$event
)
{
$object
=&
$event
->
getObject
(
Array
(
'skip_autoload'
=>
true
)
);
$fields
=
$event
->
getEventParam
(
'field_values'
);
$item_data
=
unserialize
(
$fields
[
'ItemData'
]);
$listing_id
=
$item_data
[
'ListingId'
];
$temp_handler
=&
$this
->
Application
->
recallObject
(
$event
->
getPrefixSpecial
().
'_TempHandler'
,
'kTempTablesHandler'
);
$temp_handler
->
DeleteItems
(
$event
->
Prefix
,
$event
->
Special
,
Array
(
$listing_id
));
}
/**
* Enter description here...
*
* @param kEvent $event
*/
function
ExpireLink
(&
$event
)
{
$object
=&
$event
->
getObject
(
Array
(
'skip_autoload'
=>
true
));
/* @var $object kDBItem */
$fields
=
$event
->
getEventParam
(
'field_values'
);
$item_data
=
unserialize
(
$fields
[
'ItemData'
]);
$sql
=
'SELECT ListingId FROM '
.
$this
->
Application
->
getUnitOption
(
$event
->
Prefix
,
'TableName'
)
.
'
WHERE ItemResourceId = '
.
$item_data
[
'LinkId'
];
$listing_id
=
$this
->
Conn
->
GetOne
(
$sql
);
$object
->
Load
(
$listing_id
);
$original_values
=
$object
->
GetFieldValues
();
$object
->
SetDBField
(
'Status'
,
2
);
if
(
$object
->
Update
()
)
{
$event
->
status
=
kEvent
::
erSUCCESS
;
$this
->
ResetLink
(
$original_values
);
}
else
{
$event
->
status
=
kEvent
::
erFAIL
;
}
}
/**
* Apply same processing to each item being selected in grid
*
* @param kEvent $event
* @return void
* @access protected
*/
protected
function
iterateItems
(&
$event
)
{
$object
=&
$event
->
getObject
(
Array
(
'skip_autoload'
=>
true
));
/* @var $object kDBItem */
$ids
=
$this
->
StoreSelectedIDs
(
$event
);
if
(
$event
->
Name
==
'OnMassApprove'
)
{
foreach
(
$ids
as
$id
)
{
$object
->
Load
(
$id
);
if
(
$object
->
GetDBField
(
'Status'
)
!=
STATUS_ACTIVE
)
{
$original_values
=
$object
->
GetFieldValues
();
$object
->
SetDBField
(
'Status'
,
STATUS_ACTIVE
);
$this
->
EnhanceLink
(
$object
,
$original_values
);
}
}
}
if
(
$event
->
Name
==
'OnMassDecline'
)
{
foreach
(
$ids
as
$id
)
{
$object
->
Load
(
$id
);
if
(
$object
->
GetDBField
(
'Status'
)
==
STATUS_ACTIVE
)
{
$original_values
=
$object
->
GetFieldValues
();
$this
->
ResetLink
(
$original_values
);
$sql
=
'SELECT CreatedById
FROM '
.
$this
->
Application
->
getUnitOption
(
'l'
,
'TableName'
)
.
'
WHERE ResourceId = '
.
$object
->
GetDBField
(
'ItemResourceId'
);
$email_event_user
=&
$this
->
Application
->
EmailEventUser
(
'LINK.ENHANCE.DENY'
,
$this
->
Conn
->
GetOne
(
$sql
));
$email_event_admin
=&
$this
->
Application
->
EmailEventAdmin
(
'LINK.ENHANCE.DENY'
);
}
}
}
parent
::
iterateItems
(
$event
);
// extend period for pending/renewal links (if owner has agreed)
if
(
$event
->
Name
==
'OnMassApprove'
)
{
$lst_object
=&
$this
->
Application
->
recallObject
(
'lst'
,
null
,
Array
(
'skip_autoload'
=>
true
));
/* @var $lst_object kDBItem */
foreach
(
$ids
as
$id
)
{
$object
->
Load
(
$id
);
$sql
=
'SELECT CreatedById
FROM '
.
$this
->
Application
->
getUnitOption
(
'l'
,
'TableName'
)
.
'
WHERE ResourceId = '
.
$object
->
GetDBField
(
'ItemResourceId'
);
$owner_id
=
$this
->
Conn
->
GetOne
(
$sql
);
if
(
$object
->
GetDBField
(
'PendingRenewal'
)
==
1
)
{
$lst_object
->
Load
(
$object
->
GetDBField
(
'ListingTypeId'
)
);
$dur_type_mapping
=
Array
(
1
=>
1
,
2
=>
60
,
3
=>
3600
,
4
=>
3600
*
24
,
5
=>
3600
*
24
*
7
,
6
=>
3600
*
24
*
365
/
12
,
7
=>
3600
*
24
*
365
);
$duration
=
$lst_object
->
GetDBField
(
'Duration'
);
$duration_type
=
$lst_object
->
GetDBField
(
'DurationType'
);
$expiration_interval
=
$duration
*
$dur_type_mapping
[
$duration_type
];
$renewal_begins
=
max
(
adodb_mktime
(),
$object
->
GetDBField
(
'ExpiresOn'
));
$expiration_date
=
$renewal_begins
+
$expiration_interval
;
$object
->
SetDBField
(
'ExpiresOn_date'
,
$expiration_date
);
$object
->
SetDBField
(
'ExpiresOn_time'
,
$expiration_date
);
$object
->
SetDBField
(
'RenewalReminderSent'
,
0
);
$object
->
SetDBField
(
'PendingRenewal'
,
0
);
if
(
$object
->
Update
()
)
{
$event
->
status
=
kEvent
::
erSUCCESS
;
$event
->
setRedirectParams
(
Array
(
'opener'
=>
's'
),
true
);
$this
->
Application
->
EmailEventUser
(
'LINK.ENHANCE.RENEW'
,
$owner_id
);
$this
->
Application
->
EmailEventAdmin
(
'LINK.ENHANCE.RENEW'
);
}
else
{
$event
->
status
=
kEvent
::
erFAIL
;
$event
->
redirect
=
false
;
break
;
}
}
else
{
$this
->
Application
->
EmailEventUser
(
'LINK.ENHANCE.APPROVE'
,
$owner_id
);
$this
->
Application
->
EmailEventAdmin
(
'LINK.ENHANCE.APPROVE'
);
}
}
}
}
/**
* Redirects to cancel template on front-end
*
* @param kEvent $event
* @return void
* @access protected
*/
protected
function
OnCancel
(&
$event
)
{
parent
::
OnCancel
(
$event
);
if
(
!
$this
->
Application
->
isAdmin
)
{
$event
->
SetRedirectParam
(
'opener'
,
's'
);
$event
->
redirect
=
$this
->
Application
->
GetVar
(
'cancel_template'
);
}
}
/**
* Checks that user is owner of link & returns listing id if permissions are ok
*
* @param kEvent $event
* @return mixed
*/
function
verifyListingOwner
(&
$event
)
{
$link_id
=
$this
->
Application
->
GetVar
(
'l_id'
);
$user_id
=
$this
->
Application
->
RecallVar
(
'user_id'
);
$sql
=
'SELECT ResourceId
FROM '
.
$this
->
Application
->
getUnitOption
(
'l'
,
'TableName'
).
'
WHERE (LinkId = '
.
$link_id
.
') AND (CreatedById = '
.
$user_id
.
')'
;
$resource_id
=
$this
->
Conn
->
GetOne
(
$sql
);
if
(!
$resource_id
)
{
$event
->
status
=
kEvent
::
erFAIL
;
return
false
;
}
$sql
=
'SELECT ListingId
FROM '
.
$this
->
Application
->
getUnitOption
(
$event
->
Prefix
,
'TableName'
).
'
WHERE ItemResourceId = '
.
$resource_id
;
return
$this
->
Conn
->
GetOne
(
$sql
);
}
function
OnExtendEnhancement
(&
$event
)
{
$listing_id
=
$this
->
verifyListingOwner
(
$event
);
if
(!
$listing_id
)
{
return
;
}
$object
=&
$event
->
getObject
(
Array
(
'skip_autoload'
=>
true
)
);
$object
->
Load
(
$listing_id
);
$object
->
SetDBField
(
'PendingRenewal'
,
1
);
$object
->
Update
();
$event
->
redirect
=
$this
->
Application
->
GetVar
(
'success_template'
);
$sql
=
'SELECT CreatedById FROM '
.
$this
->
Application
->
getUnitOption
(
'l'
,
'TableName'
).
'
WHERE ResourceId = '
.
$object
->
GetDBField
(
'ItemResourceId'
);
$email_event_user
=&
$this
->
Application
->
EmailEventUser
(
'LINK.ENHANCE.EXTEND'
,
$this
->
Conn
->
GetOne
(
$sql
));
$email_event_admin
=&
$this
->
Application
->
EmailEventAdmin
(
'LINK.ENHANCE.EXTEND'
);
}
/**
* Cancels enhancement
*
* @param kEvent $event
*/
function
OnCancelEnhancement
(&
$event
)
{
$listing_id
=
$this
->
verifyListingOwner
(
$event
);
if
(
!
$listing_id
)
{
return
;
}
$object
=&
$event
->
getObject
(
Array
(
'skip_autoload'
=>
true
));
/* @var $object kDBItem */
$object
->
Load
(
$listing_id
);
$original_values
=
$object
->
GetFieldValues
();
$original_values
[
'Status'
]
=
1
;
$this
->
ResetLink
(
$original_values
);
$sql
=
'SELECT CreatedById FROM '
.
$this
->
Application
->
getUnitOption
(
'l'
,
'TableName'
)
.
'
WHERE ResourceId = '
.
$object
->
GetDBField
(
'ItemResourceId'
);
$this
->
Application
->
EmailEventUser
(
'LINK.ENHANCE.CANCEL'
,
$this
->
Conn
->
GetOne
(
$sql
));
$this
->
Application
->
EmailEventAdmin
(
'LINK.ENHANCE.CANCEL'
);
$object
->
Delete
();
$event
->
redirect
=
$this
->
Application
->
GetVar
(
'success_template'
);
}
/**
* Checks expired paid listings
*
* @param kEvent $event
*/
function
OnCheckExpiredPaidListings
(&
$event
)
{
$sql
=
'SELECT ListingId FROM '
.
$this
->
Application
->
getUnitOption
(
$event
->
Prefix
,
'TableName'
).
'
WHERE ExpiresOn < '
.
adodb_mktime
().
' AND Status = 1'
;
$expired_listings
=
$this
->
Conn
->
GetCol
(
$sql
);
if
(
is_array
(
$expired_listings
)
&&
count
(
$expired_listings
)
>
0
)
{
$object
=&
$this
->
Application
->
recallObject
(
$event
->
Prefix
.
'.-item'
,
null
,
Array
(
'skip_autoload'
=>
true
));
/* @var $object kDBItem */
foreach
(
$expired_listings
as
$listing_id
)
{
$object
->
Load
(
$listing_id
);
$original_values
=
$object
->
GetFieldValues
();
$this
->
ResetLink
(
$original_values
);
$object
->
SetDBField
(
'Status'
,
2
);
$object
->
Update
();
$sql
=
'SELECT CreatedById FROM '
.
$this
->
Application
->
getUnitOption
(
'l'
,
'TableName'
).
'
WHERE ResourceId = '
.
$object
->
GetDBField
(
'ItemResourceId'
);
$email_event_user
=&
$this
->
Application
->
EmailEventUser
(
'LINK.ENHANCE.EXPIRE'
,
$this
->
Conn
->
GetOne
(
$sql
));
$email_event_admin
=&
$this
->
Application
->
EmailEventAdmin
(
'LINK.ENHANCE.EXPIRE'
);
}
}
$sql
=
'SELECT ls.ListingId, l.CreatedById FROM '
.
$this
->
Application
->
getUnitOption
(
$event
->
Prefix
,
'TableName'
).
' ls
LEFT JOIN '
.
$this
->
Application
->
getUnitOption
(
'lst'
,
'TableName'
).
' lst
ON ls.ListingTypeId = lst.ListingTypeId
LEFT JOIN '
.
$this
->
Application
->
getUnitOption
(
'l'
,
'TableName'
).
' l
ON ls.ItemResourceId = l.ResourceId
WHERE ls.Status = 1
AND ls.ExpiresOn < '
.
adodb_mktime
().
' + lst.RenewalReminder * 3600 *24
AND ls.RenewalReminderSent = 0'
;
$res
=
$this
->
Conn
->
Query
(
$sql
);
if
(
is_array
(
$res
)
&&
count
(
$res
)
>
0
)
{
$listing_ids
=
Array
();
foreach
(
$res
as
$record
)
{
$email_event_user
=&
$this
->
Application
->
EmailEventUser
(
'LINK.ENHANCE.RENEWAL.NOTICE'
,
$record
[
'CreatedById'
]);
$email_event_admin
=&
$this
->
Application
->
EmailEventAdmin
(
'LINK.ENHANCE.RENEWAL.NOTICE'
);
$listing_ids
[]
=
$record
[
'ListingId'
];
}
$sql
=
'UPDATE '
.
$this
->
Application
->
getUnitOption
(
$event
->
Prefix
,
'TableName'
).
'
SET RenewalReminderSent = 1
WHERE ListingId IN ('
.
implode
(
','
,
$listing_ids
).
')'
;
$this
->
Conn
->
Query
(
$sql
);
}
}
/**
* Removes enhancements on listing delete
*
* @param kEvent $event
* @return void
* @access protected
*/
protected
function
OnMassDelete
(&
$event
)
{
$object
=&
$event
->
getObject
(
Array
(
'skip_autoload'
=>
true
));
/* @var $object kDBItem */
$ids
=
$this
->
StoreSelectedIDs
(
$event
);
foreach
(
$ids
as
$id
)
{
$object
->
Load
(
$id
);
if
(
$object
->
GetDBField
(
'Status'
)
==
STATUS_ACTIVE
)
{
$this
->
ResetLink
(
$object
->
GetFieldValues
()
);
}
}
parent
::
OnMassDelete
(
$event
);
}
/**
* Moves enhancement from original link to it's pending copy, that is going to be approved
*
* @param kEvent $event
*/
function
OnMoveEnhancement
(&
$event
)
{
$id_field
=
$this
->
Application
->
getUnitOption
(
$event
->
MasterEvent
->
Prefix
,
'IDField'
);
$item_table_name
=
$this
->
Application
->
getUnitOption
(
$event
->
MasterEvent
->
Prefix
,
'TableName'
);
$pending_id
=
$event
->
MasterEvent
->
getEventParam
(
'id'
);
$original_id
=
$event
->
MasterEvent
->
getEventParam
(
'original_id'
);
$sql
=
'SELECT ResourceId, '
.
$id_field
.
'
FROM '
.
$item_table_name
.
'
WHERE '
.
$id_field
.
' IN ('
.
$pending_id
.
','
.
$original_id
.
')'
;
$resource_ids
=
$this
->
Conn
->
GetCol
(
$sql
,
$id_field
);
$table_name
=
$this
->
Application
->
getUnitOption
(
$event
->
Prefix
,
'TableName'
);
$sql
=
'UPDATE '
.
$table_name
.
'
SET ItemResourceId = '
.
$resource_ids
[
$pending_id
].
'
WHERE ItemResourceId = '
.
$resource_ids
[
$original_id
];
$this
->
Conn
->
Query
(
$sql
);
}
/**
* Makes calculated fields to go to multilingual link fields
*
* @param kEvent $event
* @return void
* @access protected
*/
protected
function
OnAfterConfigRead
(
kEvent
&
$event
)
{
parent
::
OnAfterConfigRead
(
$event
);
$language_id
=
$this
->
Application
->
GetVar
(
'm_lang'
);
$calculated_fields
=
$this
->
Application
->
getUnitOption
(
$event
->
Prefix
,
'CalculatedFields'
);
$calculated_fields
[
''
][
'LinkName'
]
=
'CONCAT(item_table.l'
.
$language_id
.
'_Name, " (", item_table.Url, ")")'
;
$this
->
Application
->
setUnitOption
(
$event
->
Prefix
,
'CalculatedFields'
,
$calculated_fields
);
}
}
Event Timeline
Log In to Comment