Version Description
Download this release
Release Info
Developer | supercleanse |
Plugin | Shortlinks by Pretty Links – Best WordPress Link Tracking Plugin |
Version | 1.2.7 |
Comparing to | |
See all releases |
Version 1.2.7
- classes/models/PrliClick.php +91 -0
- classes/models/PrliLink.php +153 -0
- classes/models/PrliReport.php +226 -0
- classes/models/PrliUtils.php +166 -0
- classes/models/models.inc.php +11 -0
- classes/views/prli-clicks/csv.php +22 -0
- classes/views/prli-clicks/list.php +80 -0
- classes/views/prli-links/edit.php +48 -0
- classes/views/prli-links/list.php +63 -0
- classes/views/prli-links/new.php +48 -0
- classes/views/prli-reports/form.php +38 -0
- classes/views/shared/errors.php +19 -0
- classes/views/shared/table-nav.php +93 -0
- images/bookmark.png +0 -0
- images/browser/abilon.png +0 -0
- images/browser/adobe.png +0 -0
- images/browser/akregator.png +0 -0
- images/browser/alcatel.png +0 -0
- images/browser/amaya.png +0 -0
- images/browser/amigavoyager.png +0 -0
- images/browser/analogx.png +0 -0
- images/browser/apt.png +0 -0
- images/browser/avant.png +0 -0
- images/browser/aweb.png +0 -0
- images/browser/bpftp.png +0 -0
- images/browser/bytel.png +0 -0
- images/browser/chimera.png +0 -0
- images/browser/chrome.png +0 -0
- images/browser/cyberdog.png +0 -0
- images/browser/da.png +0 -0
- images/browser/dillo.png +0 -0
- images/browser/doris.png +0 -0
- images/browser/dreamcast.png +0 -0
- images/browser/ecatch.png +0 -0
- images/browser/encompass.png +0 -0
- images/browser/epiphany.png +0 -0
- images/browser/ericsson.png +0 -0
- images/browser/feeddemon.png +0 -0
- images/browser/feedreader.png +0 -0
- images/browser/firefox.png +0 -0
- images/browser/flashget.png +0 -0
- images/browser/fpexpress.png +0 -0
- images/browser/fresco.png +0 -0
- images/browser/freshdownload.png +0 -0
- images/browser/frontpage.png +0 -0
- images/browser/galeon.png +0 -0
- images/browser/getright.png +0 -0
- images/browser/gnome.png +0 -0
- images/browser/gnus.png +0 -0
- images/browser/gozilla.png +0 -0
- images/browser/hotjava.png +0 -0
- images/browser/httrack.png +0 -0
- images/browser/ibrowse.png +0 -0
- images/browser/icab.png +0 -0
- images/browser/java.png +0 -0
- images/browser/jetbrains_omea.png +0 -0
- images/browser/kmeleon.png +0 -0
- images/browser/konqueror.png +0 -0
- images/browser/leechget.png +0 -0
- images/browser/lg.png +0 -0
- images/browser/lotusnotes.png +0 -0
- images/browser/lynx.png +0 -0
- images/browser/macweb.png +0 -0
- images/browser/mediaplayer.png +0 -0
- images/browser/motorola.png +0 -0
- images/browser/mozilla.png +0 -0
- images/browser/mplayer.png +0 -0
- images/browser/msie.png +0 -0
- images/browser/msie_large.png +0 -0
- images/browser/multizilla.png +0 -0
- images/browser/ncsa_mosaic.png +0 -0
- images/browser/neon.png +0 -0
- images/browser/netnewswire.png +0 -0
- images/browser/netpositive.png +0 -0
- images/browser/netscape.png +0 -0
- images/browser/netscape_large.png +0 -0
- images/browser/netshow.png +0 -0
- images/browser/newsfire.png +0 -0
- images/browser/newsgator.png +0 -0
- images/browser/newzcrawler.png +0 -0
- images/browser/nokia.png +0 -0
- images/browser/notavailable.png +0 -0
- images/browser/omniweb.png +0 -0
- images/browser/opera.png +0 -0
- images/browser/panasonic.png +0 -0
- images/browser/pdaphone.png +0 -0
- images/browser/philips.png +0 -0
- images/browser/phoenix.png +0 -0
- images/browser/pluck.png +0 -0
- images/browser/pulpfiction.png +0 -0
- images/browser/real.png +0 -0
- images/browser/rss.png +0 -0
- images/browser/rssbandit.png +0 -0
- images/browser/rssowl.png +0 -0
- images/browser/rssreader.png +0 -0
- images/browser/rssxpress.png +0 -0
- images/browser/safari.png +0 -0
- images/browser/sagem.png +0 -0
- images/browser/samsung.png +0 -0
- images/browser/sharp.png +0 -0
- images/browser/sharpreader.png +0 -0
- images/browser/shrook.png +0 -0
- images/browser/siemens.png +0 -0
- images/browser/sony.png +0 -0
- images/browser/staroffice.png +0 -0
- images/browser/subversion.png +0 -0
- images/browser/teleport.png +0 -0
- images/browser/trium.png +0 -0
- images/browser/unknown.png +0 -0
- images/browser/w3c.png +0 -0
- images/browser/webcopier.png +0 -0
- images/browser/webreaper.png +0 -0
- images/browser/webtv.png +0 -0
- images/browser/webzip.png +0 -0
- images/browser/winxbox.png +0 -0
- images/browser/wizz.png +0 -0
- images/os/aix.png +0 -0
- images/os/amigaos.png +0 -0
- images/os/apple.png +0 -0
- images/os/atari.png +0 -0
- images/os/beos.png +0 -0
- images/os/bsd.png +0 -0
- images/os/bsdfreebsd.png +0 -0
- images/os/bsdi.png +0 -0
- images/os/bsdnetbsd.png +0 -0
- images/os/bsdopenbsd.png +0 -0
- images/os/commodore.png +0 -0
- images/os/cpm.png +0 -0
- images/os/debian.png +0 -0
- images/os/digital.png +0 -0
- images/os/dos.png +0 -0
- images/os/dreamcast.png +0 -0
- images/os/freebsd.png +0 -0
- images/os/gnu.png +0 -0
- images/os/hpux.png +0 -0
- images/os/ibm.png +0 -0
- images/os/imode.png +0 -0
- images/os/irix.png +0 -0
- images/os/java.png +0 -0
- images/os/kfreebsd.png +0 -0
- images/os/linux.png +0 -0
- images/os/linuxcentos.png +0 -0
- images/os/linuxdebian.png +0 -0
- images/os/linuxfedora.png +0 -0
- images/os/linuxgentoo.png +0 -0
- images/os/linuxmandr.png +0 -0
- images/os/linuxredhat.png +0 -0
- images/os/linuxsuse.png +0 -0
- images/os/linuxubuntu.png +0 -0
- images/os/mac.png +0 -0
- images/os/macintosh.png +0 -0
- images/os/macosx.png +0 -0
- images/os/netbsd.png +0 -0
- images/os/netware.png +0 -0
- images/os/next.png +0 -0
- images/os/openbsd.png +0 -0
- images/os/os2.png +0 -0
- images/os/osf.png +0 -0
- images/os/psp.png +0 -0
- images/os/qnx.png +0 -0
- images/os/riscos.png +0 -0
- images/os/sco.png +0 -0
- images/os/sunos.png +0 -0
- images/os/symbian.png +0 -0
- images/os/unix.png +0 -0
- images/os/unknown.png +0 -0
- images/os/vms.png +0 -0
- images/os/webtv.png +0 -0
- images/os/win.png +0 -0
- images/os/win16.png +0 -0
- images/os/win2000.png +0 -0
- images/os/win2003.png +0 -0
- images/os/win95.png +0 -0
- images/os/win98.png +0 -0
- images/os/wince.png +0 -0
- images/os/winlong.png +0 -0
- images/os/winme.png +0 -0
- images/os/winnt.png +0 -0
- images/os/winunknown.png +0 -0
- images/os/winxbox.png +0 -0
- images/os/winxp.png +0 -0
- images/pretty-link-add.png +0 -0
- images/pretty-link-med.png +0 -0
- images/pretty-link-small.png +0 -0
- images/url_icon.gif +0 -0
- includes/jquery/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- includes/jquery/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- includes/jquery/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
- includes/jquery/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- includes/jquery/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- includes/jquery/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- includes/jquery/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
- includes/jquery/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- includes/jquery/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- includes/jquery/css/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
- includes/jquery/css/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
- includes/jquery/css/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
- includes/jquery/css/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
- includes/jquery/css/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
- includes/jquery/css/ui-lightness/jquery-ui-1.7.1.custom.css +404 -0
- includes/jquery/js/jquery-1.3.2.min.js +19 -0
- includes/jquery/js/jquery-ui-1.7.1.custom.min.js +273 -0
- includes/php/php_browsecap.ini +16810 -0
- includes/version-2-ichor/README.txt +8 -0
- includes/version-2-ichor/js/README.txt +12 -0
- includes/version-2-ichor/js/json/json2.js +461 -0
- includes/version-2-ichor/js/swfobject.js +5 -0
- includes/version-2-ichor/open-flash-chart.swf +0 -0
- pretty-link.php +375 -0
- prli-clicks.php +67 -0
- prli-config.php +10 -0
- prli-image-lookups.php +136 -0
- prli-links.php +109 -0
- prli-reports.php +9 -0
- prli.php +84 -0
- readme.txt +66 -0
- screenshot-1.png +0 -0
- screenshot-2.png +0 -0
- screenshot-3.png +0 -0
- screenshot-4.png +0 -0
classes/models/PrliClick.php
ADDED
@@ -0,0 +1,91 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class PrliClick
|
3 |
+
{
|
4 |
+
function table_name()
|
5 |
+
{
|
6 |
+
global $wpdb;
|
7 |
+
return $wpdb->prefix . 'prli_clicks';
|
8 |
+
}
|
9 |
+
|
10 |
+
/*
|
11 |
+
function create( $values )
|
12 |
+
{
|
13 |
+
global $wpdb, $wp_rewrite;
|
14 |
+
$query = 'INSERT INTO ' . $this->table_name() .
|
15 |
+
' (url,slug,forward_params,track_as_img,created_at) VALUES (\'' .
|
16 |
+
$values['url'] . '\',\'' .
|
17 |
+
$values['slug'] . '\',' .
|
18 |
+
(int)isset($values['forward_params']) . ',' .
|
19 |
+
(int)isset($values['track_as_img']) . ',' .
|
20 |
+
'NOW())';
|
21 |
+
$query_results = $wpdb->query($query);
|
22 |
+
$wp_rewrite->flush_rules();
|
23 |
+
return $query_results;
|
24 |
+
}
|
25 |
+
|
26 |
+
function update( $id, $values )
|
27 |
+
{
|
28 |
+
global $wpdb, $wp_rewrite;
|
29 |
+
$query = 'UPDATE ' . $this->table_name() .
|
30 |
+
' SET url=\'' . $values['url'] . '\', ' .
|
31 |
+
' slug=\'' . $values['slug'] . '\', ' .
|
32 |
+
' forward_params=' . (int)isset($values['forward_params']) . ', ' .
|
33 |
+
' track_as_img=' . (int)isset($values['track_as_img']) .
|
34 |
+
' WHERE id='.$id;
|
35 |
+
$query_results = $wpdb->query($query);
|
36 |
+
$wp_rewrite->flush_rules();
|
37 |
+
return $query_results;
|
38 |
+
}
|
39 |
+
|
40 |
+
function destroy( $id )
|
41 |
+
{
|
42 |
+
require_once(PRLI_MODELS_PATH.'/models.inc.php');
|
43 |
+
global $wpdb, $wp_rewrite;
|
44 |
+
$destroy = 'DELETE FROM ' . $this->table_name() . ' WHERE id=' . $id;
|
45 |
+
$wp_rewrite->flush_rules();
|
46 |
+
return $wpdb->query($destroy);
|
47 |
+
}
|
48 |
+
*/
|
49 |
+
|
50 |
+
function getOne( $id )
|
51 |
+
{
|
52 |
+
global $wpdb;
|
53 |
+
$click_table = $wpdb->prefix . "prli_clicks";
|
54 |
+
$query = 'SELECT * FROM ' . $this->table_name() . ' li WHERE id=' . $id;
|
55 |
+
return $wpdb->get_row($query);
|
56 |
+
}
|
57 |
+
|
58 |
+
function getAll($where = "")
|
59 |
+
{
|
60 |
+
global $wpdb;
|
61 |
+
$click_table = $wpdb->prefix . "prli_clicks";
|
62 |
+
$query = 'SELECT * FROM ' . $this->table_name() . $where . " ORDER BY created_at DESC";
|
63 |
+
return $wpdb->get_results($query);
|
64 |
+
}
|
65 |
+
|
66 |
+
// Pagination Methods
|
67 |
+
function getRecordCount($where="")
|
68 |
+
{
|
69 |
+
global $wpdb;
|
70 |
+
$query = 'SELECT COUNT(*) FROM ' . $this->table_name() . $where;
|
71 |
+
return $wpdb->get_var($query);
|
72 |
+
}
|
73 |
+
|
74 |
+
function getPageCount($p_size, $where="")
|
75 |
+
{
|
76 |
+
return ceil((int)$this->getRecordCount($where) / (int)$p_size);
|
77 |
+
}
|
78 |
+
|
79 |
+
function getPage($current_p,$p_size, $where = "")
|
80 |
+
{
|
81 |
+
global $wpdb;
|
82 |
+
$click_table = $wpdb->prefix . "prli_clicks";
|
83 |
+
$end_index = $current_p * $p_size;
|
84 |
+
$start_index = $end_index - $p_size;
|
85 |
+
$query = 'SELECT * FROM ' . $this->table_name() . $where . ' ORDER BY created_at DESC LIMIT ' . $start_index . ',' . $p_size . ';';
|
86 |
+
$results = $wpdb->get_results($query);
|
87 |
+
return $results;
|
88 |
+
}
|
89 |
+
|
90 |
+
}
|
91 |
+
?>
|
classes/models/PrliLink.php
ADDED
@@ -0,0 +1,153 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class PrliLink
|
3 |
+
{
|
4 |
+
function table_name()
|
5 |
+
{
|
6 |
+
global $wpdb;
|
7 |
+
return $wpdb->prefix . 'prli_links';
|
8 |
+
}
|
9 |
+
|
10 |
+
function create( $values )
|
11 |
+
{
|
12 |
+
global $wpdb, $wp_rewrite;
|
13 |
+
$query = 'INSERT INTO ' . $this->table_name() .
|
14 |
+
' (url,slug,forward_params,track_as_img,created_at) VALUES (\'' .
|
15 |
+
$values['url'] . '\',\'' .
|
16 |
+
$values['slug'] . '\',' .
|
17 |
+
(int)isset($values['forward_params']) . ',' .
|
18 |
+
(int)isset($values['track_as_img']) . ',' .
|
19 |
+
'NOW())';
|
20 |
+
$query_results = $wpdb->query($query);
|
21 |
+
$wp_rewrite->flush_rules();
|
22 |
+
return $query_results;
|
23 |
+
}
|
24 |
+
|
25 |
+
function update( $id, $values )
|
26 |
+
{
|
27 |
+
global $wpdb, $wp_rewrite;
|
28 |
+
$query = 'UPDATE ' . $this->table_name() .
|
29 |
+
' SET url=\'' . $values['url'] . '\', ' .
|
30 |
+
' slug=\'' . $values['slug'] . '\', ' .
|
31 |
+
' forward_params=' . (int)isset($values['forward_params']) . ', ' .
|
32 |
+
' track_as_img=' . (int)isset($values['track_as_img']) .
|
33 |
+
' WHERE id='.$id;
|
34 |
+
$query_results = $wpdb->query($query);
|
35 |
+
$wp_rewrite->flush_rules();
|
36 |
+
return $query_results;
|
37 |
+
}
|
38 |
+
|
39 |
+
function destroy( $id )
|
40 |
+
{
|
41 |
+
require_once(PRLI_MODELS_PATH.'/models.inc.php');
|
42 |
+
global $wpdb, $wp_rewrite;
|
43 |
+
$destroy = 'DELETE FROM ' . $this->table_name() . ' WHERE id=' . $id;
|
44 |
+
$wp_rewrite->flush_rules();
|
45 |
+
return $wpdb->query($destroy);
|
46 |
+
}
|
47 |
+
|
48 |
+
function getOne( $id )
|
49 |
+
{
|
50 |
+
global $wpdb;
|
51 |
+
$click_table = $wpdb->prefix . "prli_clicks";
|
52 |
+
$query = 'SELECT li.*, (SELECT COUNT(*) FROM ' . $click_table . ' cl WHERE cl.link_id = li.id) as clicks FROM ' . $this->table_name() . ' li WHERE id=' . $id . ';';
|
53 |
+
return $wpdb->get_row($query);
|
54 |
+
}
|
55 |
+
|
56 |
+
function getAll()
|
57 |
+
{
|
58 |
+
global $wpdb;
|
59 |
+
$click_table = $wpdb->prefix . "prli_clicks";
|
60 |
+
$query = 'SELECT li.*, (SELECT COUNT(*) FROM ' . $click_table . ' cl WHERE cl.link_id = li.id) as clicks FROM ' . $this->table_name() . ' li;';
|
61 |
+
return $wpdb->get_results($query);
|
62 |
+
}
|
63 |
+
|
64 |
+
// Pagination Methods
|
65 |
+
function getRecordCount($where="")
|
66 |
+
{
|
67 |
+
global $wpdb;
|
68 |
+
$query = 'SELECT COUNT(*) FROM ' . $this->table_name() . $where;
|
69 |
+
return $wpdb->get_var($query);
|
70 |
+
}
|
71 |
+
|
72 |
+
function getPageCount($p_size, $where="")
|
73 |
+
{
|
74 |
+
return ceil((int)$this->getRecordCount($where) / (int)$p_size);
|
75 |
+
}
|
76 |
+
|
77 |
+
function getPage($current_p,$p_size, $where = "")
|
78 |
+
{
|
79 |
+
global $wpdb;
|
80 |
+
$click_table = $wpdb->prefix . "prli_clicks";
|
81 |
+
$end_index = $current_p * $p_size;
|
82 |
+
$start_index = $end_index - $p_size;
|
83 |
+
$query = 'SELECT li.*, (SELECT COUNT(*) FROM ' . $click_table . ' cl WHERE cl.link_id = li.id) as clicks FROM ' . $this->table_name() . ' li' . $where . ' LIMIT ' . $start_index . ',' . $p_size . ';';
|
84 |
+
$results = $wpdb->get_results($query);
|
85 |
+
return $results;
|
86 |
+
}
|
87 |
+
|
88 |
+
/** I'm generating a slug that is by default 2-3 characters long.
|
89 |
+
* This gives us a possibility of 36^3 - 37 = 46,619 possible
|
90 |
+
* random slugs. That should be *more* than enough slugs for
|
91 |
+
* any website -- if I get any feedback that we need more then
|
92 |
+
* I can always make a config option to raise the # of chars.
|
93 |
+
*/
|
94 |
+
function generateValidSlug($num_chars = 3)
|
95 |
+
{
|
96 |
+
global $wpdb, $prli_utils;
|
97 |
+
|
98 |
+
// We're doing a base 36 hash which is why we're always doing everything by 36
|
99 |
+
$max_slug_value = pow(36,$num_chars);
|
100 |
+
$min_slug_value = 37; // we want to have at least 2 characters in the slug
|
101 |
+
$slug = base_convert( rand($min_slug_value,$max_slug_value), 10, 36 );
|
102 |
+
|
103 |
+
$query = "SELECT slug FROM " . $this->table_name(); // . " WHERE slug='" . $slug . "'";
|
104 |
+
$slugs = $wpdb->get_col($query,0);
|
105 |
+
|
106 |
+
// It is highly unlikely that we'll ever see 2 identical random slugs
|
107 |
+
// but just in case, here's some code to prevent collisions
|
108 |
+
while( in_array($slug,$slugs) or !$prli_utils->slugIsAvailable($slug) )
|
109 |
+
$slug = base_convert( rand($min_slug_value,$max_slug_value), 10, 36 );
|
110 |
+
|
111 |
+
return $slug;
|
112 |
+
}
|
113 |
+
|
114 |
+
function validate( $values )
|
115 |
+
{
|
116 |
+
global $wpdb, $prli_utils;
|
117 |
+
|
118 |
+
$errors = array();
|
119 |
+
if( $values['url'] == null or $values['url'] == '' )
|
120 |
+
$errors[] = "Link URL can't be blank";
|
121 |
+
|
122 |
+
if( $values['slug'] == null or $values['slug'] == '' )
|
123 |
+
$errors[] = "Pretty Link can't be blank";
|
124 |
+
|
125 |
+
if( !preg_match('/^http.?:\/\/.*\..*$/', $values['url'] ) )
|
126 |
+
$errors[] = "Link URL must be a correctly formatted url";
|
127 |
+
|
128 |
+
if( !preg_match('/^[a-zA-Z0-9\.\-_]+$/', $values['slug'] ) )
|
129 |
+
$errors[] = "Pretty Link must not contain spaces or special characters";
|
130 |
+
|
131 |
+
if($values['id'] != null and $values['id'] != '')
|
132 |
+
$query = "SELECT slug FROM " . $this->table_name() . " WHERE slug='" . $values['slug'] . "' AND id <> " . $values['id'];
|
133 |
+
else
|
134 |
+
$query = "SELECT slug FROM " . $this->table_name() . " WHERE slug='" . $values['slug'] . "'";
|
135 |
+
|
136 |
+
$slug_already_exists = $wpdb->get_var($query);
|
137 |
+
|
138 |
+
if( $slug_already_exists or !$prli_utils->slugIsAvailable($values['slug']) )
|
139 |
+
$errors[] = "This pretty link slug is already taken, please choose a different one";
|
140 |
+
|
141 |
+
if(isset($values['track_as_img']) and $values['track_as_img'] == 'on' and $values['url'] != null and $values['url'] != '')
|
142 |
+
{
|
143 |
+
$size = getimagesize($values['url']);
|
144 |
+
if(!preg_match('#image#',$size['mime']))
|
145 |
+
{
|
146 |
+
$errors[] = "If you want to track this pretty link as an image then your target url must be an image (png, jpeg, gif, etc.)";
|
147 |
+
}
|
148 |
+
}
|
149 |
+
|
150 |
+
return $errors;
|
151 |
+
}
|
152 |
+
}
|
153 |
+
?>
|
classes/models/PrliReport.php
ADDED
@@ -0,0 +1,226 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
//include PRLI_PATH.'/includes/version-2-ichor/php-ofc-library/open-flash-chart.php';
|
4 |
+
|
5 |
+
class PrliReport {
|
6 |
+
|
7 |
+
function setupClickReport($start_timestamp,$end_timestamp, $link_id = "all", $type = "all")
|
8 |
+
{
|
9 |
+
global $wpdb, $prli_utils;
|
10 |
+
|
11 |
+
$clicks_table = $wpdb->prefix . "prli_clicks";
|
12 |
+
$links_table = $wpdb->prefix . "prli_links";
|
13 |
+
|
14 |
+
// Scrub times and leave the dates
|
15 |
+
$start_timestamp = mktime(0, 0, 0, date('n', $start_timestamp), date('j', $start_timestamp), date('Y', $start_timestamp));
|
16 |
+
$end_timestamp = mktime(0, 0, 0, date('n', $end_timestamp), date('j', $end_timestamp), date('Y', $end_timestamp) );
|
17 |
+
|
18 |
+
$day_timestamp = $start_timestamp;
|
19 |
+
$data_array = array();
|
20 |
+
|
21 |
+
while($day_timestamp <= ($end_timestamp + 60*60*24))
|
22 |
+
{
|
23 |
+
$dyear = date('Y',$day_timestamp);
|
24 |
+
$dmon = date('n',$day_timestamp);
|
25 |
+
$ddom = date('j',$day_timestamp);
|
26 |
+
|
27 |
+
$query = "SELECT count(*) FROM $clicks_table c2 WHERE c2.created_at BETWEEN '$dyear-$dmon-$ddom 00:00:00' AND '$dyear-$dmon-$ddom 23:59:59'";
|
28 |
+
|
29 |
+
if($link_id != "all")
|
30 |
+
{
|
31 |
+
$query .= " AND link_id=$link_id";
|
32 |
+
}
|
33 |
+
|
34 |
+
if($type == "unique")
|
35 |
+
{
|
36 |
+
$query .= " AND first_click=1";
|
37 |
+
}
|
38 |
+
|
39 |
+
$data_array[date("Y-n-j",$day_timestamp)] = (int)$wpdb->get_var($query);
|
40 |
+
$day_timestamp += 60*60*24; // Advance one day
|
41 |
+
}
|
42 |
+
|
43 |
+
$top_click_count = $prli_utils->getTopValue(array_values($data_array));
|
44 |
+
|
45 |
+
if($link_id == "all")
|
46 |
+
$link_slug = "all links";
|
47 |
+
else
|
48 |
+
$link_slug = "'".$wpdb->get_var("SELECT slug FROM $links_table WHERE id=$link_id") . "'";
|
49 |
+
|
50 |
+
if($type == "all")
|
51 |
+
$type_string = "All clicks";
|
52 |
+
else
|
53 |
+
$type_string = "Unique clicks";
|
54 |
+
|
55 |
+
$json_array = array(
|
56 |
+
"elements" => array( array(
|
57 |
+
"type" => "line",
|
58 |
+
"values" => array_values($data_array),
|
59 |
+
"dot-style" => array(
|
60 |
+
"type" => "dot",
|
61 |
+
"dot-size" => 4,
|
62 |
+
"colour" => "#ffc94e",
|
63 |
+
"halo-size" => 1,
|
64 |
+
"tip" => "#val# $type_string"
|
65 |
+
),
|
66 |
+
"width" => 2
|
67 |
+
) ),
|
68 |
+
"title" => array(
|
69 |
+
"text" => 'Pretty Link: '.$type_string.' on '.$link_slug. ' between ' . date("Y-n-j",$start_timestamp) . ' and ' . date("Y-n-j",$end_timestamp),
|
70 |
+
"style" => "font-size: 16px; font-weight: bold; color: #3030d0; text-align: center; padding-bottom: 5px;"
|
71 |
+
),
|
72 |
+
"bg_colour" => "-1",
|
73 |
+
"y_axis" => array(
|
74 |
+
"min" => 0,
|
75 |
+
"max" => $top_click_count,
|
76 |
+
"steps" => (int)(($top_click_count>=10)?$top_click_count/10:1),
|
77 |
+
"colour" => "#A2ACBA"
|
78 |
+
),
|
79 |
+
"x_axis" => array(
|
80 |
+
"colour" => "#A2ACBA",
|
81 |
+
"grid-colour" => "#ffefa7",
|
82 |
+
"offset" => false,
|
83 |
+
"steps" => 4,
|
84 |
+
"labels" => array(
|
85 |
+
"steps" => 2,
|
86 |
+
"rotate" => 45,
|
87 |
+
"colour" => "#000000",
|
88 |
+
"labels" => array_keys($data_array)
|
89 |
+
)
|
90 |
+
)
|
91 |
+
);
|
92 |
+
|
93 |
+
return $this->prli_json_encode($json_array);
|
94 |
+
|
95 |
+
/*
|
96 |
+
$title = new title('Pretty Link: '.$type_string.' on '.$link_slug. ' between ' . date("Y-n-j",$start_timestamp) . ' and ' . date("Y-n-j",$end_timestamp));
|
97 |
+
|
98 |
+
$title->set_style('font-size: 16px; font-weight: bold; color: #3030d0; text-align: center; padding-bottom: 5px;');
|
99 |
+
|
100 |
+
$default_dot = new dot();
|
101 |
+
$default_dot->size(4);
|
102 |
+
//$default_dot->rotation(-15);
|
103 |
+
//$default_dot->hollow(false);
|
104 |
+
$default_dot->colour('#ffc94e');
|
105 |
+
$default_dot->halo_size(1);
|
106 |
+
$default_dot->tooltip( '#val# Clicks' );
|
107 |
+
|
108 |
+
$line = new line();
|
109 |
+
$line->set_default_dot_style($default_dot);
|
110 |
+
$line->set_values( array_values($data_array) );
|
111 |
+
$line->set_width(2);
|
112 |
+
|
113 |
+
$y = new y_axis();
|
114 |
+
$y->set_range( 0, $top_click_count, (int)(($top_click_count>=10)?$top_click_count/10:1) );
|
115 |
+
$y->set_colour( '#A2ACBA' );
|
116 |
+
|
117 |
+
$chart = new open_flash_chart();
|
118 |
+
$chart->set_title( $title );
|
119 |
+
$chart->set_bg_colour("-1");
|
120 |
+
$chart->set_y_axis( $y );
|
121 |
+
$chart->add_element( $line );
|
122 |
+
|
123 |
+
$x_labels = new x_axis_labels();
|
124 |
+
$x_labels->set_steps( 2 );
|
125 |
+
$x_labels->rotate(45);
|
126 |
+
$x_labels->set_colour( '#000000' );
|
127 |
+
$x_labels->set_labels( array_keys($data_array) );
|
128 |
+
|
129 |
+
$x = new x_axis();
|
130 |
+
$x->set_colour( '#A2ACBA' );
|
131 |
+
$x->set_grid_colour( '#ffefa7' );
|
132 |
+
$x->set_offset( false );
|
133 |
+
$x->set_steps(4);
|
134 |
+
|
135 |
+
// Add the X Axis Labels to the X Axis
|
136 |
+
$x->set_labels( $x_labels );
|
137 |
+
$chart->set_x_axis( $x );
|
138 |
+
|
139 |
+
return $chart->toPrettyString();
|
140 |
+
*/
|
141 |
+
}
|
142 |
+
|
143 |
+
// Detects whether an array is a true numerical array or an
|
144 |
+
// associative array (or hash).
|
145 |
+
function prli_array_type($item)
|
146 |
+
{
|
147 |
+
$array_type = 'unknown';
|
148 |
+
|
149 |
+
if(is_array($item))
|
150 |
+
{
|
151 |
+
$array_type = 'array';
|
152 |
+
|
153 |
+
foreach($item as $key => $value)
|
154 |
+
{
|
155 |
+
if(!is_numeric($key))
|
156 |
+
{
|
157 |
+
$array_type = 'hash';
|
158 |
+
break;
|
159 |
+
}
|
160 |
+
}
|
161 |
+
}
|
162 |
+
|
163 |
+
return $array_type;
|
164 |
+
}
|
165 |
+
|
166 |
+
// This eliminates the need to use php's built in json_encoder
|
167 |
+
// which only works with PHP 5.2 and above.
|
168 |
+
function prli_json_encode($json_array)
|
169 |
+
{
|
170 |
+
$json_str = '';
|
171 |
+
|
172 |
+
if(is_array($json_array))
|
173 |
+
{
|
174 |
+
if($this->prli_array_type($json_array) == 'array')
|
175 |
+
{
|
176 |
+
$first = true;
|
177 |
+
$json_str .= "[";
|
178 |
+
foreach($json_array as $item)
|
179 |
+
{
|
180 |
+
if(!$first)
|
181 |
+
$json_str .= ",";
|
182 |
+
|
183 |
+
if(is_numeric($item))
|
184 |
+
$json_str .= (($item < 0)?"\"$item\"":$item);
|
185 |
+
else if(is_array($item))
|
186 |
+
$json_str .= $this->prli_json_encode($item);
|
187 |
+
else if(is_string($item))
|
188 |
+
$json_str .= '"'.$item.'"';
|
189 |
+
else if(is_bool($item))
|
190 |
+
$json_str .= (($item)?"true":"false");
|
191 |
+
|
192 |
+
$first = false;
|
193 |
+
}
|
194 |
+
$json_str .= "]";
|
195 |
+
}
|
196 |
+
else if($this->prli_array_type($json_array) == 'hash')
|
197 |
+
{
|
198 |
+
$first = true;
|
199 |
+
$json_str .= "{";
|
200 |
+
foreach($json_array as $key => $item)
|
201 |
+
{
|
202 |
+
if(!$first)
|
203 |
+
$json_str .= ",";
|
204 |
+
|
205 |
+
$json_str .= "\"$key\":";
|
206 |
+
|
207 |
+
if(is_numeric($item))
|
208 |
+
$json_str .= (($item < 0)?"\"$item\"":$item);
|
209 |
+
else if(is_array($item))
|
210 |
+
$json_str .= $this->prli_json_encode($item);
|
211 |
+
else if(is_string($item))
|
212 |
+
$json_str .= "\"$item\"";
|
213 |
+
else if(is_bool($item))
|
214 |
+
$json_str .= (($item)?"true":"false");
|
215 |
+
|
216 |
+
$first = false;
|
217 |
+
}
|
218 |
+
$json_str .= "}";
|
219 |
+
}
|
220 |
+
}
|
221 |
+
|
222 |
+
return $json_str;
|
223 |
+
}
|
224 |
+
}
|
225 |
+
|
226 |
+
?>
|
classes/models/PrliUtils.php
ADDED
@@ -0,0 +1,166 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
require_once 'models.inc.php';
|
3 |
+
|
4 |
+
class PrliUtils
|
5 |
+
{
|
6 |
+
|
7 |
+
/** Okay I realize that Percentagize isn't really a word but
|
8 |
+
* this is so that the values we have will work with google
|
9 |
+
* charts.
|
10 |
+
*/
|
11 |
+
function percentagizeArray($data,$max_value)
|
12 |
+
{
|
13 |
+
$new_data = array();
|
14 |
+
foreach($data as $point)
|
15 |
+
{
|
16 |
+
if( $max_value > 0 )
|
17 |
+
{
|
18 |
+
$new_data[] = $point / $max_value * 100;
|
19 |
+
}
|
20 |
+
else
|
21 |
+
{
|
22 |
+
$new_data[] = 0;
|
23 |
+
}
|
24 |
+
}
|
25 |
+
return $new_data;
|
26 |
+
}
|
27 |
+
|
28 |
+
function getTopValue($values_array)
|
29 |
+
{
|
30 |
+
rsort($values_array);
|
31 |
+
return $values_array[0];
|
32 |
+
}
|
33 |
+
|
34 |
+
function getFirstClickDate()
|
35 |
+
{
|
36 |
+
global $wpdb;
|
37 |
+
|
38 |
+
$clicks_table = $wpdb->prefix . "prli_clicks";
|
39 |
+
$query = "SELECT created_at FROM $clicks_table ORDER BY created_at LIMIT 1";
|
40 |
+
$first_click = $wpdb->get_var($query);
|
41 |
+
|
42 |
+
if(isset($first_click))
|
43 |
+
{
|
44 |
+
return strtotime($first_click);
|
45 |
+
}
|
46 |
+
else
|
47 |
+
return null;
|
48 |
+
}
|
49 |
+
|
50 |
+
function getMonthsArray()
|
51 |
+
{
|
52 |
+
global $wpdb;
|
53 |
+
global $prli_click;
|
54 |
+
|
55 |
+
$months = array();
|
56 |
+
$year = date("Y");
|
57 |
+
$month = date("m");
|
58 |
+
$current_timestamp = time();
|
59 |
+
$current_month_timestamp = mktime(0, 0, 0, date("m", $current_timestamp), 1, date("Y", $current_timestamp));
|
60 |
+
|
61 |
+
$clicks_table = $prli_click->tableName();
|
62 |
+
$first_click = $wpdb->get_var("SELECT created_at FROM $clicks_table ORDER BY created_at LIMIT 1;");
|
63 |
+
$first_timestamp = ((empty($first_click))?$current_timestamp:strtotime($first_click));
|
64 |
+
$first_date = mktime(0, 0, 0, date("m", $first_timestamp), 1, date("Y", $first_timestamp));
|
65 |
+
|
66 |
+
while($current_month_timestamp >= $first_date)
|
67 |
+
{
|
68 |
+
$months[] = $current_month_timestamp;
|
69 |
+
if(date("m") == 1)
|
70 |
+
{
|
71 |
+
$current_month_timestamp = mktime(0, 0, 0, 12, 1, date("Y", $current_month_timestamp)-1);
|
72 |
+
}
|
73 |
+
else
|
74 |
+
{
|
75 |
+
$current_month_timestamp = mktime(0, 0, 0, date("m", $current_month_timestamp)-1, 1, date("Y", $current_month_timestamp));
|
76 |
+
}
|
77 |
+
}
|
78 |
+
return $months;
|
79 |
+
}
|
80 |
+
|
81 |
+
// For Pagination
|
82 |
+
function getLastRecordNum($r_count,$current_p,$p_size)
|
83 |
+
{
|
84 |
+
return (($r_count < ($current_p * $p_size))?$r_count:($current_p * $p_size));
|
85 |
+
}
|
86 |
+
|
87 |
+
// For Pagination
|
88 |
+
function getFirstRecordNum($r_count,$current_p,$p_size)
|
89 |
+
{
|
90 |
+
if($current_p == 1)
|
91 |
+
{
|
92 |
+
return 1;
|
93 |
+
}
|
94 |
+
else
|
95 |
+
{
|
96 |
+
return ($this->getLastRecordNum($r_count,($current_p - 1),$p_size) + 1);
|
97 |
+
}
|
98 |
+
}
|
99 |
+
|
100 |
+
function slugIsAvailable($slug)
|
101 |
+
{
|
102 |
+
global $wpdb;
|
103 |
+
|
104 |
+
$posts_table = $wpdb->prefix . "posts";
|
105 |
+
$terms_table = $wpdb->prefix . "terms";
|
106 |
+
|
107 |
+
$post_slug = $wpdb->get_var("SELECT post_name FROM $posts_table WHERE post_name='$slug'");
|
108 |
+
$term_slug = $wpdb->get_col("SELECT slug FROM $terms_table WHERE slug='$slug'");
|
109 |
+
|
110 |
+
return ( $post_slug != $slug and $term_slug != $slug );
|
111 |
+
}
|
112 |
+
|
113 |
+
/* Needed because we don't know if the target uesr will have a browsercap file installed
|
114 |
+
on their server ... particularly in a shared hosting environment this is difficult
|
115 |
+
*/
|
116 |
+
function php_get_browser($agent = NULL)
|
117 |
+
{
|
118 |
+
$agent=$agent?$agent:$_SERVER['HTTP_USER_AGENT'];
|
119 |
+
$yu=array();
|
120 |
+
$q_s=array("#\.#","#\*#","#\?#");
|
121 |
+
$q_r=array("\.",".*",".?");
|
122 |
+
$brows=parse_ini_file(PRLI_PATH."/includes/php/php_browsecap.ini",true);
|
123 |
+
foreach($brows as $k=>$t)
|
124 |
+
{
|
125 |
+
if(fnmatch($k,$agent))
|
126 |
+
{
|
127 |
+
$yu['browser_name_pattern']=$k;
|
128 |
+
$pat=preg_replace($q_s,$q_r,$k);
|
129 |
+
$yu['browser_name_regex']=strtolower("^$pat$");
|
130 |
+
foreach($brows as $g=>$r)
|
131 |
+
{
|
132 |
+
if($t['Parent']==$g)
|
133 |
+
{
|
134 |
+
foreach($brows as $a=>$b)
|
135 |
+
{
|
136 |
+
if($r['Parent']==$a)
|
137 |
+
{
|
138 |
+
$yu=array_merge($yu,$b,$r,$t);
|
139 |
+
foreach($yu as $d=>$z)
|
140 |
+
{
|
141 |
+
$l=strtolower($d);
|
142 |
+
$hu[$l]=$z;
|
143 |
+
}
|
144 |
+
}
|
145 |
+
}
|
146 |
+
}
|
147 |
+
}
|
148 |
+
|
149 |
+
break;
|
150 |
+
}
|
151 |
+
}
|
152 |
+
|
153 |
+
return $hu;
|
154 |
+
}
|
155 |
+
|
156 |
+
function get_browser_image()
|
157 |
+
{
|
158 |
+
|
159 |
+
}
|
160 |
+
|
161 |
+
function get_os_image()
|
162 |
+
{
|
163 |
+
}
|
164 |
+
|
165 |
+
}
|
166 |
+
?>
|
classes/models/models.inc.php
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
require_once(PRLI_MODELS_PATH.'/PrliLink.php');
|
3 |
+
require_once(PRLI_MODELS_PATH.'/PrliClick.php');
|
4 |
+
require_once(PRLI_MODELS_PATH.'/PrliReport.php');
|
5 |
+
require_once(PRLI_MODELS_PATH.'/PrliUtils.php');
|
6 |
+
|
7 |
+
$prli_link = new PrliLink();
|
8 |
+
$prli_click = new PrliClick();
|
9 |
+
$prli_report = new PrliReport();
|
10 |
+
$prli_utils = new PrliUtils();
|
11 |
+
?>
|
classes/views/prli-clicks/csv.php
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
if(is_user_logged_in() and $current_user->user_level >= 8)
|
3 |
+
{
|
4 |
+
$filename = date("ymdHis",time()) . '_' . $link_name . '_pretty_link_clicks.csv';
|
5 |
+
header("Content-Type: text/x-csv");
|
6 |
+
header("Content-Disposition: attachment; filename=\"$filename\"");
|
7 |
+
header("Expires: ".gmdate("D, d M Y H:i:s", mktime(date("H")+2, date("i"), date("s"), date("m"), date("d"), date("Y")))." GMT");
|
8 |
+
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
|
9 |
+
header("Cache-Control: no-cache, must-revalidate");
|
10 |
+
header("Pragma: no-cache");
|
11 |
+
|
12 |
+
echo '"Browser","Browser Version","Platform","IP","Timestamp","Referrer","Host","Link"' . "\n";
|
13 |
+
foreach($clicks as $click)
|
14 |
+
{
|
15 |
+
$link = $prli_link->getOne($click->link_id);
|
16 |
+
|
17 |
+
echo "\"$click->btype\",\"$click->bversion\",\"$click->os\",\"$click->ip\",\"$click->created_at\",\"$click->referer\",\"$click->host\",\"" . ((empty($link->name))?$link->slug:$link->name) . "\"\n";
|
18 |
+
}
|
19 |
+
}
|
20 |
+
else
|
21 |
+
header("Location: " . get_option("siteurl"));
|
22 |
+
?>
|
classes/views/prli-clicks/list.php
ADDED
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="wrap">
|
2 |
+
<p style="font-size: 14px; font-weight: bold; float: right; padding-top: 25px;"><a href="http://blairwilliams.com/faq" target="_blank">Get Help</a> | <a href="http://blairwilliams.com/blog" target="_blank">Blog</a> | <a href="http://blairwilliams.com/don" target="_blank">Donate</a></p>
|
3 |
+
<h2><img src="<?php echo PRLI_URL.'/images/pretty-link-med.png'; ?>"/> Pretty Link: Clicks</h2>
|
4 |
+
<h3>For <?php echo $link_name; ?></h3>
|
5 |
+
|
6 |
+
<?php
|
7 |
+
if(isset($_GET['l']))
|
8 |
+
echo '<a href="?page='. PRLI_PLUGIN_NAME .'/prli-links.php">« Back to Links</a>';
|
9 |
+
|
10 |
+
require(PRLI_VIEWS_PATH.'/shared/table-nav.php');
|
11 |
+
?>
|
12 |
+
|
13 |
+
<table class="widefat post fixed" cellspacing="0">
|
14 |
+
<thead>
|
15 |
+
<tr>
|
16 |
+
<th class="manage-column" width="5%">Browser</th>
|
17 |
+
<th class="manage-column" width="15%">IP</th>
|
18 |
+
<th class="manage-column" width="10%">Timestamp</th>
|
19 |
+
<th class="manage-column" width="30%">Referrer</th>
|
20 |
+
<th class="manage-column" width="30%">Host</th>
|
21 |
+
<th class="manage-column" width="10%">Link</th>
|
22 |
+
</tr>
|
23 |
+
</thead>
|
24 |
+
<?php
|
25 |
+
|
26 |
+
if(count($clicks) <= 0)
|
27 |
+
{
|
28 |
+
?>
|
29 |
+
<tr>
|
30 |
+
<td colspan="5">No Clicks have been recorded yet</td>
|
31 |
+
</tr>
|
32 |
+
<?php
|
33 |
+
}
|
34 |
+
else
|
35 |
+
{
|
36 |
+
foreach($clicks as $click)
|
37 |
+
{
|
38 |
+
$link = $prli_link->getOne($click->link_id);
|
39 |
+
|
40 |
+
?>
|
41 |
+
<tr>
|
42 |
+
<td><img src="/wp-content/plugins/<?php echo PRLI_PLUGIN_NAME; ?>/images/browser/<?php echo prli_browser_image($click->btype); ?>" alt="<?php echo $click->btype . " v" . $click->bversion; ?>" title="<?php echo $click->btype . " v" . $click->bversion; ?>"/> <img src="/wp-content/plugins/<?php echo PRLI_PLUGIN_NAME; ?>/images/os/<?php echo prli_os_image($click->os); ?>" alt="<?php echo $click->os; ?>" title="<?php echo $click->os; ?>"/></td>
|
43 |
+
<td><?php echo $click->ip; ?></td>
|
44 |
+
<td><?php echo $click->created_at; ?></td>
|
45 |
+
<td><?php echo $click->referer; ?></td>
|
46 |
+
<td><?php echo $click->host; ?></td>
|
47 |
+
<td><?php echo ((empty($link->name))?$link->slug:$link->name); ?></td>
|
48 |
+
</tr>
|
49 |
+
<?php
|
50 |
+
}
|
51 |
+
}
|
52 |
+
?>
|
53 |
+
<tfoot>
|
54 |
+
<tr>
|
55 |
+
<th class="manage-column">Browser</th>
|
56 |
+
<th class="manage-column">IP</th>
|
57 |
+
<th class="manage-column">Timestamp</th>
|
58 |
+
<th class="manage-column">Referrer</th>
|
59 |
+
<th class="manage-column">Host</th>
|
60 |
+
<th class="manage-column">Link</th>
|
61 |
+
</tr>
|
62 |
+
</tfoot>
|
63 |
+
</table>
|
64 |
+
<?php
|
65 |
+
if(isset($_GET['l']))
|
66 |
+
{
|
67 |
+
?>
|
68 |
+
<a href="/wp-content/plugins/<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php?action=csv&l=<?php echo $_GET['l']; ?>">Download CSV (<?php echo $link_name; ?>)</a>
|
69 |
+
<?php
|
70 |
+
}
|
71 |
+
else
|
72 |
+
{
|
73 |
+
?>
|
74 |
+
<a href="/wp-content/plugins/<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php?action=csv">Download CSV (<?php echo $link_name; ?>)</a>
|
75 |
+
<?php
|
76 |
+
}
|
77 |
+
require(PRLI_VIEWS_PATH.'/shared/table-nav.php');
|
78 |
+
?>
|
79 |
+
|
80 |
+
</div>
|
classes/views/prli-links/edit.php
ADDED
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="wrap">
|
2 |
+
<h2><img src="<?php echo PRLI_URL.'/images/pretty-link-med.png'; ?>"/> Pretty Link: Edit Link</h2>
|
3 |
+
|
4 |
+
<?php
|
5 |
+
require(PRLI_VIEWS_PATH.'/shared/errors.php');
|
6 |
+
?>
|
7 |
+
|
8 |
+
<form name="form1" method="post" action="?page=<?php print PRLI_PLUGIN_NAME ?>/prli-links.php">
|
9 |
+
<input type="hidden" name="action" value="update">
|
10 |
+
<input type="hidden" name="id" value="<?php print $id; ?>">
|
11 |
+
<?php wp_nonce_field('update-options'); ?>
|
12 |
+
|
13 |
+
<table class="form-table">
|
14 |
+
<tr>
|
15 |
+
<td width="75px" valign="top">URL*: </td>
|
16 |
+
<td><input type="text" name="url" value="<?php print (($_POST['url'] != null and $record == null)?$_POST['url']:$record->url); ?>" size="75">
|
17 |
+
<br/><span class="setting-description">Enter the URL you want to mask and track. Don't forget to start your url with <code>http://</code> or <code>https://</code>. Example: <code>http://www.yoururl.com</code></span></td>
|
18 |
+
</tr>
|
19 |
+
<tr>
|
20 |
+
<td valign="top">Pretty Link*: </td>
|
21 |
+
<td><strong><?php print get_option('siteurl'); ?></strong>/<input type="text" name="slug" value="<?php print (($_POST['slug'] != null and $record == null)?$_POST['slug']:$record->slug); ?>" size="25">
|
22 |
+
<br/><span class="setting-description">Enter the slug (word trailing your main URL) that will form your pretty link and redirect to the URL above.</span></td>
|
23 |
+
</tr>
|
24 |
+
</table>
|
25 |
+
<a href="#" class="advanced_toggle">Advanced Options</a>
|
26 |
+
<div class="advanced_pane" style="display:none;">
|
27 |
+
<table class="form-table">
|
28 |
+
<tr>
|
29 |
+
<td colspan="2">
|
30 |
+
<input type="checkbox" name="forward_params" <?php print ((($_POST['forward_params'] or $record->forward_params) and ($_POST['forward_params'] == 'on' or $record->forward_params == 1))?'checked="true"':''); ?>/> Forward Parameters (experimental)
|
31 |
+
<br/><span class="setting-description">Select this option if you want to forward custom parameters through your pretty link to your target url. Note: The Pretty Link plugin uses a parameter named <code>sprli</code> for tracking purposes and is therefore not available as one of your custom parameters.</span>
|
32 |
+
</td>
|
33 |
+
</tr>
|
34 |
+
<tr>
|
35 |
+
<td colspan="2">
|
36 |
+
<input type="checkbox" name="track_as_img" <?php print ((($_POST['track_as_img'] or $record->track_as_img) and ($_POST['track_as_img'] == 'on' or $record->track_as_img == 1))?'checked="true"':''); ?>/> Track as an Image (experimental)
|
37 |
+
<br/><span class="setting-description">Select this option if you want to track this link as an image instead of as a link. This option is useful if you want to track the number of times a page or email is opened. If you place your Pretty Link inside an img tag on the page (Example: <code><img src="<?php echo get_option('siteurl') . "/yourslug"; ?>" /></code>) then the image will be tracked as a click and then displayed. Note: If this option is selected your target url must be an image.</span>
|
38 |
+
</td>
|
39 |
+
</tr>
|
40 |
+
</table>
|
41 |
+
</div>
|
42 |
+
|
43 |
+
<p class="submit">
|
44 |
+
<input type="submit" name="Submit" value="Update" /> or <a href="?page=<?php print PRLI_PLUGIN_NAME ?>/prli-links.php">Cancel</a>
|
45 |
+
</p>
|
46 |
+
|
47 |
+
</form>
|
48 |
+
</div>
|
classes/views/prli-links/list.php
ADDED
@@ -0,0 +1,63 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="wrap">
|
2 |
+
<p style="font-size: 14px; font-weight: bold; float: right; padding-top: 25px;"><a href="http://blairwilliams.com/faq" target="_blank">Get Help</a> | <a href="http://blairwilliams.com/blog" target="_blank">Blog</a> | <a href="http://blairwilliams.com/don" target="_blank">Donate</a></p>
|
3 |
+
<h2><img src="<?php echo PRLI_URL.'/images/pretty-link-med.png'; ?>"/> Pretty Link: Links</h2>
|
4 |
+
<div id="message" class="updated fade" style="padding:5px;"><?php echo $prli_message; ?></div>
|
5 |
+
<p><a href="?page=<?php print PRLI_PLUGIN_NAME; ?>/prli-links.php&action=new"><img src="<?php echo PRLI_URL.'/images/pretty-link-add.png'; ?>"/> Add a Pretty Link</a> | <a href="?page=<?php print PRLI_PLUGIN_NAME; ?>/prli-links.php®enerate=true">Manually Regenerate Pretty Links</a></p>
|
6 |
+
<?php
|
7 |
+
require(PRLI_VIEWS_PATH.'/shared/table-nav.php');
|
8 |
+
?>
|
9 |
+
<table class="widefat post fixed" cellspacing="0">
|
10 |
+
<thead>
|
11 |
+
<tr>
|
12 |
+
<th class="manage-column" width="30%">Slug</th>
|
13 |
+
<th class="manage-column" width="8%">Clicks</th>
|
14 |
+
<th class="manage-column" width="37%">URL</th>
|
15 |
+
<th class="manage-column" width="25%">Pretty Link</th>
|
16 |
+
</tr>
|
17 |
+
</thead>
|
18 |
+
<?php
|
19 |
+
|
20 |
+
if(count($links) <= 0)
|
21 |
+
{
|
22 |
+
?>
|
23 |
+
<tr>
|
24 |
+
<td colspan="5"><a href="?page=<?php print PRLI_PLUGIN_NAME; ?>/prli-links.php&action=new"><img src="<?php echo PRLI_URL.'/images/pretty-link-add.png'; ?>"/> Add your First Pretty Link</a></td>
|
25 |
+
</tr>
|
26 |
+
<?php
|
27 |
+
}
|
28 |
+
else
|
29 |
+
{
|
30 |
+
foreach($links as $link)
|
31 |
+
{
|
32 |
+
$pretty_link_url = get_option('siteurl') . '/' . $link->slug;
|
33 |
+
?>
|
34 |
+
<tr>
|
35 |
+
<td class="edit_link">
|
36 |
+
<a href="<? print $pretty_link_url; ?>" target="_blank" title="Visit <?php echo $pretty_link_url; ?> in New Window"><img src="<?php echo PRLI_URL.'/images/url_icon.gif'; ?>" name="Visit" alt="Visit"/></a> <a class="slug_name" href="?page=<?php print PRLI_PLUGIN_NAME; ?>/prli-links.php&action=edit&id=<?php print $link->id; ?>" title="Edit <?php echo $link->slug; ?>"><?php print $link->slug; ?></a>
|
37 |
+
<br/>
|
38 |
+
<div class="link_actions" style="display:none;">
|
39 |
+
<a href="?page=<?php print PRLI_PLUGIN_NAME; ?>/prli-links.php&action=edit&id=<?php print $link->id; ?>" title="Edit <?php echo $link->slug; ?>">Edit</a> | <a href="?page=<?php print PRLI_PLUGIN_NAME; ?>/prli-links.php&action=destroy&id=<?php print $link->id; ?>" onclick="return confirm('Are you sure you want to delete your <?php print $link->slug; ?> Pretty Link?');" title="Delete <?php echo $link->slug; ?>">Delete</a> | <a href="?page=<?php print PRLI_PLUGIN_NAME; ?>/prli-clicks.php&l=<?php echo $link->id; ?>" title="View clicks for <?php print $link->slug; ?>">Clicks</a> | <a href="?page=<?php print PRLI_PLUGIN_NAME; ?>/prli-reports.php&link=<?php echo $link->id; ?>" title="View stats for <?php print $link->slug; ?>">Stats</a> | <a href="http://twitter.com/home?status=<?php echo $pretty_link_url; ?>" target="_blank" title="Post <?php echo $pretty_link_url; ?> to Twitter">Twitter</a> | <a href="mailto:?subject=Pretty Link&body=<?php echo $pretty_link_url; ?>" target="_blank" title="Send <?php echo $pretty_link_url; ?> in an Email">Email</a>
|
40 |
+
</div>
|
41 |
+
</td>
|
42 |
+
<td><?php print $link->clicks; ?></td>
|
43 |
+
<td><a href="<? print $link->url; ?>" target="_blank" title="Visit <?php echo $link->url; ?> in New Window"><img src="<?php echo PRLI_URL.'/images/url_icon.gif'; ?>" name="Visit" alt="Visit"/></a> <? print $link->url; ?></td>
|
44 |
+
<td><input type='text' style="font-size: 10px;" readonly="true" onclick='this.select();' onfocus='this.select();' value='<?php echo $pretty_link_url; ?>' size="30" /></td>
|
45 |
+
</tr>
|
46 |
+
<?php
|
47 |
+
}
|
48 |
+
}
|
49 |
+
?>
|
50 |
+
<tfoot>
|
51 |
+
<tr>
|
52 |
+
<th class="manage-column">Slug</th>
|
53 |
+
<th class="manage-column">Clicks</th>
|
54 |
+
<th class="manage-column">URL</th>
|
55 |
+
<th class="manage-column">Pretty Link</th>
|
56 |
+
</tr>
|
57 |
+
</tfoot>
|
58 |
+
</table>
|
59 |
+
<?php
|
60 |
+
require(PRLI_VIEWS_PATH.'/shared/table-nav.php');
|
61 |
+
?>
|
62 |
+
|
63 |
+
</div>
|
classes/views/prli-links/new.php
ADDED
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="wrap">
|
2 |
+
<h2><img src="<?php echo PRLI_URL.'/images/pretty-link-med.png'; ?>"/> Pretty Link: Add Link</h2>
|
3 |
+
|
4 |
+
<?php
|
5 |
+
require(PRLI_VIEWS_PATH.'/shared/errors.php');
|
6 |
+
?>
|
7 |
+
|
8 |
+
<form name="form1" method="post" action="?page=<?php print PRLI_PLUGIN_NAME ?>/prli-links.php">
|
9 |
+
<input type="hidden" name="action" value="create">
|
10 |
+
<?php wp_nonce_field('update-options'); ?>
|
11 |
+
<input type="hidden" name="id" value="<?php print $id; ?>">
|
12 |
+
|
13 |
+
<table class="form-table">
|
14 |
+
<tr>
|
15 |
+
<td width="75px" valign="top">URL*: </td>
|
16 |
+
<td><input type="text" name="url" value="<?php print (($_POST['url'] != null)?$_POST['url']:''); ?>" size="75">
|
17 |
+
<br/><span class="setting-description">Enter the URL you want to mask and track. Don't forget to start your url with <code>http://</code> or <code>https://</code>. Example: <code>http://www.yoururl.com</code></span></td>
|
18 |
+
</tr>
|
19 |
+
<tr>
|
20 |
+
<td valign="top">Pretty Link*: </td>
|
21 |
+
<td><strong><?php print get_option('siteurl'); ?></strong>/<input type="text" name="slug" value="<?php print (($_POST['slug'] != null)?$_POST['slug']:$prli_link->generateValidSlug()); ?>" size="25">
|
22 |
+
<br/><span class="setting-description">Use the auto-generated short slug (2-3 characters) here or enter any word (must only contain letters, numbers or the following special characters: ".","-" or "_") that will form your pretty link and redirect to the URL above. Just refresh this page to auto-generate another slug.</span></td>
|
23 |
+
</tr>
|
24 |
+
</table>
|
25 |
+
<a href="#" class="advanced_toggle">Advanced Options</a>
|
26 |
+
<div class="advanced_pane" style="display:none;">
|
27 |
+
<table class="form-table">
|
28 |
+
<tr>
|
29 |
+
<td colspan="2">
|
30 |
+
<input type="checkbox" name="forward_params" <?php print ((isset($_POST['forward_params']) and $_POST['forward_params'] == 'on')?'checked="true"':''); ?>/> Forward Parameters (experimental)
|
31 |
+
<br/><span class="setting-description">Select this option if you want to forward custom parameters through your pretty link to your target url. Note: The Pretty Link plugin uses a parameter named <code>sprli</code> for tracking purposes and is therefore not available as one of your custom parameters.</span>
|
32 |
+
</td>
|
33 |
+
</tr>
|
34 |
+
<tr>
|
35 |
+
<td colspan="2">
|
36 |
+
<input type="checkbox" name="track_as_img" <?php print ((isset($_POST['track_as_img']) and $_POST['track_as_img'] == 'on')?'checked="true"':''); ?>/> Track as an Image (experimental)
|
37 |
+
<br/><span class="setting-description">Select this option if you want to track this link as an image instead of as a link. This option is useful if you want to track the number of times a page or email is opened. If you place your Pretty Link inside an img tag on the page (Example: <code><img src="<?php echo get_option('siteurl') . "/yourslug"; ?>" /></code>) then the image will be tracked as a click and then displayed. Note: If this option is selected your target url must be an image.</span>
|
38 |
+
</td>
|
39 |
+
</tr>
|
40 |
+
</table>
|
41 |
+
</div>
|
42 |
+
|
43 |
+
<p class="submit">
|
44 |
+
<input type="submit" name="Submit" value="Create" /> or <a href="?page=<?php print PRLI_PLUGIN_NAME ?>/prli-links.php">Cancel</a>
|
45 |
+
</p>
|
46 |
+
|
47 |
+
</form>
|
48 |
+
</div>
|
classes/views/prli-reports/form.php
ADDED
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="wrap">
|
2 |
+
<p style="font-size: 14px; font-weight: bold; float: right; padding-top: 25px;"><a href="http://blairwilliams.com/faq" target="_blank">Get Help</a> | <a href="http://blairwilliams.com/blog" target="_blank">Blog</a> | <a href="http://blairwilliams.com/don" target="_blank">Donate</a></p>
|
3 |
+
<h2><img src="<?php echo PRLI_URL.'/images/pretty-link-med.png'; ?>"/> Pretty Link: Reports</h2>
|
4 |
+
<a href="#" class="filter_toggle">Customize Report</a>
|
5 |
+
<div class="filter_pane" style="display:none;">
|
6 |
+
<form class="form-fields" name="form2" method="post" action="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI']); ?>">
|
7 |
+
<?php wp_nonce_field('prli-reports'); ?>
|
8 |
+
<span>Link:</span>
|
9 |
+
<select id="link" name="link" style="display: inline;">
|
10 |
+
<option value="all"<?php print ((!isset($_POST['link']) or $_POST['link'] == "all")?" selected=\"true\"":""); ?>>All </option>
|
11 |
+
<?php
|
12 |
+
foreach($prli_link->getAll() as $link)
|
13 |
+
{
|
14 |
+
?>
|
15 |
+
<option value="<?php print $link->id; ?>"<?php print (($_POST['link'] == $link->id)?" selected=\"true\"":""); ?>><?php print $link->slug; ?> </option>
|
16 |
+
<?php
|
17 |
+
}
|
18 |
+
?>
|
19 |
+
</select>
|
20 |
+
<span>Type:</span>
|
21 |
+
<select id="type" name="type" style="display: inline;">
|
22 |
+
<option value="all"<?php print ((!isset($_POST['type']) or $_POST['type'] == "all")?" selected=\"true\"":""); ?>>All Clicks </option>
|
23 |
+
<option value="unique"<?php print (($_POST['type'] == "unique")?" selected=\"true\"":""); ?>>Unique Clicks </option>
|
24 |
+
</select>
|
25 |
+
<br/>
|
26 |
+
<br/>
|
27 |
+
<span>Date Range:</span>
|
28 |
+
<div id="dateselectors" style="display: inline;">
|
29 |
+
<input type="text" name="sdate" id="sdate" value="<?php echo $_POST['sdate']; ?>" style="display:inline;"/> to <input type="text" name="edate" id="edate" value="<?php echo $_POST['edate']; ?>" style="display:inline;"/>
|
30 |
+
</div>
|
31 |
+
<br/>
|
32 |
+
<br/>
|
33 |
+
<div class="submit" style="display: inline;"><input type="submit" name="Submit" value="Customize"/> or <a href="#" class="filter_toggle">Cancel</a></div>
|
34 |
+
</form>
|
35 |
+
</div>
|
36 |
+
<br/>
|
37 |
+
<div id="my_chart"></div>
|
38 |
+
</div>
|
classes/views/shared/errors.php
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
if( $errors != null and count($errors) > 0 )
|
3 |
+
{
|
4 |
+
?>
|
5 |
+
<div class="error">
|
6 |
+
<ul>
|
7 |
+
<?php
|
8 |
+
foreach( $errors as $error )
|
9 |
+
{
|
10 |
+
?>
|
11 |
+
<li><strong>ERROR</strong>: <?php print $error; ?></li>
|
12 |
+
<?php
|
13 |
+
}
|
14 |
+
?>
|
15 |
+
</ul>
|
16 |
+
</div>
|
17 |
+
<?php
|
18 |
+
}
|
19 |
+
?>
|
classes/views/shared/table-nav.php
ADDED
@@ -0,0 +1,93 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
// Only show the pager bar if there is more than 1 page
|
3 |
+
if($page_count > 1)
|
4 |
+
{
|
5 |
+
?>
|
6 |
+
<div class="tablenav">
|
7 |
+
<div class='tablenav-pages'><span class="displaying-num">Displaying <?php print "$page_first_record–$page_last_record of $record_count"; ?></span>
|
8 |
+
|
9 |
+
<?php
|
10 |
+
// Only show the prev page button if the current page is not the first page
|
11 |
+
if($current_page > 1)
|
12 |
+
{
|
13 |
+
?>
|
14 |
+
<a class='prev page-numbers' href='?page=<?php print PRLI_PLUGIN_NAME; ?>/<?php print $controller_file . $page_params; ?>&paged=<?php print($current_page-1); ?>'>«</a>
|
15 |
+
<?php
|
16 |
+
}
|
17 |
+
|
18 |
+
// First page is always displayed
|
19 |
+
if($current_page==1)
|
20 |
+
{
|
21 |
+
?>
|
22 |
+
<span class='page-numbers current'>1</span>
|
23 |
+
<?php
|
24 |
+
}
|
25 |
+
else
|
26 |
+
{
|
27 |
+
?>
|
28 |
+
<a class='page-numbers' href='?page=<?php print PRLI_PLUGIN_NAME; ?>/<?php print $controller_file . $page_params; ?>&paged=1'>1</a>
|
29 |
+
<?php
|
30 |
+
}
|
31 |
+
|
32 |
+
// If the current page is more than 2 spaces away from the first page then we put some dots in here
|
33 |
+
if($current_page >= 5)
|
34 |
+
{
|
35 |
+
?>
|
36 |
+
<span class='page-numbers dots'>...</span>
|
37 |
+
<?php
|
38 |
+
}
|
39 |
+
|
40 |
+
// display the current page icon and the 2 pages beneath and above it
|
41 |
+
$low_page = (($current_page >= 5)?($current_page-2):2);
|
42 |
+
$high_page = ((($current_page + 2) < ($page_count-1))?($current_page+2):($page_count-1));
|
43 |
+
for($i = $low_page; $i <= $high_page; $i++)
|
44 |
+
{
|
45 |
+
if($current_page==$i)
|
46 |
+
{
|
47 |
+
?>
|
48 |
+
<span class='page-numbers current'><?php print $i; ?></span>
|
49 |
+
<?php
|
50 |
+
}
|
51 |
+
else
|
52 |
+
{
|
53 |
+
?>
|
54 |
+
<a class='page-numbers' href='?page=<?php print PRLI_PLUGIN_NAME; ?>/<?php print $controller_file . $page_params; ?>&paged=<?php print $i; ?>'><?php print $i; ?></a>
|
55 |
+
<?php
|
56 |
+
}
|
57 |
+
}
|
58 |
+
|
59 |
+
// If the current page is more than 2 away from the last page then show ellipsis
|
60 |
+
if($current_page < ($page_count - 3))
|
61 |
+
{
|
62 |
+
?>
|
63 |
+
<span class='page-numbers dots'>...</span>
|
64 |
+
<?php
|
65 |
+
}
|
66 |
+
|
67 |
+
// Display the last page icon
|
68 |
+
if($current_page == $page_count)
|
69 |
+
{
|
70 |
+
?>
|
71 |
+
<span class='page-numbers current'><?php print $page_count; ?></span>
|
72 |
+
<?php
|
73 |
+
}
|
74 |
+
else
|
75 |
+
{
|
76 |
+
?>
|
77 |
+
<a class='page-numbers' href='?page=<?php print PRLI_PLUGIN_NAME; ?>/<?php print $controller_file . $page_params; ?>&paged=<?php print $page_count; ?>'><?php print $page_count; ?></a>
|
78 |
+
<?php
|
79 |
+
}
|
80 |
+
|
81 |
+
// Display the next page icon if there is a next page
|
82 |
+
if($current_page < $page_count)
|
83 |
+
{
|
84 |
+
?>
|
85 |
+
<a class='next page-numbers' href='?page=<?php print PRLI_PLUGIN_NAME; ?>/<?php print $controller_file . $page_params; ?>&paged=<?php print($current_page + 1); ?>'>»</a>
|
86 |
+
<?php
|
87 |
+
}
|
88 |
+
?>
|
89 |
+
</div>
|
90 |
+
</div>
|
91 |
+
<?php
|
92 |
+
}
|
93 |
+
?>
|
images/bookmark.png
ADDED
Binary file
|
images/browser/abilon.png
ADDED
Binary file
|
images/browser/adobe.png
ADDED
Binary file
|
images/browser/akregator.png
ADDED
Binary file
|
images/browser/alcatel.png
ADDED
Binary file
|
images/browser/amaya.png
ADDED
Binary file
|
images/browser/amigavoyager.png
ADDED
Binary file
|
images/browser/analogx.png
ADDED
Binary file
|
images/browser/apt.png
ADDED
Binary file
|
images/browser/avant.png
ADDED
Binary file
|
images/browser/aweb.png
ADDED
Binary file
|
images/browser/bpftp.png
ADDED
Binary file
|
images/browser/bytel.png
ADDED
Binary file
|
images/browser/chimera.png
ADDED
Binary file
|
images/browser/chrome.png
ADDED
Binary file
|
images/browser/cyberdog.png
ADDED
Binary file
|
images/browser/da.png
ADDED
Binary file
|
images/browser/dillo.png
ADDED
Binary file
|
images/browser/doris.png
ADDED
Binary file
|
images/browser/dreamcast.png
ADDED
Binary file
|
images/browser/ecatch.png
ADDED
Binary file
|
images/browser/encompass.png
ADDED
Binary file
|
images/browser/epiphany.png
ADDED
Binary file
|
images/browser/ericsson.png
ADDED
Binary file
|
images/browser/feeddemon.png
ADDED
Binary file
|
images/browser/feedreader.png
ADDED
Binary file
|
images/browser/firefox.png
ADDED
Binary file
|
images/browser/flashget.png
ADDED
Binary file
|
images/browser/fpexpress.png
ADDED
Binary file
|
images/browser/fresco.png
ADDED
Binary file
|
images/browser/freshdownload.png
ADDED
Binary file
|
images/browser/frontpage.png
ADDED
Binary file
|
images/browser/galeon.png
ADDED
Binary file
|
images/browser/getright.png
ADDED
Binary file
|
images/browser/gnome.png
ADDED
Binary file
|
images/browser/gnus.png
ADDED
Binary file
|
images/browser/gozilla.png
ADDED
Binary file
|
images/browser/hotjava.png
ADDED
Binary file
|
images/browser/httrack.png
ADDED
Binary file
|
images/browser/ibrowse.png
ADDED
Binary file
|