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;