Version Description
Download this release
Release Info
Developer | broadstreetads |
Plugin | WordPress Ad Widget |
Version | 2.2.0 |
Comparing to | |
See all releases |
Code changes from version 2.1.6 to 2.2.0
- adwidget.php +137 -19
- lib/Broadstreet.php +456 -0
- lib/Utility.php +430 -0
- readme.txt +4 -3
- views/admin.php +28 -0
- views/modal/footer.php +15 -0
- views/modal/header.php +174 -0
- views/modal/index.php +69 -0
- views/modal/reports.php +96 -0
- views/modal/signedup.php +49 -0
- views/modal/signup.php +37 -0
adwidget.php
CHANGED
@@ -3,11 +3,13 @@
|
|
3 |
Plugin Name: Wordpress Ad Widget
|
4 |
Plugin URI: https://github.com/broadstreetads/wordpress-ad-widget
|
5 |
Description: The easiest way to place ads in your Wordpress sidebar. Go to Settings -> Ad Widget
|
6 |
-
Version: 2.
|
7 |
Author: Broadstreet Ads
|
8 |
Author URI: http://broadstreetads.com
|
9 |
*/
|
10 |
|
|
|
|
|
11 |
add_action('admin_init', array('AdWidget_Core', 'registerScripts'));
|
12 |
add_action('widgets_init', array('AdWidget_Core', 'registerWidgets'));
|
13 |
add_action('admin_menu', array('AdWidget_Core', 'registerAdmin'));
|
@@ -18,7 +20,7 @@ add_action('admin_menu', array('AdWidget_Core', 'registerAdmin'));
|
|
18 |
class AdWidget_Core
|
19 |
{
|
20 |
CONST KEY_INSTALL_REPORT = 'AdWidget_Installed';
|
21 |
-
CONST VERSION = '2.
|
22 |
|
23 |
/**
|
24 |
* The callback used to register the scripts
|
@@ -66,6 +68,13 @@ class AdWidget_Core
|
|
66 |
static function adminMenuCallback()
|
67 |
{
|
68 |
self::sendInstallReportIfNew();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
69 |
include dirname(__FILE__) . '/views/admin.php';
|
70 |
}
|
71 |
|
@@ -192,7 +201,34 @@ class AdWidget_HTMLWidget extends WP_Widget
|
|
192 |
{
|
193 |
$instance = $old_instance;
|
194 |
|
195 |
-
$instance['w_adcode']
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
196 |
|
197 |
return $instance;
|
198 |
}
|
@@ -204,7 +240,7 @@ class AdWidget_HTMLWidget extends WP_Widget
|
|
204 |
function form($instance)
|
205 |
{
|
206 |
|
207 |
-
$defaults = array('w_adcode' => '');
|
208 |
$instance = wp_parse_args((array) $instance, $defaults);
|
209 |
?>
|
210 |
<div class="widget-content">
|
@@ -212,6 +248,10 @@ class AdWidget_HTMLWidget extends WP_Widget
|
|
212 |
<p>
|
213 |
<label for="<?php echo $this->get_field_id('w_adcode'); ?>">Ad Code</label>
|
214 |
<textarea style="height: 100px;" class="widefat" id="<?php echo $this->get_field_id( 'w_adcode' ); ?>" name="<?php echo $this->get_field_name('w_adcode'); ?>"><?php echo $instance['w_adcode']; ?></textarea>
|
|
|
|
|
|
|
|
|
215 |
</p>
|
216 |
</div>
|
217 |
<?php
|
@@ -244,10 +284,15 @@ class AdWidget_ImageWidget extends WP_Widget
|
|
244 |
$link = @$instance['w_link'];
|
245 |
$img = @$instance['w_img'];
|
246 |
$resize = @$instance['w_resize'];
|
|
|
247 |
|
248 |
if($resize == 'yes')
|
249 |
{
|
250 |
-
$
|
|
|
|
|
|
|
|
|
251 |
}
|
252 |
|
253 |
echo $before_widget;
|
@@ -257,8 +302,16 @@ class AdWidget_ImageWidget extends WP_Widget
|
|
257 |
$img = AdWidget_Core::getBaseURL() . 'assets/sample-ad.png';
|
258 |
$link = 'http://adsofthefuture.com';
|
259 |
}
|
260 |
-
|
261 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
262 |
|
263 |
echo $after_widget;
|
264 |
}
|
@@ -272,10 +325,41 @@ class AdWidget_ImageWidget extends WP_Widget
|
|
272 |
function update($new_instance, $old_instance)
|
273 |
{
|
274 |
$instance = $old_instance;
|
|
|
|
|
|
|
275 |
|
276 |
$instance['w_link'] = $new_instance['w_link'];
|
277 |
$instance['w_img'] = $new_instance['w_img'];
|
278 |
-
$instance['w_resize'] =
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
279 |
|
280 |
return $instance;
|
281 |
}
|
@@ -289,23 +373,24 @@ class AdWidget_ImageWidget extends WP_Widget
|
|
289 |
$link_id = $this->get_field_id('w_link');
|
290 |
$img_id = $this->get_field_id('w_img');
|
291 |
|
292 |
-
$defaults = array('w_link' => get_bloginfo('url'), 'w_img' => '', 'w_resize' => 'no');
|
293 |
|
294 |
$instance = wp_parse_args((array) $instance, $defaults);
|
295 |
|
296 |
-
$img
|
297 |
$link = $instance['w_link'];
|
298 |
-
|
|
|
299 |
?>
|
300 |
<div class="widget-content">
|
301 |
<p style="text-align: center;" class="bs-proof">
|
302 |
<?php if($instance['w_img']): ?>
|
303 |
Your ad is ready.
|
304 |
<br/><br/><strong>Scaled Visual:</strong><br/>
|
305 |
-
<div class="bs-proof"><img style="width:100%;" src="<?php echo $instance['w_img'] ?>" alt="Ad" /></div
|
306 |
-
<?php else: ?>
|
307 |
-
<a href="#" class="upload-button" rel="<?php echo $img_id ?>">Click here to upload a new image.</a> You can also paste in an image URL below.
|
308 |
<?php endif; ?>
|
|
|
|
|
309 |
</p>
|
310 |
<input class="widefat tag" placeholder="Image URL" type="text" id="<?php echo $img_id; ?>" name="<?php echo $this->get_field_name('w_img'); ?>" value="<?php echo htmlentities($instance['w_img']); ?>" />
|
311 |
<br/><br/>
|
@@ -313,18 +398,51 @@ class AdWidget_ImageWidget extends WP_Widget
|
|
313 |
<label for="<?php echo $this->get_field_id('w_link'); ?>">Ad Click Destination:</label><br/>
|
314 |
<input class="widefat" type="text" id="<?php echo $this->get_field_id('w_link'); ?>" name="<?php echo $this->get_field_name('w_link'); ?>" value="<?php echo $instance['w_link']; ?>" />
|
315 |
</p>
|
|
|
|
|
|
|
|
|
316 |
<p>
|
317 |
<label for="<?php echo $this->get_field_id('w_resize'); ?>">Auto Resize to Max Width? </label>
|
318 |
<input type="checkbox" name="<?php echo $this->get_field_name('w_resize'); ?>" value="yes" <?php if($instance['w_resize'] == 'yes') echo 'checked'; ?> />
|
319 |
</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
320 |
<p>
|
321 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
322 |
</p>
|
|
|
323 |
</div>
|
324 |
<?php
|
325 |
}
|
326 |
}
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
3 |
Plugin Name: Wordpress Ad Widget
|
4 |
Plugin URI: https://github.com/broadstreetads/wordpress-ad-widget
|
5 |
Description: The easiest way to place ads in your Wordpress sidebar. Go to Settings -> Ad Widget
|
6 |
+
Version: 2.2.0
|
7 |
Author: Broadstreet Ads
|
8 |
Author URI: http://broadstreetads.com
|
9 |
*/
|
10 |
|
11 |
+
require_once 'lib/Utility.php';
|
12 |
+
|
13 |
add_action('admin_init', array('AdWidget_Core', 'registerScripts'));
|
14 |
add_action('widgets_init', array('AdWidget_Core', 'registerWidgets'));
|
15 |
add_action('admin_menu', array('AdWidget_Core', 'registerAdmin'));
|
20 |
class AdWidget_Core
|
21 |
{
|
22 |
CONST KEY_INSTALL_REPORT = 'AdWidget_Installed';
|
23 |
+
CONST VERSION = '2.2.0';
|
24 |
|
25 |
/**
|
26 |
* The callback used to register the scripts
|
68 |
static function adminMenuCallback()
|
69 |
{
|
70 |
self::sendInstallReportIfNew();
|
71 |
+
|
72 |
+
if(isset($_POST['cancel']))
|
73 |
+
Broadstreet_Mini_Utility::hasAdserving(false);
|
74 |
+
|
75 |
+
if(isset($_POST['subscribe']))
|
76 |
+
Broadstreet_Mini_Utility::hasAdserving(true);
|
77 |
+
|
78 |
include dirname(__FILE__) . '/views/admin.php';
|
79 |
}
|
80 |
|
201 |
{
|
202 |
$instance = $old_instance;
|
203 |
|
204 |
+
$instance['w_adcode'] = $new_instance['w_adcode'];
|
205 |
+
$instance['w_adv'] = $new_instance['w_adv'];
|
206 |
+
|
207 |
+
/* New ad? Upload it to Broadstreet */
|
208 |
+
if($instance['w_adcode'] && Broadstreet_Mini_Utility::hasAdserving()) {
|
209 |
+
|
210 |
+
$advertisement_id = false;
|
211 |
+
# New ad?
|
212 |
+
if(is_numeric(@$instance['bs_ad_id'])) $advertisement_id = $instance['bs_ad_id'];
|
213 |
+
|
214 |
+
# New advertiser?
|
215 |
+
if(!$advertisement_id) {
|
216 |
+
$api = Broadstreet_Mini_Utility::getClient();
|
217 |
+
$adv = $api->createAdvertiser(Broadstreet_Mini_Utility::getNetworkID(), $instance['w_adv']);
|
218 |
+
$instance['bs_adv_id'] = $adv->id;
|
219 |
+
}
|
220 |
+
|
221 |
+
$ad = Broadstreet_Mini_Utility::importHTMLAd(Broadstreet_Mini_Utility::getNetworkID(),
|
222 |
+
$instance['bs_adv_id'],
|
223 |
+
$instance['w_adcode'],
|
224 |
+
$advertisement_id);
|
225 |
+
|
226 |
+
if(!$advertisement_id) {
|
227 |
+
$instance['bs_ad_html'] = $ad->html;
|
228 |
+
$instance['bs_ad_id'] = $ad->id;
|
229 |
+
$instance['bs_adv_id'] = $adv->id;
|
230 |
+
}
|
231 |
+
}
|
232 |
|
233 |
return $instance;
|
234 |
}
|
240 |
function form($instance)
|
241 |
{
|
242 |
|
243 |
+
$defaults = array('w_adcode' => '', 'w_adv' => 'New Advertiser');
|
244 |
$instance = wp_parse_args((array) $instance, $defaults);
|
245 |
?>
|
246 |
<div class="widget-content">
|
248 |
<p>
|
249 |
<label for="<?php echo $this->get_field_id('w_adcode'); ?>">Ad Code</label>
|
250 |
<textarea style="height: 100px;" class="widefat" id="<?php echo $this->get_field_id( 'w_adcode' ); ?>" name="<?php echo $this->get_field_name('w_adcode'); ?>"><?php echo $instance['w_adcode']; ?></textarea>
|
251 |
+
</p>
|
252 |
+
<p>
|
253 |
+
<label for="<?php echo $this->get_field_id('w_adv'); ?>">Advertiser Name</label>
|
254 |
+
<input class="widefat" type="text" id="<?php echo $this->get_field_id('w_adv'); ?>" name="<?php echo $this->get_field_name('w_adv'); ?>" value="<?php echo $instance['w_adv']; ?>" />
|
255 |
</p>
|
256 |
</div>
|
257 |
<?php
|
284 |
$link = @$instance['w_link'];
|
285 |
$img = @$instance['w_img'];
|
286 |
$resize = @$instance['w_resize'];
|
287 |
+
$id = rand(1, 100000);
|
288 |
|
289 |
if($resize == 'yes')
|
290 |
{
|
291 |
+
$resize_s = "style='width: 100%;'";
|
292 |
+
}
|
293 |
+
else
|
294 |
+
{
|
295 |
+
$resize_s = '';
|
296 |
}
|
297 |
|
298 |
echo $before_widget;
|
302 |
$img = AdWidget_Core::getBaseURL() . 'assets/sample-ad.png';
|
303 |
$link = 'http://adsofthefuture.com';
|
304 |
}
|
305 |
+
|
306 |
+
if(Broadstreet_Mini_Utility::hasAdserving() && is_numeric($instance['bs_ad_id']))
|
307 |
+
{
|
308 |
+
if($resize == 'yes') echo '<style type="text/css">.adwidget-id'.$id.' img { width: 100% !important; height: auto !important; }</style>';
|
309 |
+
echo "<span class='adwidget-id$id'>{$instance['bs_ad_html']}</span>";
|
310 |
+
}
|
311 |
+
else
|
312 |
+
{
|
313 |
+
echo "<a target='_blank' href='$link' alt='Ad'><img $resize_s src='$img' alt='Ad' /></a>";
|
314 |
+
}
|
315 |
|
316 |
echo $after_widget;
|
317 |
}
|
325 |
function update($new_instance, $old_instance)
|
326 |
{
|
327 |
$instance = $old_instance;
|
328 |
+
|
329 |
+
$changed = ($instance['w_img'] != $new_instance['w_img']
|
330 |
+
|| $instance['w_link'] !== $new_instance['w_link']);
|
331 |
|
332 |
$instance['w_link'] = $new_instance['w_link'];
|
333 |
$instance['w_img'] = $new_instance['w_img'];
|
334 |
+
$instance['w_resize'] = @$new_instance['w_resize'];
|
335 |
+
$instance['w_adv'] = $new_instance['w_adv'];
|
336 |
+
|
337 |
+
/* New ad? Upload it to Broadstreet */
|
338 |
+
if($instance['w_img'] && $changed && Broadstreet_Mini_Utility::hasAdserving()) {
|
339 |
+
|
340 |
+
$advertisement_id = false;
|
341 |
+
# New ad?
|
342 |
+
if(is_numeric(@$instance['bs_ad_id'])) $advertisement_id = $instance['bs_ad_id'];
|
343 |
+
|
344 |
+
# New advertiser?
|
345 |
+
if(!$advertisement_id) {
|
346 |
+
$api = Broadstreet_Mini_Utility::getClient();
|
347 |
+
$adv = $api->createAdvertiser(Broadstreet_Mini_Utility::getNetworkID(), $instance['w_adv']);
|
348 |
+
$instance['bs_adv_id'] = $adv->id;
|
349 |
+
}
|
350 |
+
|
351 |
+
$ad = Broadstreet_Mini_Utility::importImageAd(Broadstreet_Mini_Utility::getNetworkID(),
|
352 |
+
$instance['bs_adv_id'],
|
353 |
+
$instance['w_img'],
|
354 |
+
$instance['w_link'],
|
355 |
+
$advertisement_id);
|
356 |
+
|
357 |
+
if(!$advertisement_id) {
|
358 |
+
$instance['bs_ad_html'] = $ad->html;
|
359 |
+
$instance['bs_ad_id'] = $ad->id;
|
360 |
+
$instance['bs_adv_id'] = $adv->id;
|
361 |
+
}
|
362 |
+
}
|
363 |
|
364 |
return $instance;
|
365 |
}
|
373 |
$link_id = $this->get_field_id('w_link');
|
374 |
$img_id = $this->get_field_id('w_img');
|
375 |
|
376 |
+
$defaults = array('w_link' => get_bloginfo('url'), 'w_img' => '', 'w_adv' => 'New Advertiser', 'w_resize' => 'no');
|
377 |
|
378 |
$instance = wp_parse_args((array) $instance, $defaults);
|
379 |
|
380 |
+
$img = $instance['w_img'];
|
381 |
$link = $instance['w_link'];
|
382 |
+
$adv = $instance['w_adv'];
|
383 |
+
|
384 |
?>
|
385 |
<div class="widget-content">
|
386 |
<p style="text-align: center;" class="bs-proof">
|
387 |
<?php if($instance['w_img']): ?>
|
388 |
Your ad is ready.
|
389 |
<br/><br/><strong>Scaled Visual:</strong><br/>
|
390 |
+
<div class="bs-proof"><img style="width:100%;" src="<?php echo $instance['w_img'] ?>" alt="Ad" /></div><br/>
|
|
|
|
|
391 |
<?php endif; ?>
|
392 |
+
<a href="#" class="upload-button" rel="<?php echo $img_id ?>">Click here to upload a new image.</a> You can also paste in an image URL below.
|
393 |
+
|
394 |
</p>
|
395 |
<input class="widefat tag" placeholder="Image URL" type="text" id="<?php echo $img_id; ?>" name="<?php echo $this->get_field_name('w_img'); ?>" value="<?php echo htmlentities($instance['w_img']); ?>" />
|
396 |
<br/><br/>
|
398 |
<label for="<?php echo $this->get_field_id('w_link'); ?>">Ad Click Destination:</label><br/>
|
399 |
<input class="widefat" type="text" id="<?php echo $this->get_field_id('w_link'); ?>" name="<?php echo $this->get_field_name('w_link'); ?>" value="<?php echo $instance['w_link']; ?>" />
|
400 |
</p>
|
401 |
+
<p>
|
402 |
+
<label for="<?php echo $this->get_field_id('w_adv'); ?>">Advertiser Name:</label><br/>
|
403 |
+
<input class="widefat" type="text" id="<?php echo $this->get_field_id('w_adv'); ?>" name="<?php echo $this->get_field_name('w_adv'); ?>" value="<?php echo $instance['w_adv']; ?>" />
|
404 |
+
</p>
|
405 |
<p>
|
406 |
<label for="<?php echo $this->get_field_id('w_resize'); ?>">Auto Resize to Max Width? </label>
|
407 |
<input type="checkbox" name="<?php echo $this->get_field_name('w_resize'); ?>" value="yes" <?php if($instance['w_resize'] == 'yes') echo 'checked'; ?> />
|
408 |
</p>
|
409 |
+
<?php if(!Broadstreet_Mini_Utility::hasAdserving()): ?>
|
410 |
+
<p>
|
411 |
+
<span style="color: green; font-weight: bold;">New!</span> When you're ready for a more powerful adserver with click reporting <a target="_blank" href="#" onclick="broadstreet_upgrade(); return false;">click here</a>.
|
412 |
+
<script language="javascript">
|
413 |
+
if(!window.broadstreet_upgrade)
|
414 |
+
{
|
415 |
+
function broadstreet_upgrade()
|
416 |
+
{
|
417 |
+
window.send_to_editor = function(html) {
|
418 |
+
tb_remove();
|
419 |
+
alert('Save any unsaved widgets and refresh this page to see new upgraded options');
|
420 |
+
};
|
421 |
+
|
422 |
+
tb_show('Broadstreet', '<?php echo bs_get_base_url('views/modal/') ?>' + '?fake=fake&width=650&height=580&TB_iframe=true');
|
423 |
+
}
|
424 |
+
}
|
425 |
+
</script>
|
426 |
+
</p>
|
427 |
+
<?php elseif(isset($instance['bs_ad_id'])): ?>
|
428 |
<p>
|
429 |
+
Reporting: <a target="_blank" href="#" onclick="broadstreet_reports(); return false;">View stats for clicks and views</a>
|
430 |
+
<script language="javascript">
|
431 |
+
if(!window.broadstreet_reports)
|
432 |
+
{
|
433 |
+
function broadstreet_reports()
|
434 |
+
{
|
435 |
+
window.send_to_editor = function(html) {
|
436 |
+
tb_remove();
|
437 |
+
};
|
438 |
+
|
439 |
+
tb_show('Broadstreet', '<?php echo bs_get_base_url('views/modal/?step=reports&adv_id=' . @$instance['bs_adv_id'] . '&ad_id=' . @$instance['bs_ad_id']) ?>' + '&width=650&height=580&TB_iframe=true');
|
440 |
+
}
|
441 |
+
}
|
442 |
+
</script>
|
443 |
</p>
|
444 |
+
<?php endif; ?>
|
445 |
</div>
|
446 |
<?php
|
447 |
}
|
448 |
}
|
|
|
|
|
|
|
|
lib/Broadstreet.php
ADDED
@@ -0,0 +1,456 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* This is the PHP client for Broadstreet
|
4 |
+
* @link http://broadstreetads.com
|
5 |
+
* @author Broadstreet Ads <labs@broadstreetads.com>
|
6 |
+
*/
|
7 |
+
|
8 |
+
if(!class_exists('Broadstreet')):
|
9 |
+
|
10 |
+
/**
|
11 |
+
* This is the PHP client and class for Broadstreet
|
12 |
+
* It requires cURL
|
13 |
+
*/
|
14 |
+
class Broadstreet
|
15 |
+
{
|
16 |
+
const API_VERSION = '0';
|
17 |
+
|
18 |
+
/**
|
19 |
+
* The API Key used for auth
|
20 |
+
* @var string
|
21 |
+
*/
|
22 |
+
protected $accessToken = null;
|
23 |
+
|
24 |
+
/**
|
25 |
+
* The hostname to point at
|
26 |
+
* @var string
|
27 |
+
*/
|
28 |
+
protected $host = 'api.broadstreetads.com';
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Use SSL? You should.
|
32 |
+
* @var bool
|
33 |
+
*/
|
34 |
+
protected $use_ssl = true;
|
35 |
+
|
36 |
+
/**
|
37 |
+
* The constructor
|
38 |
+
* @param string $access_token A user's access token
|
39 |
+
* @param string $host The API endpoint host. Optional. Defaults to
|
40 |
+
* api.broadstreetads.com
|
41 |
+
*/
|
42 |
+
public function __construct($access_token = null, $host = null, $secure = true)
|
43 |
+
{
|
44 |
+
if($host !== null)
|
45 |
+
{
|
46 |
+
$this->host = $host;
|
47 |
+
}
|
48 |
+
|
49 |
+
$this->accessToken = $access_token;
|
50 |
+
$this->use_ssl = $secure;
|
51 |
+
|
52 |
+
/* Define cURL constants if needed */
|
53 |
+
if(!defined('CURLOPT_POST'))
|
54 |
+
{
|
55 |
+
define('CURLOPT_POST', 47);
|
56 |
+
define('CURLOPT_POSTFIELDS', 10015);
|
57 |
+
define('CURLOPT_RETURNTRANSFER', 19913);
|
58 |
+
define('CURLOPT_CUSTOMREQUEST', 10036);
|
59 |
+
define('CURLINFO_HTTP_CODE', 2097154);
|
60 |
+
}
|
61 |
+
}
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Magically get back business data based off a seed URL
|
65 |
+
* @param string $seed_url
|
66 |
+
* @param int $network_id
|
67 |
+
*/
|
68 |
+
public function magicImport($seed_url, $network_id)
|
69 |
+
{
|
70 |
+
return $this->_get("/networks/$network_id/import", array(), array('lookup' => $seed_url))->body;
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* Create an advertiser
|
75 |
+
* @param string $name The name of the advertiser
|
76 |
+
* @return mixed
|
77 |
+
*/
|
78 |
+
public function createAdvertiser($network_id, $name)
|
79 |
+
{
|
80 |
+
return $this->_post("/networks/$network_id/advertisers", array('name' => $name))->body->advertiser;
|
81 |
+
}
|
82 |
+
|
83 |
+
/**
|
84 |
+
* Create an advertisement
|
85 |
+
* @param string $name The name of the advertisement
|
86 |
+
* @param string $type The type of advertisement
|
87 |
+
* @return mixed
|
88 |
+
*/
|
89 |
+
public function createAdvertisement($network_id, $advertiser_id, $name, $type, $options = array())
|
90 |
+
{
|
91 |
+
$params = array('name' => $name, 'type' => $type) + $options;
|
92 |
+
|
93 |
+
return $this->_post("/networks/$network_id/advertisers/$advertiser_id/advertisements", $params)->body->advertisement;
|
94 |
+
}
|
95 |
+
|
96 |
+
/**
|
97 |
+
* Create a network
|
98 |
+
* @param string $name The name of the network
|
99 |
+
* @param array $options An array of options
|
100 |
+
*/
|
101 |
+
public function createNetwork($name, $options = array())
|
102 |
+
{
|
103 |
+
$options['name'] = $name;
|
104 |
+
return $this->_post("/networks", $options)->body->network;
|
105 |
+
}
|
106 |
+
|
107 |
+
/**
|
108 |
+
* Create a basic user
|
109 |
+
* @param string $email
|
110 |
+
*/
|
111 |
+
public function createUser($email)
|
112 |
+
{
|
113 |
+
return $this->_post($email, $data);
|
114 |
+
}
|
115 |
+
|
116 |
+
/**
|
117 |
+
* Create a proof
|
118 |
+
* @param array $params
|
119 |
+
*/
|
120 |
+
public function createProof($params)
|
121 |
+
{
|
122 |
+
return $this->_post("/advertisements/proof", $params)->body->proof;
|
123 |
+
}
|
124 |
+
|
125 |
+
/**
|
126 |
+
* Log in to the API, get an access token back
|
127 |
+
* @param string $username
|
128 |
+
* @param string $password
|
129 |
+
*/
|
130 |
+
public function login($email, $password)
|
131 |
+
{
|
132 |
+
$params = array('email' => $email, 'password' => $password);
|
133 |
+
$response = $this->_post("/sessions", $params)->body->user;
|
134 |
+
|
135 |
+
$this->accessToken = $response->access_token;
|
136 |
+
|
137 |
+
# Store access token
|
138 |
+
return $response;
|
139 |
+
}
|
140 |
+
|
141 |
+
/**
|
142 |
+
* Register a new user
|
143 |
+
* @param string $username
|
144 |
+
* @param string $password
|
145 |
+
*/
|
146 |
+
public function register($email)
|
147 |
+
{
|
148 |
+
$params = array('email' => $email);
|
149 |
+
$response = $this->_post("/users", $params)->body->user;
|
150 |
+
|
151 |
+
$this->accessToken = $response->access_token;
|
152 |
+
|
153 |
+
# Store access token
|
154 |
+
return $response;
|
155 |
+
}
|
156 |
+
|
157 |
+
/**
|
158 |
+
* Get a list of fonts supported by Broadstreet
|
159 |
+
*/
|
160 |
+
public function getFonts()
|
161 |
+
{
|
162 |
+
return $this->_get("/fonts")->body->fonts;
|
163 |
+
}
|
164 |
+
|
165 |
+
/**
|
166 |
+
* Get base account information for a network, including whether a card is
|
167 |
+
* on file, the cost of an import (in cents), etc
|
168 |
+
* @param int $network_id
|
169 |
+
*/
|
170 |
+
public function getNetwork($network_id)
|
171 |
+
{
|
172 |
+
return $this->_get("/networks/$network_id")->body->network;
|
173 |
+
}
|
174 |
+
|
175 |
+
/**
|
176 |
+
* Update an advertisement
|
177 |
+
* @param string $name The name of the advertisement
|
178 |
+
* @param string $type The type of advertisement
|
179 |
+
* @return mixed
|
180 |
+
*/
|
181 |
+
public function updateAdvertisement($network_id, $advertiser_id, $advertisement_id, $params = array())
|
182 |
+
{
|
183 |
+
return $this->_put("/networks/$network_id/advertisers/$advertiser_id/advertisements/$advertisement_id", $params)->body->advertisement;
|
184 |
+
}
|
185 |
+
|
186 |
+
/**
|
187 |
+
* Get a list of advertisers this token has access to
|
188 |
+
*/
|
189 |
+
public function getAdvertisers($network_id)
|
190 |
+
{
|
191 |
+
return $this->_get("/networks/$network_id/advertisers")->body->advertisers;
|
192 |
+
}
|
193 |
+
|
194 |
+
/**
|
195 |
+
* Get information about a given advertisement
|
196 |
+
* @param int $network_id
|
197 |
+
* @param int $advertiser_id
|
198 |
+
* @param int $advertisement_id
|
199 |
+
* @return object
|
200 |
+
*/
|
201 |
+
public function getAdvertisement($network_id, $advertiser_id, $advertisement_id)
|
202 |
+
{
|
203 |
+
return $this->_get("/networks/$network_id/advertisers/$advertiser_id/advertisements/$advertisement_id")
|
204 |
+
->body->advertisement;
|
205 |
+
}
|
206 |
+
|
207 |
+
/**
|
208 |
+
* Get information about a given advertisement source
|
209 |
+
* @param int $network_id
|
210 |
+
* @param int $advertiser_id
|
211 |
+
* @param int $advertisement_id
|
212 |
+
* @return object
|
213 |
+
*/
|
214 |
+
public function getAdvertisementSource($network_id, $advertiser_id, $advertisement_id)
|
215 |
+
{
|
216 |
+
return $this->_get("/networks/$network_id/advertisers/$advertiser_id/advertisements/$advertisement_id/source")
|
217 |
+
->body->source;
|
218 |
+
}
|
219 |
+
|
220 |
+
/**
|
221 |
+
* Get a list of networks this token has access to
|
222 |
+
* @return array
|
223 |
+
*/
|
224 |
+
public function getNetworks()
|
225 |
+
{
|
226 |
+
return $this->_get('/networks')->body->networks;
|
227 |
+
}
|
228 |
+
|
229 |
+
/**
|
230 |
+
* Get a report for a given advertisement for the last x days
|
231 |
+
* @param type $network_id
|
232 |
+
* @param type $advertiser_id
|
233 |
+
* @param type $advertisement_id
|
234 |
+
* @param type $start_date
|
235 |
+
* @param type $end_date
|
236 |
+
* @return type
|
237 |
+
*/
|
238 |
+
public function getAdvertisementReport($network_id, $advertiser_id, $advertisement_id, $start_date = false, $end_date = false)
|
239 |
+
{
|
240 |
+
return $this->_get("/networks/$network_id/advertisers/$advertiser_id/advertisements/$advertisement_id/records", array(), array (
|
241 |
+
'start_date' => $start_date,
|
242 |
+
'end_date' => $end_date
|
243 |
+
))->body->records;
|
244 |
+
}
|
245 |
+
|
246 |
+
/**
|
247 |
+
* Get a list of zones under a network
|
248 |
+
* @return object
|
249 |
+
*/
|
250 |
+
public function getNetworkZones($network_id)
|
251 |
+
{
|
252 |
+
return $this->_get("/networks/$network_id/zones")->body->zones;
|
253 |
+
}
|
254 |
+
|
255 |
+
/**
|
256 |
+
* The the update source of an advertisement
|
257 |
+
* @param int $network_id
|
258 |
+
* @param int $advertiser_id
|
259 |
+
* @param int $advertisement_id
|
260 |
+
* @param string $type
|
261 |
+
* @param array $options
|
262 |
+
* @return object
|
263 |
+
*/
|
264 |
+
public function setAdvertisementSource($network_id, $advertiser_id, $advertisement_id, $type, $options = array())
|
265 |
+
{
|
266 |
+
$params = array('type' => $type) + $options;
|
267 |
+
|
268 |
+
return $this->_post("/networks/$network_id/advertisers/$advertiser_id/advertisements/$advertisement_id/source", $params)
|
269 |
+
->body->advertisement;
|
270 |
+
}
|
271 |
+
|
272 |
+
/**
|
273 |
+
* Gets a response from the server
|
274 |
+
* @param string $uri
|
275 |
+
* @param array $options
|
276 |
+
* @param array $query_args
|
277 |
+
* @return type
|
278 |
+
* @throws Broadstreet_DependencyException
|
279 |
+
* @throws Broadstreet_AuthException
|
280 |
+
*/
|
281 |
+
protected function _get($uri, $options = array(), $query_args = array())
|
282 |
+
{
|
283 |
+
$url = $this->_buildRequestURL($uri, $query_args);
|
284 |
+
|
285 |
+
# If the Wordpress HTTP library is loaded, use it
|
286 |
+
if(function_exists('wp_remote_post'))
|
287 |
+
{
|
288 |
+
list($body, $status) = $this->_wpGet($url, $options);
|
289 |
+
}
|
290 |
+
else
|
291 |
+
{
|
292 |
+
# Fallback to cURL
|
293 |
+
if(!function_exists('curl_exec'))
|
294 |
+
{
|
295 |
+
throw new Broadstreet_DependencyException("The cURL module must be installed");
|
296 |
+
}
|
297 |
+
|
298 |
+
list($body, $status) = $this->_curlGet($url, $options);
|
299 |
+
}
|
300 |
+
|
301 |
+
if($status == '403')
|
302 |
+
{
|
303 |
+
throw new Broadstreet_ServerException("Broadstreet API Auth Denied (HTTP 403)", @json_decode($body));
|
304 |
+
}
|
305 |
+
|
306 |
+
if($status == '500')
|
307 |
+
{
|
308 |
+
throw new Broadstreet_ServerException("Broadstreet API had a 500 error");
|
309 |
+
}
|
310 |
+
|
311 |
+
if($status[0] != '2')
|
312 |
+
{
|
313 |
+
throw new Broadstreet_ServerException("Server threw HTTP $status for call to $uri with cURL params " . print_r($options, true) . "; Response: " . $body, @json_decode($body));
|
314 |
+
}
|
315 |
+
|
316 |
+
return (object)(array('url' => $url, 'body' => @json_decode($body), 'status' => $status));
|
317 |
+
}
|
318 |
+
|
319 |
+
/**
|
320 |
+
* Issue a network request using the built-in Wordpress libraries
|
321 |
+
* Intended for use within Wordpress for extra portability
|
322 |
+
* @param string $url
|
323 |
+
* @param array $options cURL options. Limited support
|
324 |
+
* @return array(body, status_code)
|
325 |
+
*/
|
326 |
+
protected function _wpGet($url, $options = array())
|
327 |
+
{
|
328 |
+
$params = array (
|
329 |
+
'method' => 'GET',
|
330 |
+
'timeout' => 25,
|
331 |
+
'redirection' => 5,
|
332 |
+
'httpversion' => '1.0',
|
333 |
+
'blocking' => true
|
334 |
+
);
|
335 |
+
|
336 |
+
# Handle POST Requests
|
337 |
+
if(isset($options[CURLOPT_POST]))
|
338 |
+
{
|
339 |
+
$params['method'] = 'POST';
|
340 |
+
$params['body'] = $options[CURLOPT_POSTFIELDS];
|
341 |
+
}
|
342 |
+
|
343 |
+
# Handle PUT
|
344 |
+
if(isset($options[CURLOPT_CUSTOMREQUEST])
|
345 |
+
&& $options[CURLOPT_CUSTOMREQUEST] == 'PUT')
|
346 |
+
{
|
347 |
+
$params['method'] = 'PUT';
|
348 |
+
$params['body'] = $options[CURLOPT_POSTFIELDS];
|
349 |
+
}
|
350 |
+
|
351 |
+
$body = '{}';
|
352 |
+
$status = false;
|
353 |
+
$response = @wp_remote_post($url, $params);
|
354 |
+
|
355 |
+
if(isset($response['response'])
|
356 |
+
&& isset($response['body'])
|
357 |
+
&& isset($response['response']['code']))
|
358 |
+
{
|
359 |
+
$body = $response['body'];
|
360 |
+
$status = (string)$response['response']['code'];
|
361 |
+
}
|
362 |
+
|
363 |
+
return array($body, $status);
|
364 |
+
}
|
365 |
+
|
366 |
+
/**
|
367 |
+
* Issue a network request using cURL
|
368 |
+
* @param string $url
|
369 |
+
* @param array $options
|
370 |
+
* @return array(body, status_code)
|
371 |
+
*/
|
372 |
+
protected function _curlGet($url, $options = array())
|
373 |
+
{
|
374 |
+
$curl_handle = curl_init($url);
|
375 |
+
$options += array(CURLOPT_RETURNTRANSFER => true);
|
376 |
+
|
377 |
+
curl_setopt_array($curl_handle, $options);
|
378 |
+
|
379 |
+
$body = curl_exec($curl_handle);
|
380 |
+
$status = (string)curl_getinfo($curl_handle, CURLINFO_HTTP_CODE);
|
381 |
+
|
382 |
+
return array($body, $status);
|
383 |
+
}
|
384 |
+
|
385 |
+
|
386 |
+
/**
|
387 |
+
* POST data to the server
|
388 |
+
* @param string $uri
|
389 |
+
* @param array $data Assoc. array of post data
|
390 |
+
* @return mixed
|
391 |
+
*/
|
392 |
+
protected function _post($uri, $data)
|
393 |
+
{
|
394 |
+
return $this->_get($uri, array(
|
395 |
+
CURLOPT_POST => true,
|
396 |
+
CURLOPT_POSTFIELDS => $data)
|
397 |
+
);
|
398 |
+
}
|
399 |
+
|
400 |
+
/**
|
401 |
+
* PUT data to the server
|
402 |
+
* @param string $uri
|
403 |
+
* @param array $data Assoc. array of post data
|
404 |
+
* @return mixed
|
405 |
+
*/
|
406 |
+
public function _put($uri, $data = false, $options = array())
|
407 |
+
{
|
408 |
+
$data = http_build_query($data);
|
409 |
+
|
410 |
+
$options = array (
|
411 |
+
CURLOPT_CUSTOMREQUEST => 'PUT',
|
412 |
+
CURLOPT_POSTFIELDS => $data
|
413 |
+
) + $options;
|
414 |
+
|
415 |
+
$result = $this->_get($uri, $options);
|
416 |
+
|
417 |
+
return $result;
|
418 |
+
}
|
419 |
+
|
420 |
+
/**
|
421 |
+
* Build a valid request URL from the URI given and the API key
|
422 |
+
* @param string $uri
|
423 |
+
* @return string
|
424 |
+
*/
|
425 |
+
protected function _buildRequestURL($uri, $query_args = array())
|
426 |
+
{
|
427 |
+
$uri = ltrim($uri, '/');
|
428 |
+
|
429 |
+
return ($this->use_ssl ? 'http://' : 'http://')
|
430 |
+
. $this->host
|
431 |
+
. '/api/'
|
432 |
+
. self::API_VERSION
|
433 |
+
. '/'
|
434 |
+
. $uri
|
435 |
+
. (count($query_args) ? '?' . http_build_query($query_args) : '')
|
436 |
+
. (count($query_args) ? '&' : '?')
|
437 |
+
. ($this->accessToken ? "access_token={$this->accessToken}" : '');
|
438 |
+
}
|
439 |
+
}
|
440 |
+
|
441 |
+
class Broadstreet_GeneralException extends Exception {}
|
442 |
+
class Broadstreet_DependencyException extends Broadstreet_GeneralException {}
|
443 |
+
class Broadstreet_AuthException extends Broadstreet_GeneralException {}
|
444 |
+
class Broadstreet_ServerException extends Broadstreet_GeneralException {
|
445 |
+
/**
|
446 |
+
* The error object
|
447 |
+
* @var object
|
448 |
+
*/
|
449 |
+
public $error;
|
450 |
+
public function __construct($message, $error = '') {
|
451 |
+
$this->error = $error;
|
452 |
+
parent::__construct($message);
|
453 |
+
}
|
454 |
+
}
|
455 |
+
|
456 |
+
endif;
|
lib/Utility.php
ADDED
@@ -0,0 +1,430 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require 'Broadstreet.php';
|
4 |
+
|
5 |
+
if(!class_exists('Broadstreet_Mini_Utility')):
|
6 |
+
|
7 |
+
function bs_get_option($name, $default = FALSE)
|
8 |
+
{
|
9 |
+
$value = get_option($name);
|
10 |
+
if( $value !== FALSE ) return $value;
|
11 |
+
return $default;
|
12 |
+
}
|
13 |
+
|
14 |
+
function bs_set_option($name, $value)
|
15 |
+
{
|
16 |
+
if (get_option($name) !== FALSE)
|
17 |
+
{
|
18 |
+
update_option($name, $value);
|
19 |
+
}
|
20 |
+
else
|
21 |
+
{
|
22 |
+
$deprecated = ' ';
|
23 |
+
$autoload = 'no';
|
24 |
+
add_option($name, $value, $deprecated, $autoload);
|
25 |
+
}
|
26 |
+
}
|
27 |
+
|
28 |
+
function bs_get_base_url($append = false)
|
29 |
+
{
|
30 |
+
$dir = basename(dirname(__FILE__));
|
31 |
+
return (WP_PLUGIN_URL . "/ad-widget/" . ($append ? $append : ''));
|
32 |
+
}
|
33 |
+
|
34 |
+
function bs_get_email()
|
35 |
+
{
|
36 |
+
return get_bloginfo('admin_email');
|
37 |
+
}
|
38 |
+
|
39 |
+
function bs_get_website()
|
40 |
+
{
|
41 |
+
return get_bloginfo('url');
|
42 |
+
}
|
43 |
+
|
44 |
+
function bs_get_website_name()
|
45 |
+
{
|
46 |
+
return get_bloginfo('url');
|
47 |
+
}
|
48 |
+
|
49 |
+
function bs_get_platform_version()
|
50 |
+
{
|
51 |
+
return get_bloginfo('version');
|
52 |
+
}
|
53 |
+
|
54 |
+
|
55 |
+
function bs_mail($to, $subject, $body)
|
56 |
+
{
|
57 |
+
@wp_mail($to, $subject, $body);
|
58 |
+
}
|
59 |
+
|
60 |
+
|
61 |
+
class Broadstreet_Mini_Utility
|
62 |
+
{
|
63 |
+
CONST KEY_ADSERVER_ENABLED = 'Broadstreet_Adserver_Enabled';
|
64 |
+
CONST KEY_API_KEY = 'Broadstreet_API_Key';
|
65 |
+
CONST KEY_NETWORK_ID = 'Broadstreet_Network_Key';
|
66 |
+
CONST KEY_ADVERTISER_ID = 'Broadstreet_Advertiser_Key';
|
67 |
+
CONST KEY_AD_LIST = 'Broadstreet_Ad_List';
|
68 |
+
|
69 |
+
/**
|
70 |
+
* Get the base URL of the Broadstreet Mini vendor plugin
|
71 |
+
* @param string $append A path to append to the base url
|
72 |
+
* @return string The final path
|
73 |
+
*/
|
74 |
+
public static function getBaseURL($append = false)
|
75 |
+
{
|
76 |
+
return bs_get_base_url($append);
|
77 |
+
}
|
78 |
+
|
79 |
+
/**
|
80 |
+
* Sets a Wordpress option
|
81 |
+
* @param string $name The name of the option to set
|
82 |
+
* @param string $value The value of the option to set
|
83 |
+
*/
|
84 |
+
public static function setOption($name, $value)
|
85 |
+
{
|
86 |
+
return bs_set_option($name, $value);
|
87 |
+
}
|
88 |
+
|
89 |
+
/**
|
90 |
+
* Gets a Wordpress option
|
91 |
+
* @param string $name The name of the option
|
92 |
+
* @param mixed $default The default value to return if one doesn't exist
|
93 |
+
* @return string The value if the option does exist
|
94 |
+
*/
|
95 |
+
public static function getOption($name, $default = FALSE)
|
96 |
+
{
|
97 |
+
return bs_get_option($name, $default);
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* Send an email about an error, issue, etc
|
102 |
+
*/
|
103 |
+
public static function sendReport($message = 'General')
|
104 |
+
{
|
105 |
+
$report = "";
|
106 |
+
$report .= bs_get_website_name(). "\n";
|
107 |
+
$report .= bs_get_website(). "\n";
|
108 |
+
$report .= bs_get_email(). "\n";
|
109 |
+
$report .= 'Platform Version: ' . bs_get_platform_version() . "\n";
|
110 |
+
$report .= "$message\n";
|
111 |
+
|
112 |
+
@bs_mail('errors@broadstreetads.com', "Status Report: WP AdWidget", $report);
|
113 |
+
}
|
114 |
+
|
115 |
+
/**
|
116 |
+
* Get a link to the Broadstreet interface
|
117 |
+
* @param string $path
|
118 |
+
* @return string
|
119 |
+
*/
|
120 |
+
public static function broadstreetLink($path)
|
121 |
+
{
|
122 |
+
$path = ltrim($path, '/');
|
123 |
+
$key = self::getOption(Broadstreet_Mini::KEY_API_KEY);
|
124 |
+
$url = "https://my.broadstreetads.com/$path?access_token=$key";
|
125 |
+
return $url;
|
126 |
+
}
|
127 |
+
|
128 |
+
/**
|
129 |
+
* Get a key from an array without causing hell
|
130 |
+
* @param array $array
|
131 |
+
* @param string $key
|
132 |
+
* @param bool $default
|
133 |
+
*/
|
134 |
+
public static function arrayGet($array, $key, $default = null)
|
135 |
+
{
|
136 |
+
if(isset($array[$key]))
|
137 |
+
return $array[$key];
|
138 |
+
|
139 |
+
return $default;
|
140 |
+
}
|
141 |
+
|
142 |
+
/**
|
143 |
+
* Get a nice string for an error message
|
144 |
+
* @param Broadstreet_ServerException $ex
|
145 |
+
*/
|
146 |
+
public static function getPrettyError(Broadstreet_ServerException $ex)
|
147 |
+
{
|
148 |
+
$error = '';
|
149 |
+
|
150 |
+
if($ex instanceof Broadstreet_ServerException)
|
151 |
+
{
|
152 |
+
$error = 'Please check these item(s) are correct: <br />';
|
153 |
+
$api_response = (array)$ex->error;
|
154 |
+
|
155 |
+
foreach($api_response['errors'] as $field => $errors)
|
156 |
+
{
|
157 |
+
$error .= ucwords(str_replace('_', ' ', $field)) . '<br />';
|
158 |
+
}
|
159 |
+
}
|
160 |
+
|
161 |
+
return $error;
|
162 |
+
}
|
163 |
+
|
164 |
+
/*
|
165 |
+
* Determine whether the current site has been hooked up
|
166 |
+
* with Broadstreet
|
167 |
+
*/
|
168 |
+
public static function hasNetwork()
|
169 |
+
{
|
170 |
+
return (bool)self::getOption(self::KEY_NETWORK_ID, false);
|
171 |
+
}
|
172 |
+
|
173 |
+
/*
|
174 |
+
* Determine whether the current site has been hooked up
|
175 |
+
* with Broadstreet
|
176 |
+
*/
|
177 |
+
public static function hasAdserving($enabled = null, $email = false)
|
178 |
+
{
|
179 |
+
$success = false;
|
180 |
+
if($enabled !== null) {
|
181 |
+
self::setOption (Broadstreet_Mini_Utility::KEY_ADSERVER_ENABLED, (bool)$enabled);
|
182 |
+
$message = $enabled ? 'Subscribed' : 'Unsubscribed';
|
183 |
+
if($enabled) $success = self::importOldAds($email);
|
184 |
+
if($success) self::sendReport("Premium Adserver $message");
|
185 |
+
return $success;
|
186 |
+
} else {
|
187 |
+
return (bool)self::getOption(self::KEY_ADSERVER_ENABLED, false);
|
188 |
+
}
|
189 |
+
}
|
190 |
+
|
191 |
+
/*
|
192 |
+
* Determine whether the current site has been hooked up
|
193 |
+
* with Broadstreet
|
194 |
+
*/
|
195 |
+
public static function getNetworkID()
|
196 |
+
{
|
197 |
+
return self::getOption(self::KEY_NETWORK_ID, false);
|
198 |
+
}
|
199 |
+
|
200 |
+
/**
|
201 |
+
* Escape a javascript tag
|
202 |
+
* @param string $tag
|
203 |
+
*/
|
204 |
+
public static function escapeJSTag($tag)
|
205 |
+
{
|
206 |
+
$tag = str_ireplace('<script>', '\x3Cscript>', $tag);
|
207 |
+
$tag = str_ireplace('</script>', '\x3C/script>', $tag);
|
208 |
+
|
209 |
+
return $tag;
|
210 |
+
}
|
211 |
+
|
212 |
+
/**
|
213 |
+
* Get a Broadstreet API client
|
214 |
+
* @return Broadstreet
|
215 |
+
*/
|
216 |
+
public static function getClient()
|
217 |
+
{
|
218 |
+
$key = self::getOption(self::KEY_API_KEY);
|
219 |
+
|
220 |
+
if($key)
|
221 |
+
return new Broadstreet($key);
|
222 |
+
else
|
223 |
+
return new Broadstreet();
|
224 |
+
}
|
225 |
+
|
226 |
+
/**
|
227 |
+
* Does this account have any free ads left?
|
228 |
+
*/
|
229 |
+
public static function hasFreeAds()
|
230 |
+
{
|
231 |
+
$net_id = self::getOption(Broadstreet_Mini::KEY_NETWORK_ID);
|
232 |
+
|
233 |
+
# If we haven't seen them before they probably do
|
234 |
+
if(!$net_id) return true;
|
235 |
+
|
236 |
+
$net = self::getClient()->getNetwork($net_id);
|
237 |
+
|
238 |
+
# Check if you've used up all the hacks
|
239 |
+
# Note to l33t haxors. We check on the server side too.
|
240 |
+
return ($net->comp_count < $net->comp_count_max);
|
241 |
+
}
|
242 |
+
|
243 |
+
/**
|
244 |
+
* Run a function which may or may not be defined
|
245 |
+
* @param string $name
|
246 |
+
* @param array $args
|
247 |
+
*/
|
248 |
+
public static function runHook($name, $args = array())
|
249 |
+
{
|
250 |
+
if(function_exists($name))
|
251 |
+
{
|
252 |
+
return call_user_func($name, $args);
|
253 |
+
}
|
254 |
+
|
255 |
+
return null;
|
256 |
+
}
|
257 |
+
|
258 |
+
/**
|
259 |
+
* Print a link to open an editable link
|
260 |
+
* @param type $label_or_markup
|
261 |
+
*/
|
262 |
+
public static function editableLink($label_or_markup = false, $key = 'solo')
|
263 |
+
{
|
264 |
+
if(!$label_or_markup)
|
265 |
+
$label_or_markup = '<img alt="Create Editable" src="'.Broadstreet_Mini_Utility::getBaseURL('/assets/img/editable-button.png').'" />';
|
266 |
+
echo '<a href="#" onclick="editable_'.$key.'(); return false;">'.$label_or_markup.'</a>';
|
267 |
+
}
|
268 |
+
|
269 |
+
/**
|
270 |
+
* Output JS for placing the ad HTML into the
|
271 |
+
* new ad form
|
272 |
+
*/
|
273 |
+
public static function editableJS($selector = false, $key = 'solo')
|
274 |
+
{
|
275 |
+
bs_editable_js($selector, $key);
|
276 |
+
}
|
277 |
+
|
278 |
+
/**
|
279 |
+
* Is this phone number valid?
|
280 |
+
* @param string $num
|
281 |
+
* @return boolean
|
282 |
+
*/
|
283 |
+
public static function isPhoneValid($num)
|
284 |
+
{
|
285 |
+
if(preg_match('/^[+]?([0-9]?[0-9]?[0-9]?)[(|s|-|.]?([0-9]{3})[)|s|-|.]*([0-9]{3})[s|-|.]*([0-9]{4})$/', $num))
|
286 |
+
{
|
287 |
+
return true;
|
288 |
+
}
|
289 |
+
else
|
290 |
+
{
|
291 |
+
return false;
|
292 |
+
}
|
293 |
+
}
|
294 |
+
|
295 |
+
/**
|
296 |
+
* Import or update an image ad
|
297 |
+
* @param type $network_id Network Id
|
298 |
+
* @param type $advertiser_id Advertiser Id
|
299 |
+
* @param type $image_url Image URL
|
300 |
+
* @param type $link Destination URL
|
301 |
+
*/
|
302 |
+
public static function importImageAd($network_id, $advertiser_id, $image_url, $link, $advertisement_id = false) {
|
303 |
+
$api = self::getClient();
|
304 |
+
|
305 |
+
$params = array();
|
306 |
+
$params['name'] = 'WordPress Widget Ad ' . date('Y-m-d H:i:s');
|
307 |
+
$params['active_base64'] = base64_encode(file_get_contents($image_url));
|
308 |
+
$params['destination'] = $link;
|
309 |
+
|
310 |
+
try {
|
311 |
+
if($advertisement_id === false)
|
312 |
+
return $api->createAdvertisement($network_id, $advertiser_id, $params['name'], 'static', $params);
|
313 |
+
else
|
314 |
+
return $api->updateAdvertisement($network_id, $advertiser_id, $advertisement_id, $params);
|
315 |
+
|
316 |
+
} catch(Exception $ex) {
|
317 |
+
self::sendReport($ex->__toString());
|
318 |
+
exit($ex->__toString());
|
319 |
+
return false;
|
320 |
+
}
|
321 |
+
}
|
322 |
+
|
323 |
+
/**
|
324 |
+
* Import or update an HTML Ad into Broadstreet
|
325 |
+
* @param type $network_id
|
326 |
+
* @param type $advertiser_id
|
327 |
+
* @param type $html
|
328 |
+
*/
|
329 |
+
public static function importHTMLAd($network_id, $advertiser_id, $html, $advertisement_id = false) {
|
330 |
+
$api = self::getClient();
|
331 |
+
|
332 |
+
$params = array();
|
333 |
+
$params['name'] = 'WordPress Widget Ad ' . date('Y-m-d H:i:s');
|
334 |
+
$params['html'] = $html;
|
335 |
+
|
336 |
+
try {
|
337 |
+
if($advertisement_id === false)
|
338 |
+
return $api->createAdvertisement($network_id, $advertiser_id, $params['name'], 'html', $params);
|
339 |
+
else
|
340 |
+
return $api->updateAdvertisement($network_id, $advertiser_id, $advertisement_id, $params);
|
341 |
+
|
342 |
+
} catch(Exception $ex) {
|
343 |
+
self::sendReport($ex->__toString());
|
344 |
+
exit($ex->__toString());
|
345 |
+
return false;
|
346 |
+
}
|
347 |
+
}
|
348 |
+
|
349 |
+
/**
|
350 |
+
* Import old adwidget ads to Broadstreet ads
|
351 |
+
* @param string $email
|
352 |
+
*/
|
353 |
+
public static function importOldAds($email = false) {
|
354 |
+
$api = new Broadstreet();
|
355 |
+
|
356 |
+
try
|
357 |
+
{
|
358 |
+
if(!Broadstreet_Mini_Utility::hasNetwork())
|
359 |
+
{
|
360 |
+
# Register the user by email address
|
361 |
+
$user = $api->register($email);
|
362 |
+
Broadstreet_Mini_Utility::setOption(Broadstreet_Mini_Utility::KEY_API_KEY, $user->access_token);
|
363 |
+
|
364 |
+
# Create a network for the new user
|
365 |
+
# Don't change this unless you want a higher tier. There's no lower tier, you haxor you
|
366 |
+
$net = $api->createNetwork('Wordpress - ' . get_bloginfo('name'), array('tier_id' => 4));
|
367 |
+
Broadstreet_Mini_Utility::setOption(Broadstreet_Mini_Utility::KEY_NETWORK_ID, $net->id);
|
368 |
+
}
|
369 |
+
else
|
370 |
+
{
|
371 |
+
$api = self::getClient();
|
372 |
+
$net = (object)array('id' => Broadstreet_Mini_Utility::getNetworkID());
|
373 |
+
}
|
374 |
+
|
375 |
+
/* Import Image widgets */
|
376 |
+
$ads = Broadstreet_Mini_Utility::getOption('widget_adwidget_imagewidget');
|
377 |
+
|
378 |
+
foreach($ads as $id => $data)
|
379 |
+
{
|
380 |
+
/* Ad already imported? Skip it */
|
381 |
+
if(!is_numeric($id) || is_numeric(@$data['bs_ad_id'])) continue;
|
382 |
+
|
383 |
+
$adv = $api->createAdvertiser($net->id, self::arrayGet($data, 'w_adv', 'New Advertiser - Image'));
|
384 |
+
Broadstreet_Mini_Utility::setOption(Broadstreet_Mini_Utility::KEY_ADVERTISER_ID, $adv->id);
|
385 |
+
|
386 |
+
$ad = self::importImageAd($net->id, $adv->id, $data['w_img'], $data['w_link']);
|
387 |
+
|
388 |
+
if(!$ad) continue;
|
389 |
+
|
390 |
+
$ads[$id]['bs_ad_html'] = $ad->html;
|
391 |
+
$ads[$id]['bs_ad_id'] = $ad->id;
|
392 |
+
$ads[$id]['bs_adv_id'] = $adv->id;
|
393 |
+
}
|
394 |
+
|
395 |
+
Broadstreet_Mini_Utility::setOption('widget_adwidget_imagewidget', $ads);
|
396 |
+
|
397 |
+
|
398 |
+
/* Import HTML widgets */
|
399 |
+
$ads = Broadstreet_Mini_Utility::getOption('widget_adwidget_htmlwidget');
|
400 |
+
|
401 |
+
foreach($ads as $id => $data)
|
402 |
+
{
|
403 |
+
/* Ad already imported? Skip it */
|
404 |
+
if(!is_numeric($id) || is_numeric(@$data['bs_ad_id'])) continue;
|
405 |
+
|
406 |
+
$adv = $api->createAdvertiser($net->id, self::arrayGet($data, 'w_adv', 'New Advertiser - HTML'));
|
407 |
+
Broadstreet_Mini_Utility::setOption(Broadstreet_Mini_Utility::KEY_ADVERTISER_ID, $adv->id);
|
408 |
+
|
409 |
+
$ad = self::importHTMLAd($net->id, $adv->id, $data['w_adcode']);
|
410 |
+
|
411 |
+
if(!$ad) continue;
|
412 |
+
|
413 |
+
$ads[$id]['bs_ad_html'] = $ad->html;
|
414 |
+
$ads[$id]['bs_ad_id'] = $ad->id;
|
415 |
+
$ads[$id]['bs_adv_id'] = $adv->id;
|
416 |
+
}
|
417 |
+
|
418 |
+
Broadstreet_Mini_Utility::setOption('widget_adwidget_htmlwidget', $ads);
|
419 |
+
}
|
420 |
+
catch(Exception $ex)
|
421 |
+
{
|
422 |
+
self::sendReport($ex->__toString());
|
423 |
+
return false;
|
424 |
+
}
|
425 |
+
|
426 |
+
return true;
|
427 |
+
}
|
428 |
+
}
|
429 |
+
|
430 |
+
endif;
|
readme.txt
CHANGED
@@ -3,7 +3,7 @@ Contributors: Broadstreet
|
|
3 |
Tags: wordpress,ad,widget,sidebar,google,tag,code
|
4 |
Requires at least: 3.0
|
5 |
Tested up to: 3.5.1
|
6 |
-
Stable tag: 2.
|
7 |
|
8 |
Easily upload ad images and ad code to your sidebar. For those that don't need or
|
9 |
want a complicated ad management system.
|
@@ -13,15 +13,16 @@ want a complicated ad management system.
|
|
13 |
This is the easiest way to place ads in your Wordpress site. Just drag a widget
|
14 |
to the sidebar, upload, an ad, and save.
|
15 |
|
|
|
|
|
16 |
* Extremely intuitive for beginners
|
17 |
* No clunky ad management interface
|
18 |
* Easily place image banner ads
|
19 |
* Easily place Google ad tags and other ad code
|
|
|
20 |
|
21 |
You will not find an easier way to run ads on your website!
|
22 |
|
23 |
-
Watch a short video demo: http://www.screenr.com/u0t7
|
24 |
-
|
25 |
== Demo ==
|
26 |
|
27 |
Watch a short video demo: http://www.screenr.com/u0t7
|
3 |
Tags: wordpress,ad,widget,sidebar,google,tag,code
|
4 |
Requires at least: 3.0
|
5 |
Tested up to: 3.5.1
|
6 |
+
Stable tag: 2.2.0
|
7 |
|
8 |
Easily upload ad images and ad code to your sidebar. For those that don't need or
|
9 |
want a complicated ad management system.
|
13 |
This is the easiest way to place ads in your Wordpress site. Just drag a widget
|
14 |
to the sidebar, upload, an ad, and save.
|
15 |
|
16 |
+
Watch a short video demo: http://www.screenr.com/u0t7
|
17 |
+
|
18 |
* Extremely intuitive for beginners
|
19 |
* No clunky ad management interface
|
20 |
* Easily place image banner ads
|
21 |
* Easily place Google ad tags and other ad code
|
22 |
+
* Easily upgrade to **cloud-based adserving power** backed by [Broadstreet Ads](http://broadstreetads.com)
|
23 |
|
24 |
You will not find an easier way to run ads on your website!
|
25 |
|
|
|
|
|
26 |
== Demo ==
|
27 |
|
28 |
Watch a short video demo: http://www.screenr.com/u0t7
|
views/admin.php
CHANGED
@@ -19,6 +19,34 @@
|
|
19 |
<script type="text/javascript" src="http://cdn.broadstreetads.com/init.js"></script>
|
20 |
<script type="text/javascript">broadstreet.zone(423);</script>
|
21 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
<p>Thank you for using our plugin! This plugin was built by <a href="http://broadstreetads.com">Broadstreet</a>, the
|
23 |
company for independent publishers.</p>
|
24 |
|
19 |
<script type="text/javascript" src="http://cdn.broadstreetads.com/init.js"></script>
|
20 |
<script type="text/javascript">broadstreet.zone(423);</script>
|
21 |
|
22 |
+
<?php if(Broadstreet_Mini_Utility::hasAdserving()): ?>
|
23 |
+
|
24 |
+
<h2>Adserver Subscription</h2>
|
25 |
+
|
26 |
+
You are currently subscribed to Broadstreet's Adserver, giving your site stress-free adserving,
|
27 |
+
and click/view reporting. You can cancel this subscription here. Canceling will revert
|
28 |
+
your ads to start serving from your site instead of an adserver.
|
29 |
+
|
30 |
+
<form method="post">
|
31 |
+
<input style="background-color: red; color: white;" type="submit" name="cancel" value="Cancel Adserving Subscription">
|
32 |
+
</form>
|
33 |
+
|
34 |
+
<?php endif; ?>
|
35 |
+
|
36 |
+
<?php if(!Broadstreet_Mini_Utility::hasAdserving() && Broadstreet_Mini_Utility::hasNetwork()): ?>
|
37 |
+
|
38 |
+
<h2>Adserver Subscription</h2>
|
39 |
+
|
40 |
+
You were once subscribed to Broadstreet's Adserver, giving your site stress-free adserving,
|
41 |
+
and click/view reporting. You can re-enable your subscription here. Changes will
|
42 |
+
be immediate.
|
43 |
+
|
44 |
+
<form method="post">
|
45 |
+
<input style="background-color: green; color: white;" type="submit" name="subscribe" value="Subscribe me for $5 / month">
|
46 |
+
</form>
|
47 |
+
|
48 |
+
<?php endif; ?>
|
49 |
+
|
50 |
<p>Thank you for using our plugin! This plugin was built by <a href="http://broadstreetads.com">Broadstreet</a>, the
|
51 |
company for independent publishers.</p>
|
52 |
|
views/modal/footer.php
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div id="footer">
|
2 |
+
Broadstreet Ads © <?php echo date('Y') ?> − www.broadstreetads.com
|
3 |
+
</div>
|
4 |
+
<script src="https://broadstreet-common.s3.amazonaws.com/broadstreet-net/init.js"></script>
|
5 |
+
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
|
6 |
+
<script type="text/javascript">
|
7 |
+
|
8 |
+
var broadstreet = new Broadstreet.Network();
|
9 |
+
broadstreet.getNetworkStats(function(data){
|
10 |
+
$('#pub-count').text(data.network_count);
|
11 |
+
});
|
12 |
+
|
13 |
+
</script>
|
14 |
+
</body>
|
15 |
+
</html>
|
views/modal/header.php
ADDED
@@ -0,0 +1,174 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<html>
|
2 |
+
<head>
|
3 |
+
<title>Broadstreet Premium Signup</title>
|
4 |
+
<style type="text/css">
|
5 |
+
/* Broadstreet CSS */
|
6 |
+
body {
|
7 |
+
font-family: 'Lucida Grande', Verdana, Arial, sans-serif;
|
8 |
+
font-size: 12px;
|
9 |
+
font-style: normal;
|
10 |
+
font-variant: normal;
|
11 |
+
font-weight: normal;
|
12 |
+
margin: 0;
|
13 |
+
padding: 0;
|
14 |
+
background: rgb(255,255,255); /* Old browsers */
|
15 |
+
background: -moz-linear-gradient(top, rgba(255,255,255,1) 0%, rgba(246,246,246,1) 47%, rgba(237,237,237,1) 100%); /* FF3.6+ */
|
16 |
+
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,1)), color-stop(47%,rgba(246,246,246,1)), color-stop(100%,rgba(237,237,237,1))); /* Chrome,Safari4+ */
|
17 |
+
background: -webkit-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(246,246,246,1) 47%,rgba(237,237,237,1) 100%); /* Chrome10+,Safari5.1+ */
|
18 |
+
background: -o-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(246,246,246,1) 47%,rgba(237,237,237,1) 100%); /* Opera 11.10+ */
|
19 |
+
background: -ms-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(246,246,246,1) 47%,rgba(237,237,237,1) 100%); /* IE10+ */
|
20 |
+
background: linear-gradient(to bottom, rgba(255,255,255,1) 0%,rgba(246,246,246,1) 47%,rgba(237,237,237,1) 100%); /* W3C */
|
21 |
+
}
|
22 |
+
|
23 |
+
#header {
|
24 |
+
padding: 10px 15px;
|
25 |
+
background-color: #eee;
|
26 |
+
border-bottom: 1px solid #ccc;
|
27 |
+
background: rgb(255,255,255); /* Old browsers */
|
28 |
+
background: -moz-linear-gradient(top, rgba(255,255,255,1) 0%, rgba(246,246,246,1) 47%, rgba(237,237,237,1) 100%); /* FF3.6+ */
|
29 |
+
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,1)), color-stop(47%,rgba(246,246,246,1)), color-stop(100%,rgba(237,237,237,1))); /* Chrome,Safari4+ */
|
30 |
+
background: -webkit-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(246,246,246,1) 47%,rgba(237,237,237,1) 100%); /* Chrome10+,Safari5.1+ */
|
31 |
+
background: -o-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(246,246,246,1) 47%,rgba(237,237,237,1) 100%); /* Opera 11.10+ */
|
32 |
+
background: -ms-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(246,246,246,1) 47%,rgba(237,237,237,1) 100%); /* IE10+ */
|
33 |
+
background: linear-gradient(to bottom, rgba(255,255,255,1) 0%,rgba(246,246,246,1) 47%,rgba(237,237,237,1) 100%); /* W3C */
|
34 |
+
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#ededed',GradientType=0 ); /* IE6-9 */
|
35 |
+
}
|
36 |
+
|
37 |
+
#header h1 {
|
38 |
+
font-size: 24px;
|
39 |
+
text-align: center;
|
40 |
+
font-family: HelveticaNeue-Light, 'Helvetica Neue Light', 'Helvetica Neue', sans-serif;
|
41 |
+
font-weight: normal;
|
42 |
+
}
|
43 |
+
|
44 |
+
#header h1 > * {
|
45 |
+
vertical-align: bottom;
|
46 |
+
}
|
47 |
+
|
48 |
+
h2 {
|
49 |
+
font-size: 18px;
|
50 |
+
font-family: HelveticaNeue-Light, 'Helvetica Neue Light', 'Helvetica Neue', sans-serif;
|
51 |
+
text-align: center;
|
52 |
+
font-weight: normal;
|
53 |
+
padding: 5px 10px;
|
54 |
+
}
|
55 |
+
|
56 |
+
#clients {
|
57 |
+
width: 100%;
|
58 |
+
}
|
59 |
+
|
60 |
+
#clients td {
|
61 |
+
text-align: center;
|
62 |
+
}
|
63 |
+
|
64 |
+
#clients td img {
|
65 |
+
-moz-box-shadow: 0 0 5px #888;
|
66 |
+
-webkit-box-shadow: 0 0 5px#888;
|
67 |
+
box-shadow: 0 0 5px #888;
|
68 |
+
width: 140px;
|
69 |
+
}
|
70 |
+
|
71 |
+
#clients-section {
|
72 |
+
padding: 10px 0px;
|
73 |
+
background: #258dc8; /* Old browsers */
|
74 |
+
background: -moz-linear-gradient(top, #258dc8 0%, #258dc8 100%); /* FF3.6+ */
|
75 |
+
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#258dc8), color-stop(100%,#258dc8)); /* Chrome,Safari4+ */
|
76 |
+
background: -webkit-linear-gradient(top, #258dc8 0%,#258dc8 100%); /* Chrome10+,Safari5.1+ */
|
77 |
+
background: -o-linear-gradient(top, #258dc8 0%,#258dc8 100%); /* Opera 11.10+ */
|
78 |
+
background: -ms-linear-gradient(top, #258dc8 0%,#258dc8 100%); /* IE10+ */
|
79 |
+
background: linear-gradient(to bottom, #258dc8 0%,#258dc8 100%); /* W3C */
|
80 |
+
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#258dc8', endColorstr='#258dc8',GradientType=0 ); /* IE6-9 */
|
81 |
+
|
82 |
+
}
|
83 |
+
|
84 |
+
a.btn {
|
85 |
+
font-family: HelveticaNeue-Light, 'Helvetica Neue Light', 'Helvetica Neue', sans-serif;
|
86 |
+
text-decoration: none;
|
87 |
+
line-height: inherit;
|
88 |
+
font-weight: inherit;
|
89 |
+
cursor: pointer;
|
90 |
+
display: inline-block;
|
91 |
+
background-color: #E6E6E6;
|
92 |
+
background-repeat: no-repeat;
|
93 |
+
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(white), color-stop(25%, white), to(#E6E6E6));
|
94 |
+
background-image: -webkit-linear-gradient(white, white 25%, #E6E6E6);
|
95 |
+
background-image: -moz-linear-gradient(top, white, white 25%, #E6E6E6);
|
96 |
+
background-image: -ms-linear-gradient(white, white 25%, #E6E6E6);
|
97 |
+
background-image: -o-linear-gradient(white, white 25%, #E6E6E6);
|
98 |
+
background-image: linear-gradient(white, white 25%, #E6E6E6);
|
99 |
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);
|
100 |
+
padding: 5px 14px 6px;
|
101 |
+
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
|
102 |
+
color: #333;
|
103 |
+
font-size: 13px;
|
104 |
+
line-height: normal;
|
105 |
+
border: 1px solid #CCC;
|
106 |
+
border-bottom-color: #BBB;
|
107 |
+
-webkit-border-radius: 4px;
|
108 |
+
-moz-border-radius: 4px;
|
109 |
+
border-radius: 4px;
|
110 |
+
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);
|
111 |
+
-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);
|
112 |
+
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);
|
113 |
+
-webkit-transition: 0.1s linear all;
|
114 |
+
-moz-transition: 0.1s linear all;
|
115 |
+
-ms-transition: 0.1s linear all;
|
116 |
+
-o-transition: 0.1s linear all;
|
117 |
+
transition: 0.1s linear all;
|
118 |
+
font-size: 15px;
|
119 |
+
line-height: normal;
|
120 |
+
padding: 9px 14px 9px;
|
121 |
+
-webkit-border-radius: 6px;
|
122 |
+
-moz-border-radius: 6px;
|
123 |
+
}
|
124 |
+
|
125 |
+
|
126 |
+
a.btn.smaller {
|
127 |
+
padding: 4px 12px;
|
128 |
+
}
|
129 |
+
|
130 |
+
a.call-to-action {
|
131 |
+
color: white;
|
132 |
+
border-radius: 6px;
|
133 |
+
background-color: #57A957;
|
134 |
+
background-repeat: repeat-x;
|
135 |
+
background-image: -khtml-gradient(linear, left top, left bottom, from(#62C462), to(#57A957));
|
136 |
+
background-image: -moz-linear-gradient(top, #62C462, #57A957);
|
137 |
+
background-image: -ms-linear-gradient(top, #62C462, #57A957);
|
138 |
+
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62C462), color-stop(100%, #57A957));
|
139 |
+
background-image: -webkit-linear-gradient(top, #62C462, #57A957);
|
140 |
+
background-image: -o-linear-gradient(top, #62C462, #57A957);
|
141 |
+
background-image: linear-gradient(top, #62C462, #57A957);
|
142 |
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);
|
143 |
+
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
144 |
+
border-color: #57A957 #57A957 #3D773D;
|
145 |
+
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
146 |
+
|
147 |
+
}
|
148 |
+
|
149 |
+
#call-to-action {
|
150 |
+
padding-top: 30px;
|
151 |
+
text-align: center;
|
152 |
+
}
|
153 |
+
|
154 |
+
#footer {
|
155 |
+
position: fixed;
|
156 |
+
bottom: 0px;
|
157 |
+
height: 20px;
|
158 |
+
background-color: #444;
|
159 |
+
color: #ccc;
|
160 |
+
width: 100%;
|
161 |
+
text-align: center;
|
162 |
+
}
|
163 |
+
|
164 |
+
#signup input, #report input {
|
165 |
+
height: 38px;
|
166 |
+
width: 200px;
|
167 |
+
font-size: 16px;
|
168 |
+
border: 1px solid #ccc;
|
169 |
+
border-radius: 4px;
|
170 |
+
padding-left: 4px;
|
171 |
+
}
|
172 |
+
</style>
|
173 |
+
</head>
|
174 |
+
<body>
|
views/modal/index.php
ADDED
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* We need to do a little handywork to make sure that Wordpress
|
4 |
+
* thinks we're a standard built-in modal.
|
5 |
+
*/
|
6 |
+
|
7 |
+
# Include this so Wordpress doesn't throw NOTICEs when setting $pagenow
|
8 |
+
$_SERVER['PHP_SELF'] = '/wp-admin';
|
9 |
+
|
10 |
+
# Turn on DEBUG if needed
|
11 |
+
if(defined('BROADSTREET_DEBUG') && BROADSTREET_DEBUG) {
|
12 |
+
error_reporting(E_ALL);
|
13 |
+
ini_set('display_errors', 1);
|
14 |
+
ini_set('log_errors', 1);
|
15 |
+
}
|
16 |
+
|
17 |
+
if(!isset( $_GET['inline']))
|
18 |
+
define('IFRAME_REQUEST', true);
|
19 |
+
|
20 |
+
# Include libraries
|
21 |
+
require_once '../../lib/Utility.php';
|
22 |
+
require_once '../../lib/Broadstreet.php';
|
23 |
+
|
24 |
+
if(!defined('WP_ADMIN'))
|
25 |
+
{
|
26 |
+
# Find the wp-admin directory
|
27 |
+
if(!preg_match('#(.*)/wp-content/plugins/#', $_SERVER['SCRIPT_FILENAME'], $matches))
|
28 |
+
exit("We're awfully sorry. You have a strange server configuration we can't figure out. Email us, and we'll help figure it out. errors@broadstreetads.com");
|
29 |
+
|
30 |
+
$root = $matches[1];
|
31 |
+
|
32 |
+
chdir("$root/wp-admin");
|
33 |
+
|
34 |
+
/** Load WordPress Administration Bootstrap **/
|
35 |
+
require_once('./admin.php');
|
36 |
+
}
|
37 |
+
|
38 |
+
$page = @$_GET['step'];
|
39 |
+
if(!$page) $page = 'signup';
|
40 |
+
|
41 |
+
if($page == 'signup')
|
42 |
+
{
|
43 |
+
if(Broadstreet_Mini_Utility::hasAdserving() || @$_GET['status'] == 'agree') {
|
44 |
+
|
45 |
+
if(!Broadstreet_Mini_Utility::hasAdserving())
|
46 |
+
{
|
47 |
+
# New user
|
48 |
+
if(!isset($_POST['resub']))
|
49 |
+
{
|
50 |
+
$email = $_POST['email'];
|
51 |
+
$success = Broadstreet_Mini_Utility::hasAdserving(true, $email);
|
52 |
+
}
|
53 |
+
else
|
54 |
+
{
|
55 |
+
# Someone who cancelled and resubscribed
|
56 |
+
$success = Broadstreet_Mini_Utility::hasAdserving(true);
|
57 |
+
}
|
58 |
+
|
59 |
+
if(!$success) exit("We're sorry! We couldn't upgrade you to premium adserving! Is your email address already linked to a Broadstreet account? This may be the problem.");
|
60 |
+
}
|
61 |
+
|
62 |
+
require "signedup.php";
|
63 |
+
exit;
|
64 |
+
}
|
65 |
+
}
|
66 |
+
|
67 |
+
|
68 |
+
require "$page.php";
|
69 |
+
|
views/modal/reports.php
ADDED
@@ -0,0 +1,96 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
$ad_id = $_GET['ad_id'];
|
4 |
+
$adv_id = $_GET['adv_id'];
|
5 |
+
$net_id = Broadstreet_Mini_Utility::getNetworkID();
|
6 |
+
|
7 |
+
$start = @$_GET['start'];
|
8 |
+
$end = @$_GET['end'];
|
9 |
+
|
10 |
+
$day = 60 * 60 * 24 * 31;
|
11 |
+
|
12 |
+
if($start && !$end) $end = date('Y-m-d');
|
13 |
+
if($end && !$start) $start = date('Y-m-d', strtotime($end) - $day);
|
14 |
+
if(!$start && !$end) { $end = date('Y-m-d'); $start = date('Y-m-d', time() - $day); }
|
15 |
+
|
16 |
+
$api = Broadstreet_Mini_Utility::getClient();
|
17 |
+
$error = false;
|
18 |
+
$stats = array();
|
19 |
+
|
20 |
+
try {
|
21 |
+
$stats = $api->getAdvertisementReport($net_id, $adv_id, $ad_id, $start, $end);
|
22 |
+
} catch(Exception $ex) {
|
23 |
+
$error = 'There was an error retrieving your report. Try selecting a valid date range of 2 years or smaller.';
|
24 |
+
}
|
25 |
+
|
26 |
+
?>
|
27 |
+
<?php require 'header.php' ?>
|
28 |
+
<style type="text/css">
|
29 |
+
.datagrid table { border-collapse: collapse; text-align: left; width: 100%; } .datagrid {font: normal 12px/150% Arial, Helvetica, sans-serif; background: #fff; overflow: hidden; border: 1px solid #006699; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; }.datagrid table td, .datagrid table th { padding: 3px 10px; }.datagrid table thead th {background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #006699), color-stop(1, #00557F) );background:-moz-linear-gradient( center top, #006699 5%, #00557F 100% );filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#006699', endColorstr='#00557F');background-color:#006699; color:#FFFFFF; font-size: 15px; font-weight: bold; border-left: 1px solid #0070A8; } .datagrid table thead th:first-child { border: none; }.datagrid table tbody td { color: #00557F; border-left: 1px solid #E1EEF4;font-size: 12px;font-weight: normal; }.datagrid table tbody .alt td { background: #E1EEf4; color: #00557F; }.datagrid table tbody td:first-child { border-left: none; }.datagrid table tbody tr:last-child td { border-bottom: none; }.datagrid table tfoot td div { border-top: 1px solid #006699;background: #E1EEf4;} .datagrid table tfoot td { padding: 0; font-size: 12px } .datagrid table tfoot td div{ padding: 2px; }.datagrid table tfoot td ul { margin: 0; padding:0; list-style: none; text-align: right; }.datagrid table tfoot li { display: inline; }.datagrid table tfoot li a { text-decoration: none; display: inline-block; padding: 2px 8px; margin: 1px;color: #FFFFFF;border: 1px solid #006699;-webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #006699), color-stop(1, #00557F) );background:-moz-linear-gradient( center top, #006699 5%, #00557F 100% );filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#006699', endColorstr='#00557F');background-color:#006699; }.datagrid table tfoot ul.active, .datagrid table tfoot ul a:hover { text-decoration: none;border-color: #00557F; color: #FFFFFF; background: none; background-color:#006699;}
|
30 |
+
body { padding-bottom: 50px; }
|
31 |
+
.date-container {
|
32 |
+
background-color: #fff;
|
33 |
+
padding: 10px;
|
34 |
+
text-align: center;
|
35 |
+
}
|
36 |
+
.alert {
|
37 |
+
padding: 8px 35px 8px 14px;
|
38 |
+
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
|
39 |
+
background-color: #fcf8e3;
|
40 |
+
border: 1px solid #fbeed5;
|
41 |
+
}
|
42 |
+
.alert-error {
|
43 |
+
color: #b94a48;
|
44 |
+
background-color: #f2dede;
|
45 |
+
border-color: #eed3d7;
|
46 |
+
}
|
47 |
+
|
48 |
+
</style>
|
49 |
+
<div id="header">
|
50 |
+
<h1>Click Report from <?php echo $start ?> to <?php echo $end ?></h1>
|
51 |
+
</div>
|
52 |
+
<?php if($error): ?>
|
53 |
+
<div class="alert alert-error">
|
54 |
+
<?php echo $error; ?>
|
55 |
+
</div>
|
56 |
+
<?php endif; ?>
|
57 |
+
<div class="date-container">
|
58 |
+
<form id="report" action="?" method="get">
|
59 |
+
<input type="text" name="start" placeholder="your@email.com" value="<?php echo $start ?>" />
|
60 |
+
through
|
61 |
+
<input type="text" name="end" placeholder="your@email.com" value="<?php echo $end ?>" />
|
62 |
+
<input type="hidden" name="ad_id" value="<?php echo $ad_id ?>" />
|
63 |
+
<input type="hidden" name="adv_id" value="<?php echo $adv_id ?>" />
|
64 |
+
<input type="hidden" name="step" value="reports" />
|
65 |
+
<a href="#" onclick="$('#report').submit();" class="btn call-to-action">Go </a>
|
66 |
+
</form>
|
67 |
+
</div>
|
68 |
+
<div style="padding: 0px 0px 5px 5px; color: #808080;">* Stats are delayed by roughly 10 minutes</div>
|
69 |
+
<div style="margin: 0 5px;" class="datagrid">
|
70 |
+
<table id="stats">
|
71 |
+
<thead>
|
72 |
+
<tr>
|
73 |
+
<th>Date</th>
|
74 |
+
<th>Views</th>
|
75 |
+
<th>Clicks</th>
|
76 |
+
<th>Click-Through Rate</th>
|
77 |
+
</tr>
|
78 |
+
</thead>
|
79 |
+
<tbody>
|
80 |
+
<?php if(count($stats)): ?>
|
81 |
+
<?php $count = 0; foreach($stats as $day): ?>
|
82 |
+
<tr <?php if($count % 2 == 0) echo "class='alt'" ?>>
|
83 |
+
<td><?php echo $day->date ?></td>
|
84 |
+
<td><?php echo $day->views ?></td>
|
85 |
+
<td><?php echo $day->clicks ?></td>
|
86 |
+
<td><?php if($day->views == 0) echo 'NA'; else echo round($day->clicks / $day->views, 2) . '' ?></td>
|
87 |
+
</tr>
|
88 |
+
<?php $count++; endforeach; ?>
|
89 |
+
<?php endif; ?>
|
90 |
+
</tbody>
|
91 |
+
</table>
|
92 |
+
</div>
|
93 |
+
<div id="call-to-action">
|
94 |
+
<a href="#" onclick="(window.dialogArguments || opener || parent || top).tb_remove(); return false;" class="btn call-to-action">Close</a>
|
95 |
+
</div>
|
96 |
+
<?php require 'footer.php' ?>
|
views/modal/signedup.php
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php require 'header.php' ?>
|
2 |
+
<div id="header">
|
3 |
+
<h1>Welcome to the Club!</h1>
|
4 |
+
</div>
|
5 |
+
<div id="clients-section">
|
6 |
+
<table id="clients">
|
7 |
+
<tr>
|
8 |
+
<td><a href="http://baristanet.com/"><img src="http://broadstreetads.com/assets/images/featured-clients/baristanet.png" /></a></td>
|
9 |
+
<td><a href="http://thebatavian.com/"><img src="http://broadstreetads.com/assets/images/featured-clients/batavian.png" /></a></td>
|
10 |
+
<td><a href="http://arlnow.com/"><img src="http://broadstreetads.com/assets/images/featured-clients/arlingtonnow.png" /></a></td>
|
11 |
+
<td><a href="http://hulafrog.com/"><img src="http://broadstreetads.com/assets/images/featured-clients/hulafrog.png" /></a></td>
|
12 |
+
</tr>
|
13 |
+
<tr>
|
14 |
+
<td><a href="http://natomasbuzz.com/"><img src="http://broadstreetads.com/assets/images/featured-clients/natomas.png" /></a></td>
|
15 |
+
<td><a href="http://www.sheepsheadbites.com/"><img src="http://broadstreetads.com/assets/images/featured-clients/sheepshead.png" /></a></td>
|
16 |
+
<td><a href="http://www.pvpost.com/"><img src="http://broadstreetads.com/assets/images/featured-clients/pvpost.png" /></a></td>
|
17 |
+
<td><a href="http://njnewscommons.com/"><img src="http://broadstreetads.com/assets/images/featured-clients/njnewscommons.png" /></a></td>
|
18 |
+
</tr>
|
19 |
+
</table>
|
20 |
+
</div>
|
21 |
+
<div id="info">
|
22 |
+
|
23 |
+
<h2>
|
24 |
+
Your existing ads and any ads you create going forward will
|
25 |
+
have reporting available and be hosting in our cloud. You will
|
26 |
+
soon receive a welcome email. Thank you for taking a spin with Broadstreet!
|
27 |
+
<br />
|
28 |
+
<small><strong>Be sure to save unsaved widgets and refresh the widgets page after closing this window.</strong></small>
|
29 |
+
</h2>
|
30 |
+
<div id="call-to-action">
|
31 |
+
<a href="#" onclick="bs_close()" class="btn call-to-action">Close this Window</a>
|
32 |
+
</div>
|
33 |
+
|
34 |
+
</div>
|
35 |
+
<script>
|
36 |
+
function bs_close() {
|
37 |
+
var win = window.dialogArguments || opener || parent || top;
|
38 |
+
|
39 |
+
if(typeof win.send_to_editor === 'function')
|
40 |
+
{
|
41 |
+
win.send_to_editor();
|
42 |
+
}
|
43 |
+
else
|
44 |
+
{
|
45 |
+
win.tb_remove();
|
46 |
+
}
|
47 |
+
}
|
48 |
+
</script>
|
49 |
+
<?php require 'footer.php' ?>
|
views/modal/signup.php
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php require 'header.php' ?>
|
2 |
+
<div id="header">
|
3 |
+
<h1>Join <span id="pub-count">500+</span> Publishers Who Upgraded</h1>
|
4 |
+
</div>
|
5 |
+
<div id="clients-section">
|
6 |
+
<table id="clients">
|
7 |
+
<tr>
|
8 |
+
<td><a href="http://baristanet.com/"><img src="http://broadstreetads.com/assets/images/featured-clients/baristanet.png" /></a></td>
|
9 |
+
<td><a href="http://thebatavian.com/"><img src="http://broadstreetads.com/assets/images/featured-clients/batavian.png" /></a></td>
|
10 |
+
<td><a href="http://arlnow.com/"><img src="http://broadstreetads.com/assets/images/featured-clients/arlingtonnow.png" /></a></td>
|
11 |
+
<td><a href="http://hulafrog.com/"><img src="http://broadstreetads.com/assets/images/featured-clients/hulafrog.png" /></a></td>
|
12 |
+
</tr>
|
13 |
+
<tr>
|
14 |
+
<td><a href="http://natomasbuzz.com/"><img src="http://broadstreetads.com/assets/images/featured-clients/natomas.png" /></a></td>
|
15 |
+
<td><a href="http://www.sheepsheadbites.com/"><img src="http://broadstreetads.com/assets/images/featured-clients/sheepshead.png" /></a></td>
|
16 |
+
<td><a href="http://www.pvpost.com/"><img src="http://broadstreetads.com/assets/images/featured-clients/pvpost.png" /></a></td>
|
17 |
+
<td><a href="http://njnewscommons.com/"><img src="http://broadstreetads.com/assets/images/featured-clients/njnewscommons.png" /></a></td>
|
18 |
+
</tr>
|
19 |
+
</table>
|
20 |
+
</div>
|
21 |
+
<div id="info">
|
22 |
+
<h2>You will be able to see <strong>reports on ad views and clicks</strong>. And best of all,
|
23 |
+
ads will be served using
|
24 |
+
<a target="_blank" href="http://broadstreetads.com">Broadstreet Ads</a>' ultra-fast adserver.</h2>
|
25 |
+
</div>
|
26 |
+
<div id="call-to-action">
|
27 |
+
<form id="signup" action="?step=signup&status=agree" method="post">
|
28 |
+
<?php if(!Broadstreet_Mini_Utility::getNetworkID()): ?>
|
29 |
+
<input id="email" type="text" name="email" placeholder="your@email.com" value="<?php echo get_bloginfo('admin_email') ?>" />
|
30 |
+
<a href="#" onclick="$('#signup').submit();" class="btn call-to-action">$5 / month. Click for an Instant Signup</a>
|
31 |
+
<?php else: ?>
|
32 |
+
<input type="hidden" name="resub" value="1" />
|
33 |
+
<a href="#" onclick="$('#signup').submit();" class="btn call-to-action">$5 / month. Click to re-subscribe.</a>
|
34 |
+
<?php endif; ?>
|
35 |
+
</form>
|
36 |
+
</div>
|
37 |
+
<?php require 'footer.php' ?>
|