Skip to content

Instantly share code, notes, and snippets.

View cgi-caesar's full-sized avatar

Andrey Yerokhin cgi-caesar

View GitHub Profile
@cgi-caesar
cgi-caesar / site.php
Created March 27, 2019 08:10
aMember (site.php): change default sort order on browse users page
<?php
Am_Di::getInstance()->hook->add(Am_Event::ADMIN_MENU, function(Am_Event $e){
if ($p = $e->getMenu()->findOneById('users-browse')) {
$c = $p->getParent();
$c->removePage($p);
$c->addPage([
'id' => 'users-browse',
'uri' => $e->getDi()->url('admin-users', ['_u_sort' => 'added DESC'], false),
'label' => ___('Browse Users'),
@cgi-caesar
cgi-caesar / site.php
Created June 21, 2019 10:59
aMember (site.php): Add new Widget (Upcoming Expirations) to Admin Dashboard
<?php
Am_Di::getInstance()->hook->add(Am_Event::LOAD_ADMIN_DASHBOARD_WIDGETS, function(Am_Event $e) {
$e->addReturn(new Am_AdminDashboardWidget('upcoming-expire', ___('Upcoming Expirations'),
function(Am_View $v, $config = null) {
$lookahead = sqlDate('+7 days');
$now = sqlDate('now');
$data = Am_Di::getInstance()->db->select(<<<CUT
SELECT u.login, u.email, u.name_f, u.name_l, product_id, MAX(expire_date) AS exp
@cgi-caesar
cgi-caesar / site.php
Last active June 26, 2019 15:49
aMember (site.php): Dynamically override redirect after login URL
<?php
Am_Di::getInstance()->hook->add(Am_Event::AUTH_GET_OK_REDIRECT, function(Am_Event $e) {
/* @var $user User */
$user = $e->getUser();
if (stripos($e->getReturn(), '/signup') !== false) {
$e->setReturn($e->getDi()->url('member', false));
}
});
@cgi-caesar
cgi-caesar / site.php
Created June 26, 2019 11:59
aMember (site.php): Set Return-Path for all Emails from aMember
<?php
Am_Di::getInstance()->hook->add([Am_Event::MAIL_TEMPLATE_BEFORE_PARSE, Am_Event::MAIL_SIMPLE_TEMPLATE_BEFORE_PARSE], function(Am_Event $e) {
$e->getMail()->setReturnPath('[email protected]');
});
@cgi-caesar
cgi-caesar / site.php
Last active August 1, 2019 08:02
aMember (site.php): Change URL to signup page on Login Page
<?php
Am_Di::getInstance()->hook->add(Am_Event::BEFORE_RENDER, function (Am_Event $e) {
if (stripos($e->getTemplateName(), '/login.phtml') !== false) {
$e->getView()->signup_url = '/your/custom/url';
}
});
@cgi-caesar
cgi-caesar / site.php
Created August 23, 2019 07:39
aMember (site.php): User friendly error message display in case of there is no product to purchase
<?php
Am_Di::getInstance()->hook->add(Am_Event::AFTER_RENDER, function(Am_Event_AfterRender $e) {
if (defined('AM_ADMIN') && AM_ADMIN) return;
if (
stripos($e->getOutput(), 'There are no products available for purchase. Please come back later') !== false
&& $e->getDi()->request->getControllerName() == 'signup'
) {
$url = $e->getDi()->url('no-product', ['c' => $e->getDi()->request->getParam('c')], false);
header("Location: {$url}");
@cgi-caesar
cgi-caesar / site.php
Created October 17, 2019 14:40
aMember (site.php): Discount based on Qty
<?php
Am_Di::getInstance()->hook->add(Am_Event::INVOICE_GET_CALCULATORS, function(Am_Event_InvoiceGetCalculators $e){
$e->insertBeforeTax(new class() extends Am_Invoice_Calc
{
public function calculate(Invoice $invoiceBill)
{
$discount_rules = [
108 => [ //Product ID
@cgi-caesar
cgi-caesar / site.php
Created October 31, 2019 17:16
aMember (site.php): Limit usage of coupon by IP address
<?php
Am_Di::getInstance()->hook->add(Am_Event::VALIDATE_COUPON, function(Am_Event $e) {
$batch = $e->getCouponBatch();
$coupon = $e->getCoupon();
$used = $e->getDi()->invoiceTable->countBy([
'coupon_id' => $coupon->pk(),
'remote_addr' => $_SERVER['REMOTE_ADDR']
]);
@cgi-caesar
cgi-caesar / site.php
Created November 18, 2019 08:40
aMember (site.php): Forms Editor - Use click event to add Brick to Form
<?php
/**
* Use click event to add Brick to Form
*/
Am_Di::getInstance()->hook->add('gridSavedFormInitForm', function(Am_Event_Grid $e) {
$e->getGrid()->getForm()
->addScript()
->setScript(<<<'CUT'
let drag = false;
@cgi-caesar
cgi-caesar / site.js
Created November 20, 2019 15:58
aMember (site.js): responsive iframe (maintain aspect ratio)
jQuery(function(){
jQuery(window).resize(function(){
jQuery('iframe.embed-video-16-9').each(function(){
jQuery(this).height(jQuery(this).width() * 9/16)
});
}).resize();
});