From f79ca8650f8c7dac81598f1f7a6f223e63307b24 Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Tue, 20 Oct 2015 15:44:24 -0400 Subject: [PATCH] Unpaid invoice usability hint and invoice page style fix - SAAS-1134 --- airtime_mvc/application/common/Billing.php | 45 +++++++++++++++++++ .../application/common/UsabilityHints.php | 21 ++++++++- .../controllers/BillingController.php | 23 +--------- .../application/forms/BillingClient.php | 2 +- .../views/scripts/billing/invoices.phtml | 2 +- airtime_mvc/public/css/billing.css | 8 ++++ 6 files changed, 75 insertions(+), 26 deletions(-) diff --git a/airtime_mvc/application/common/Billing.php b/airtime_mvc/application/common/Billing.php index 137451172..2dbfafa9a 100644 --- a/airtime_mvc/application/common/Billing.php +++ b/airtime_mvc/application/common/Billing.php @@ -329,4 +329,49 @@ class Billing $result = Billing::makeRequest($credentials["url"], $query_string); } + public static function getInvoices() + { + Billing::ensureClientIdIsValid(); + $credentials = Billing::getAPICredentials(); + + $postfields = array(); + $postfields["username"] = $credentials["username"]; + $postfields["password"] = md5($credentials["password"]); + $postfields["action"] = "getinvoices"; + $postfields["responsetype"] = "json"; + $postfields["userid"] = Application_Model_Preference::GetClientId(); + + $query_string = ""; + foreach ($postfields AS $k=>$v) $query_string .= "$k=".urlencode($v)."&"; + + $result = Billing::makeRequest($credentials["url"], $query_string); + + $invoices = array(); + if ($result["invoices"]) { + $invoices = $result["invoices"]["invoice"]; + } + return $invoices; + } + + /** + * Checks if the customer has any unpaid invoices and if so, returns + * the ID of one of them. Returns 0 otherwise. + */ + public static function checkForUnpaidInvoice() { + $invoices = self::getInvoices(); + $unpaidInvoice = 0; + $unpaidInvoices = 0; + foreach ($invoices as $invoice) + { + if ($invoice['status'] == 'Unpaid') { + $unpaidInvoices += 1; + $unpaidInvoice = $invoice; + } + } + if ($unpaidInvoices > 0) { + return $unpaidInvoice; + } else { + return 0; + } + } } diff --git a/airtime_mvc/application/common/UsabilityHints.php b/airtime_mvc/application/common/UsabilityHints.php index fb52de7b6..04022a1a7 100644 --- a/airtime_mvc/application/common/UsabilityHints.php +++ b/airtime_mvc/application/common/UsabilityHints.php @@ -21,6 +21,8 @@ class Application_Common_UsabilityHints $userIsOnCalendarPage = false; $userIsOnAddMediaPage = false; + $userIsOnShowbuilderPage = false; + $userIsSuperAdmin = Application_Model_User::getCurrentUser()->isSuperAdmin(); // If $userPath is set the request came from AJAX so the user's // current location inside Airtime gets passed in to this function. @@ -36,6 +38,11 @@ class Application_Common_UsabilityHints if (strpos(strtolower($userPath), 'schedule') !== false) { $userIsOnCalendarPage = true; } + + if (strpos(strtolower($userPath), 'showbuilder') !== false) { + $userIsOnShowbuilderPage = true; + } + } else { // If $userPath is not set the request came from inside Airtime so // we can use Zend's Front Controller to get the user's current location. @@ -48,6 +55,10 @@ class Application_Common_UsabilityHints if ($currentController == "plupload") { $userIsOnAddMediaPage = true; } + + if ($currentController == 'showbuilder') { + $userIsOnShowbuilderPage = true; + } } if (self::zeroFilesUploaded()) { @@ -92,9 +103,15 @@ class Application_Common_UsabilityHints "", ""); } - } else { - return ""; + } else if ($userIsOnShowbuilderPage && $userIsSuperAdmin) { + $unpaidInvoice = Billing::checkForUnpaidInvoice(); + if ($unpaidInvoice != null) { + $invoiceUrl = "/billing/invoice?invoiceid=" . $unpaidInvoice['id']; + $amount = $unpaidInvoice['currencyprefix'] . $unpaidInvoice['total']; + return _pro(sprintf("You have an unpaid invoice for %s due soon. Please pay it to keep your station on the air.", $amount, $invoiceUrl));; + } } + return ""; } /** diff --git a/airtime_mvc/application/controllers/BillingController.php b/airtime_mvc/application/controllers/BillingController.php index 4cfbd4f77..bf508036b 100644 --- a/airtime_mvc/application/controllers/BillingController.php +++ b/airtime_mvc/application/controllers/BillingController.php @@ -283,26 +283,7 @@ class BillingController extends Zend_Controller_Action { $baseUrl = Application_Common_OsPath::getBaseDir(); $this->view->headLink()->appendStylesheet($baseUrl.'css/billing.css?'.$CC_CONFIG['airtime_version']); - Billing::ensureClientIdIsValid(); - $credentials = Billing::getAPICredentials(); - - $postfields = array(); - $postfields["username"] = $credentials["username"]; - $postfields["password"] = md5($credentials["password"]); - $postfields["action"] = "getinvoices"; - $postfields["responsetype"] = "json"; - $postfields["userid"] = Application_Model_Preference::GetClientId(); - - $query_string = ""; - foreach ($postfields AS $k=>$v) $query_string .= "$k=".urlencode($v)."&"; - - $result = Billing::makeRequest($credentials["url"], $query_string); - - if ($result["invoices"]) { - $this->view->invoices = $result["invoices"]["invoice"];; - } else { - $this->view->invoices = array(); - } + $this->view->invoices = Billing::getInvoices(); } public function invoiceAction() @@ -312,6 +293,4 @@ class BillingController extends Zend_Controller_Action { $invoice_id = $request->getParam('invoiceid'); self::viewInvoice($invoice_id); } - - } diff --git a/airtime_mvc/application/forms/BillingClient.php b/airtime_mvc/application/forms/BillingClient.php index 70def8c33..60561b114 100644 --- a/airtime_mvc/application/forms/BillingClient.php +++ b/airtime_mvc/application/forms/BillingClient.php @@ -187,7 +187,7 @@ class Application_Form_BillingClient extends Zend_Form $passwordVerify->addValidator('Identical', false, array('token' => 'password2')); $passwordVerify->addValidator($notEmptyValidator); $this->addElement($passwordVerify); - + $this->addElement('hash', 'csrf_client', array( 'salt' => 'unique' )); diff --git a/airtime_mvc/application/views/scripts/billing/invoices.phtml b/airtime_mvc/application/views/scripts/billing/invoices.phtml index ea4cb3401..7fc3f4e01 100644 --- a/airtime_mvc/application/views/scripts/billing/invoices.phtml +++ b/airtime_mvc/application/views/scripts/billing/invoices.phtml @@ -5,7 +5,7 @@ $topTextClass = ""; if (array_key_exists("planupdated", $_GET)) { $topText = _pro("Thank you! Your plan has been updated and you will be invoiced during your next billing cycle."); - $topTextClass = "status-good"; + $topTextClass = "invoice-status-good"; } else { $topText = _pro("Tip: To pay an invoice, click \"View Invoice\" and look for the \"Checkout\" button."); diff --git a/airtime_mvc/public/css/billing.css b/airtime_mvc/public/css/billing.css index 7a0e53980..d749b324b 100644 --- a/airtime_mvc/public/css/billing.css +++ b/airtime_mvc/public/css/billing.css @@ -225,6 +225,14 @@ color: #ff0000; } +.invoice-status-good { + background: #e3ffc9 url(images/stream_status.png) no-repeat 10px 10px; + border-color: #54b300; + padding: 2px 12px 4px 32px; + margin: 2px 1px 10px 0px; + color: #330; +} + /** This form is the separate one on the Billing Account Details page (BillingClient.php) */ #clientdetails_form { width: 500px;