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 098c004a4..60561b114 100644 --- a/airtime_mvc/application/forms/BillingClient.php +++ b/airtime_mvc/application/forms/BillingClient.php @@ -188,7 +188,7 @@ class Application_Form_BillingClient extends Zend_Form $passwordVerify->addValidator($notEmptyValidator); $this->addElement($passwordVerify); - $this->addElement('hash', 'csrf', array( + $this->addElement('hash', 'csrf_client', array( 'salt' => 'unique' )); diff --git a/airtime_mvc/application/forms/BillingUpgradeDowngrade.php b/airtime_mvc/application/forms/BillingUpgradeDowngrade.php index 5ff4ff4de..858f74ddd 100644 --- a/airtime_mvc/application/forms/BillingUpgradeDowngrade.php +++ b/airtime_mvc/application/forms/BillingUpgradeDowngrade.php @@ -3,12 +3,7 @@ class Application_Form_BillingUpgradeDowngrade extends Zend_Form { public function init() { - $csrf_namespace = new Zend_Session_Namespace('csrf_namespace'); - $csrf_element = new Zend_Form_Element_Hidden('csrf'); - $csrf_element->setValue($csrf_namespace->authtoken)->setRequired('true')->removeDecorator('HtmlTag')->removeDecorator('Label'); - $this->addElement($csrf_element); - - $this->addElement('hash', 'csrf', array( + $this->addElement('hash', 'csrf_upgrade', array( //Needs a unique ID (csrf_upgrade) so it doesn't conflict with other tokens in subforms 'salt' => 'unique' )); diff --git a/airtime_mvc/application/layouts/scripts/layout.phtml b/airtime_mvc/application/layouts/scripts/layout.phtml index bc9b14951..ec2c64088 100644 --- a/airtime_mvc/application/layouts/scripts/layout.phtml +++ b/airtime_mvc/application/layouts/scripts/layout.phtml @@ -99,7 +99,7 @@ j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
-
;">
+
;">