public function render(Am_View $view, $user = null) { $html = $this->html; if (strpos($html, '%user.') !== false) { $t = new Am_SimpleTemplate(); if ($user) { $t->assign('user', $user); } $t->assignStdVars(); $html = $t->render($html); } if ($this->use_layout) { $view->content = '<div class="am-content-page">' . $html . '</div>'; $view->title = $this->title; $view->meta_title = $this->meta_title ? $this->meta_title : $this->title; if ($this->meta_keywords) { $view->headMeta()->setName('keywords', $this->meta_keywords); } if ($this->meta_description) { $view->headMeta()->setName('description', $this->meta_description); } return $view->render($this->tpl ? $this->tpl : 'layout.phtml'); } else { return $html; } }
function onThanksPage(Am_Event $event) { if (!$event->getInvoice()) { return; } $url = null; foreach ($event->getInvoice()->getProducts() as $pr) { if ($url = $pr->data()->get('thanks_redirect_url')) { break; } } $t = new Am_SimpleTemplate(); $t->assignStdVars(); $t->assign('invoice', $event->getInvoice()); $t->assign('user', $event->getInvoice()->getUser()); $url = $t->render($url); if ($url) { $event->getController()->redirectLocation($url); } }
protected function _parse($text, $layout = null) { $tpl = new Am_SimpleTemplate(); $tpl->assignStdVars(); $tpl->assign($this->getArrayCopy()); $tpl->assign(get_object_vars($this)); $text = $tpl->render($text); if ($layout) { $tpl->assign('content', $text); $text = $tpl->render($layout); } return $text; }
public function batchSend(&$context, Am_BatchProcessor $batch) { if ($this->saved->count_users <= $this->saved->sent_users) { return true; } // we are done; $q = $this->searchUi->query($this->saved->sent_users, 10); $i = 0; $db = $this->getDi()->db; $foundrows = false; while ($r = $db->fetchRow($q)) { $foundrows = true; if (!$batch->checkLimits()) { return false; } $r['name'] = $r['name_f'] . ' ' . $r['name_l']; $this->saved->updateQuick(array('last_email' => $r['email'], 'sent_users' => $this->saved->sent_users + 1)); if ($r['email'] == '') { continue; } $m = $this->getDi()->mail; $m->setPeriodic(Am_Mail::ADMIN_REQUESTED); $m->addHeader('X-Amember-Queue-Id', $this->_request->getFiltered('queue_id')); $m->addUnsubscribeLink(Am_Mail::LINK_USER); $m->addTo($r['email'], $r['name']); if ($reply_to = $this->getParam('reply_to')) { switch ($reply_to) { case 'default': $email = false; break; case 'other': $email = $this->getParam('reply_to_other'); $name = null; break; default: preg_match('/^admin-(\\d+)$/', $reply_to, $match); $admin = $this->getDi()->adminTable->load($match[1], false); if ($admin) { $email = $admin->email; $name = $admin->getName(); } break; } if ($email = filter_var($email, FILTER_VALIDATE_EMAIL)) { $m->setReplyTo($email, $name); } } $subject = $this->getParam('subject'); $body = $this->getParam('body'); $tpl = new Am_SimpleTemplate(); $tpl->assignStdVars(); if (strpos($body, '%user.unsubscribe_link%') !== false || strpos($subject, '%user.unsubscribe_link%') !== false) { $r['unsubscribe_link'] = Am_Mail::getUnsubscribeLink($r['email'], Am_Mail::LINK_USER); } $tpl->user = $r; $this->getDi()->hook->call(Am_Event::MAIL_SIMPLE_TEMPLATE_BEFORE_PARSE, array('template' => $tpl, 'body' => $body, 'subject' => $subject, 'mail' => $m, 'request' => $this->getRequest())); $subject = $tpl->render($subject); $body = $tpl->render($body); if ($this->getParam('email_template_layout_id') && ($layout = $this->getDi()->emailTemplateLayoutTable->load($this->getParam('email_template_layout_id', false)))) { $tpl->assign('content', $body); $body = $tpl->render($layout->layout); } $m->setSubject($subject); if ($this->getParam('format') == 'text') { $m->setBodyText($body); } else { $text = strip_tags($body); $html = strpos($body, '<html') === false ? "<html><head><title>{$subject}</title></head><body>{$body}</body></html>" : $body; $m->setBodyHtml($html); $m->setBodyText($text); } foreach ($this->getAttachments() as $at) { $m->addAttachment($at); } try { $m->send(); } catch (Zend_Mail_Exception $e) { trigger_error("Error happened while sending e-mail to {$r['email']} : " . $e->getMessage(), E_USER_WARNING); } } $this->getDi()->db->freeResult($q); if (!$foundrows) { return true; } if ($this->saved->count_users <= $this->saved->sent_users) { return true; } // we are done; }
public function batchSend(&$context, Am_BatchProcessor $batch) { if ($this->saved->count_users <= $this->saved->sent_users) { return true; } // we are done; $q = $this->searchUi->query($this->saved->sent_users, 10); $t = new Am_View(); $i = 0; $db = $this->getDi()->db; while ($r = $db->fetchRow($q)) { $r['name'] = $r['name_f'] . ' ' . $r['name_l']; if (!empty($r['user_id'])) { $isUser = true; } else { $isUser = false; } $this->saved->updateQuick(array('last_email' => $r['email'], 'sent_users' => $this->saved->sent_users + 1)); if ($r['email'] == '') { continue; } $subject = $this->getParam('subject'); $body = $this->getParam('body'); // assign variables $tpl = new Am_SimpleTemplate(); $tpl->assignStdVars(); $tpl->user = $r; $subject = $tpl->render($subject); $body = $tpl->render($body); // $m = new Am_Mail(); $m->addUnsubscribeLink($isUser ? Am_Mail::LINK_USER : Am_Mail::LINK_GUEST); $m->addTo($r['email'], $r['name'])->setSubject($subject); //->setFrom($this->getDi()->config->get('admin_email'), $this->getDi()->config->get('site_title') . ' Admin'); if ($this->getParam('format') == 'text') { $m->setBodyText($body); } else { $m->setBodyHtml($body); } $m->setPeriodic(Am_Mail::ADMIN_REQUESTED); $m->addHeader('X-Amember-Queue-Id', $this->_request->getFiltered('queue_id')); foreach ($this->getAttachments() as $at) { $m->addAttachment($at); } try { $m->send(); } catch (Zend_Mail_Exception $e) { trigger_error("Error happened while sending e-mail to {$r['email']} : " . $e->getMessage(), E_USER_WARNING); } } $this->getDi()->db->freeResult($q); if ($this->saved->count_users <= $this->saved->sent_users) { return true; } // we are done; }
public function render() { $invoice = $this->invoice; $payment = $this->payment; $user = $invoice->getUser(); $pdf = $this->createPdfTemplate(); $event = new Am_Event(Am_Event::PDF_INVOICE_BEFORE_RENDER, array('amPdfInvoice' => $this, 'pdf' => $pdf, 'invoice' => $invoice, 'payment' => $payment, 'user' => $user)); $event->setReturn(false); $this->getDi()->hook->call($event); // If event processing already rendered the Pdf. if ($event->getReturn() === true) { return $pdf->render(); } $width_num = 30; $width_qty = 40; $width_price = 80; $width_total = 120; $padd = 20; $left = $padd; $right = $this->getPaperWidth() - $padd; $fontH = $this->getFontRegular(); $fontHB = $this->getFontBold(); $styleBold = array('font' => array('face' => $fontHB, 'size' => 10)); $page = new Am_Pdf_Page_Decorator($pdf->pages[0]); $page->setFont($fontH, 10); $pointer = $this->getPointer(); $pointerL = $pointerR = $pointer; $leftCol = new stdClass(); $leftCol->invoiceNumber = ___('Corrective Invoice Number: ') . $payment->getDisplayInvoiceId(); $leftCol->recInvoiceNumber = ___('Rectifies Invoice Number: ') . $this->getOrigPayment()->getDisplayInvoiceId(); $leftCol->date = ___('Date: ') . amDate($payment->dattm); if ($user->tax_id) { $leftCol->taxId = ___('EU VAT ID: ') . $user->tax_id; } $this->getDi()->hook->call(Am_Event::PDF_INVOICE_COL_LEFT, array('col' => $leftCol, 'invoice' => $invoice, 'payment' => $payment, 'user' => $user)); foreach ($leftCol as $line) { $page->drawText($line, $left, $pointerL); $page->nl($pointerL); } $rightCol = new stdClass(); $rightCol->name = $invoice->getName(); $rightCol->email = $invoice->getEmail(); $rightCol->address = implode(', ', array_filter(array($invoice->getStreet(), $invoice->getCity()))); $rightCol->country = implode(', ', array_filter(array($this->getState($invoice), $invoice->getZip(), $this->getCountry($invoice)))); $this->getDi()->hook->call(Am_Event::PDF_INVOICE_COL_RIGHT, array('col' => $rightCol, 'invoice' => $invoice, 'payment' => $payment, 'user' => $user)); foreach ($rightCol as $line) { $page->drawText($line, $right, $pointerR, 'UTF-8', Am_Pdf_Page_Decorator::ALIGN_RIGHT); $page->nl($pointerR); } $pointer = min($pointerR, $pointerL); $p = new stdClass(); $p->value =& $pointer; $this->getDi()->hook->call(Am_Event::PDF_INVOICE_BEFORE_TABLE, array('page' => $page, 'pointer' => $p, 'invoice' => $invoice, 'payment' => $payment, 'user' => $user)); $table = new Am_Pdf_Table(); $table->setMargin($padd, $padd, $padd, $padd); $table->setStyleForRow(1, array('shape' => array('type' => Zend_Pdf_Page::SHAPE_DRAW_STROKE, 'color' => new Zend_Pdf_Color_Html("#cccccc")), 'font' => array('face' => $fontHB, 'size' => 10))); $table->setStyleForColumn(1, array('align' => 'right', 'width' => $width_num)); $table->setStyleForColumn(3, array('align' => 'right', 'width' => $width_qty)); $table->setStyleForColumn(4, array('align' => 'right', 'width' => $width_price)); $table->setStyleForColumn(5, array('align' => 'right', 'width' => $width_total)); $table->addRow(array(___('#'), ___('Subscription/Product Title'), ___('Qty'), ___('Unit Price'), ___('Total Price'))); $num = 0; foreach ($invoice->getItems() as $p) { /* @var $p InvoiceItem */ $table->addRow(array(++$num . '.', $p->item_title, $p->qty, $invoice->getCurrency($this->isFirstPayment() ? $p->first_price : $p->second_price), $invoice->getCurrency($this->isFirstPayment() ? $p->getFirstSubtotal() : $p->getSecondSubtotal()))); } $pointer = $page->drawTable($table, 0, $pointer); $table = new Am_Pdf_Table(); $table->setMargin($padd, $padd, $padd, $padd); $table->setStyleForColumn(2, array('align' => 'right', 'width' => $width_total)); $subtotal = $this->isFirstPayment() ? $invoice->first_subtotal : $invoice->second_subtotal; $total = $this->isFirstPayment() ? $invoice->first_total : $invoice->second_total; if ($subtotal != $total) { $table->addRow(array(___('Subtotal'), $invoice->getCurrency($subtotal)))->addStyle($styleBold); } if ($this->isFirstPayment() && $invoice->first_discount > 0 || !$this->isFirstPayment() && $invoice->second_discount > 0) { $table->addRow(array(___('Coupon Discount'), $invoice->getCurrency($this->isFirstPayment() ? $invoice->first_discount : $invoice->second_discount))); } $table->addRow(array(___('Total'), $invoice->getCurrency($total)))->addStyle($styleBold); $table->addRow(array(___('Taxable Income'), "-" . $invoice->getCurrency($this->getOrigPayment()->amount - $this->getOrigPayment()->tax)))->addStyle($styleBold); if ($this->getOrigPayment()->tax > 0) { $table->addRow(array(___('Tax') . " " . $invoice->tax_rate . "%", "-" . $invoice->getCurrency($this->getOrigPayment()->tax)))->addStyle($styleBold); } $table->addRow(array(___('Amount Paid'), $invoice->getCurrency(sprintf("%.2f", $this->getOrigPayment()->amount - $this->payment->amount))))->addStyle(array('font' => array('face' => $fontHB, 'size' => 10))); $x = $this->getPaperWidth() - ($width_qty + $width_price + $width_total) - 2 * $padd; $pointer = $page->drawTable($table, $x, $pointer); $page->nl($pointer); $page->nl($pointer); if (!$this->getDi()->config->get('invoice_do_not_include_terms')) { $termsText = new Am_TermsText($invoice); $page->drawTextWithFixedWidth(___('Subscription Terms') . ': ' . $termsText, $left, $pointer, $this->getPaperWidth() - 2 * $padd); $page->nl($pointer); } $p = new stdClass(); $p->value =& $pointer; $this->getDi()->hook->call(Am_Event::PDF_INVOICE_AFTER_TABLE, array('page' => $page, 'pointer' => $p, 'invoice' => $invoice, 'payment' => $payment, 'user' => $user)); if (!$this->getDi()->config->get('invoice_custom_template') || !$this->getDi()->uploadTable->load($this->getDi()->config->get('invoice_custom_template'))) { if ($ifn = $this->getDi()->config->get('invoice_footer_note')) { $tmpl = new Am_SimpleTemplate(); $tmpl->assignStdVars(); $tmpl->assign('user', $user); $tmpl->assign('invoice', $invoice); $ifn = $tmpl->render($ifn); $page->nl($pointer); $page->drawTextWithFixedWidth($ifn, $left, $pointer, $this->getPaperWidth() - 2 * $padd); } } return $pdf->render(); }
protected function _parse($text) { $tpl = new Am_SimpleTemplate(); $tpl->assignStdVars(); $tpl->assign($this->getArrayCopy()); $tpl->assign(get_object_vars($this)); return $tpl->render($text); }