Version Description
- Fixed bookmarklet/fopen issue affecting some users
- Fixed XML-RPC auto-tweeting of Posts
- Fixed Scheduled auto-tweeting & link creation of Posts issue
- Fixed bulk auto link creation issue
- Added slug choice for your post
- Added a twitter message formatting textarea on the post edit screen
1.4.13 = * Fixed the option reset issue
Download this release
Release Info
Developer | supercleanse |
Plugin | ![]() |
Version | 1.4.14 |
Comparing to | |
See all releases |
Version 1.4.14
- classes/models/PrliClick.php +242 -0
- classes/models/PrliGroup.php +116 -0
- classes/models/PrliLink.php +315 -0
- classes/models/PrliLinkMeta.php +58 -0
- classes/models/PrliOptions.php +258 -0
- classes/models/PrliUrlUtils.php +127 -0
- classes/models/PrliUtils.php +941 -0
- classes/models/models.inc.php +22 -0
- classes/views/prli-clicks/csv.php +24 -0
- classes/views/prli-clicks/head.php +105 -0
- classes/views/prli-clicks/list.php +151 -0
- classes/views/prli-dashboard-widget/widget.php +23 -0
- classes/views/prli-groups/edit.php +58 -0
- classes/views/prli-groups/head.php +35 -0
- classes/views/prli-groups/list.php +88 -0
- classes/views/prli-groups/new.php +59 -0
- classes/views/prli-links/bar.php +12 -0
- classes/views/prli-links/edit.php +22 -0
- classes/views/prli-links/form.php +94 -0
- classes/views/prli-links/head.php +91 -0
- classes/views/prli-links/list.php +182 -0
- classes/views/prli-links/new.php +22 -0
- classes/views/prli-links/ultra-cloak.php +11 -0
- classes/views/prli-options/form.php +160 -0
- classes/views/prli-options/head.php +36 -0
- classes/views/prli-options/pro-settings.php +43 -0
- classes/views/prli-tools/form.php +9 -0
- classes/views/shared/errors.php +19 -0
- classes/views/shared/link-table-nav.php +102 -0
- classes/views/shared/nav.php +1 -0
- classes/views/shared/table-nav.php +93 -0
- images/arrow_down.png +0 -0
- images/arrow_up.png +0 -0
- images/bar_background.png +0 -0
- images/bar_map.png +0 -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/co.mments.gif +0 -0
- images/delicious_32.png +0 -0
- images/digg_32.png +0 -0
- images/email_32.png +0 -0
- images/facebook.png +0 -0
- images/facebook_32.png +0 -0
- images/forward_params.png +0 -0
- images/linkedin_32.png +0 -0
- images/mixx_32.png +0 -0
- images/newsvine_32.png +0 -0
- images/nofollow.png +0 -0
- images/not_tracking.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/pixel_track.png +0 -0
- images/pretty-link-48x48.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/prettylink_logo.jpg +0 -0
- images/prettylink_logo_med.jpg +0 -0
- images/prettylink_logo_small.jpg +0 -0
- images/reddit_32.png +0 -0
- images/stumbleupon_32.png +0 -0
- images/technorati_32.png +0 -0
- images/tracking.png +0 -0
- images/twitter.png +0 -0
- images/twitter_32.png +0 -0
- images/ultra-cloak.png +0 -0
- images/url_icon.gif +0 -0
- images/whatever.txt +13 -0
- images/yahoobuzz_32.png +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 +16939 -0
- includes/version-2-kvasir/README.txt +8 -0
- includes/version-2-kvasir/js/README.txt +12 -0
- includes/version-2-kvasir/js/json/json2.js +461 -0
- includes/version-2-kvasir/js/swfobject.js +5 -0
- includes/version-2-kvasir/open-flash-chart.swf +0 -0
- pretty-bar.php +235 -0
- pretty-link.php +335 -0
- prli-add-link.php +9 -0
- prli-api.php +233 -0
- prli-bookmarklet.php +85 -0
- prli-clicks.php +237 -0
- prli-config.php +130 -0
- prli-dashboard-widget.php +20 -0
- prli-groups.php +175 -0
- prli-image-lookups.php +136 -0
- prli-links.php +247 -0
- prli-options.php +129 -0
- prli-pro-settings.php +77 -0
- prli-tools.php +3 -0
- prli-xmlrpc.php +333 -0
- readme.txt +122 -0
classes/models/PrliClick.php
ADDED
@@ -0,0 +1,242 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class PrliClick
|
3 |
+
{
|
4 |
+
var $table_name;
|
5 |
+
|
6 |
+
function PrliClick()
|
7 |
+
{
|
8 |
+
global $wpdb;
|
9 |
+
$this->table_name = "{$wpdb->prefix}prli_clicks";
|
10 |
+
}
|
11 |
+
|
12 |
+
function get_ip_exclude_list()
|
13 |
+
{
|
14 |
+
global $prli_options;
|
15 |
+
$exclude_list = $prli_options->prli_exclude_ips;
|
16 |
+
$exclude_list = preg_replace('#[ \t]#','',$exclude_list);
|
17 |
+
|
18 |
+
if($exclude_list)
|
19 |
+
return "'" . implode("','", explode(',',$exclude_list)) . "'";
|
20 |
+
else
|
21 |
+
return '';
|
22 |
+
}
|
23 |
+
|
24 |
+
function get_exclude_where_clause( $where = '', $abbr = 'cl')
|
25 |
+
{
|
26 |
+
$exclude_list = $this->get_ip_exclude_list();
|
27 |
+
|
28 |
+
if($where == '')
|
29 |
+
$starts_with = '';
|
30 |
+
else
|
31 |
+
$starts_with = ' AND';
|
32 |
+
|
33 |
+
if( $exclude_list != '')
|
34 |
+
return $starts_with . " $abbr.ip NOT IN (" . $exclude_list . ')';
|
35 |
+
else
|
36 |
+
return '';
|
37 |
+
}
|
38 |
+
|
39 |
+
function getOne( $id )
|
40 |
+
{
|
41 |
+
global $wpdb, $prli_link, $prli_utils;
|
42 |
+
$click_table = $wpdb->prefix . "prli_clicks";
|
43 |
+
$query = 'SELECT cl.*, (SELECT count(*) FROM '. $this->table_name .' cl2 WHERE cl2.ip = cl.ip) as ip_count, (SELECT count(*) FROM '. $this->table_name .' cl3 WHERE cl3.vuid = cl.vuid) as vuid_count, li.name as link_name FROM ' . $this->table_name . ' cl, ' . $prli_link->table_name . ' li WHERE li.id = cl.link_id AND id=' . $id . $prli_utils->prepend_and_or_where(' AND',$this->get_exclude_where_clause());
|
44 |
+
|
45 |
+
return $wpdb->get_row($query);
|
46 |
+
}
|
47 |
+
|
48 |
+
// SELECT cl.*,li.name as link_name FROM wp_prli_clicks cl, wp_prli_links li WHERE li.id = cl.link_id ORDER BY created_at DESC
|
49 |
+
function getAll($where = '', $order = '')
|
50 |
+
{
|
51 |
+
global $wpdb, $prli_link, $prli_utils;
|
52 |
+
$click_table = $wpdb->prefix . "prli_clicks";
|
53 |
+
$where .= $this->get_exclude_where_clause( $where );
|
54 |
+
$where = $prli_utils->prepend_and_or_where(' AND', $where);
|
55 |
+
$query = 'SELECT cl.*, (SELECT count(*) FROM '. $this->table_name .' cl2 WHERE cl2.ip = cl.ip) as ip_count, (SELECT count(*) FROM '. $this->table_name .' cl3 WHERE cl3.vuid = cl.vuid) as vuid_count, li.name as link_name FROM ' . $this->table_name . ' cl, ' . $prli_link->table_name . ' li WHERE li.id = cl.link_id' . $where . $order;
|
56 |
+
return $wpdb->get_results($query);
|
57 |
+
}
|
58 |
+
|
59 |
+
// Delete all of the clicks from the database.
|
60 |
+
function clearAllClicks()
|
61 |
+
{
|
62 |
+
global $wpdb;
|
63 |
+
$query = "TRUNCATE TABLE " . $this->table_name;
|
64 |
+
return $wpdb->query($query);
|
65 |
+
}
|
66 |
+
|
67 |
+
// Pagination Methods
|
68 |
+
function getRecordCount($where='')
|
69 |
+
{
|
70 |
+
global $wpdb, $prli_link, $prli_utils;
|
71 |
+
$where .= $this->get_exclude_where_clause( $where );
|
72 |
+
$where = $prli_utils->prepend_and_or_where(' WHERE', $where);
|
73 |
+
$query = 'SELECT COUNT(*) FROM ' . $this->table_name . ' cl'. $where;
|
74 |
+
return $wpdb->get_var($query);
|
75 |
+
}
|
76 |
+
|
77 |
+
function getPageCount($p_size, $where='')
|
78 |
+
{
|
79 |
+
return ceil((int)$this->getRecordCount($where) / (int)$p_size);
|
80 |
+
}
|
81 |
+
|
82 |
+
function getPage($current_p,$p_size, $where = '', $order = '')
|
83 |
+
{
|
84 |
+
global $wpdb, $prli_link, $prli_utils;
|
85 |
+
$click_table = $wpdb->prefix . "prli_clicks";
|
86 |
+
$end_index = $current_p * $p_size;
|
87 |
+
$start_index = $end_index - $p_size;
|
88 |
+
$where .= $this->get_exclude_where_clause( $where );
|
89 |
+
$where = $prli_utils->prepend_and_or_where(' AND', $where);
|
90 |
+
$query = 'SELECT cl.*, (SELECT count(*) FROM '. $this->table_name .' cl2 WHERE cl2.ip = cl.ip) as ip_count, (SELECT count(*) FROM '. $this->table_name .' cl3 WHERE cl3.vuid = cl.vuid) as vuid_count, li.name as link_name FROM ' . $this->table_name . ' cl, ' . $prli_link->table_name . ' li WHERE li.id = cl.link_id' . $where . $order . ' LIMIT ' . $start_index . ',' . $p_size . ';';
|
91 |
+
$results = $wpdb->get_results($query);
|
92 |
+
return $results;
|
93 |
+
}
|
94 |
+
|
95 |
+
function generateUniqueVisitorId($num_chars = 6)
|
96 |
+
{
|
97 |
+
global $wpdb, $prli_utils;
|
98 |
+
|
99 |
+
// We're doing a base 36 hash which is why we're always doing everything by 36
|
100 |
+
$max_vuid_value = pow(36,$num_chars);
|
101 |
+
$min_vuid_value = 37;
|
102 |
+
$vuid = base_convert( mt_rand($min_vuid_value,$max_vuid_value), 10, 36 );
|
103 |
+
|
104 |
+
$query = "SELECT DISTINCT vuid FROM ".$this->table_name;
|
105 |
+
$vuids = $wpdb->get_col($query,0);
|
106 |
+
|
107 |
+
// It is highly unlikely that we'll ever see 2 identical random vuids
|
108 |
+
// but just in case, here's some code to prevent collisions
|
109 |
+
while( in_array($vuid,$vuids) )
|
110 |
+
$vuid = base_convert( mt_rand($min_vuid_value,$max_vuid_value), 10, 36 );
|
111 |
+
|
112 |
+
return $vuid;
|
113 |
+
}
|
114 |
+
|
115 |
+
function get_counts_by_days($start_timestamp, $end_timestamp, $link_id = "all", $type = "all", $group = '')
|
116 |
+
{
|
117 |
+
global $wpdb, $prli_link;
|
118 |
+
|
119 |
+
$query = "SELECT DATE(cl.created_at) as cldate,COUNT(*) as clcount FROM ".$this->table_name." cl WHERE cl.created_at BETWEEN '".date("Y-n-j",$start_timestamp)." 00:00:00' AND '".date("Y-n-j",$end_timestamp)." 23:59:59'".$search_where.$this->get_exclude_where_clause( ' AND' );
|
120 |
+
|
121 |
+
if($link_id != "all")
|
122 |
+
$query .= " AND link_id=$link_id";
|
123 |
+
|
124 |
+
if(!empty($group))
|
125 |
+
$query .= " AND link_id IN (SELECT id FROM " . $prli_link->table_name . " WHERE group_id=$group)";
|
126 |
+
|
127 |
+
if($type == "unique")
|
128 |
+
$query .= " AND first_click=1";
|
129 |
+
|
130 |
+
$query .= ' GROUP BY DATE(cl.created_at)';
|
131 |
+
|
132 |
+
$clicks_array = $wpdb->get_results($query);
|
133 |
+
|
134 |
+
$temp_array = array();
|
135 |
+
$counts_array = array();
|
136 |
+
$dates_array = array();
|
137 |
+
|
138 |
+
// Refactor Array for use later on
|
139 |
+
foreach($clicks_array as $c)
|
140 |
+
$temp_array[$c->cldate] = $c->clcount;
|
141 |
+
|
142 |
+
// Get the dates array
|
143 |
+
for($c = $start_timestamp; $c <= $end_timestamp; $c += 60*60*24)
|
144 |
+
$dates_array[] = date("Y-m-d",$c);
|
145 |
+
|
146 |
+
// Make sure counts array is in order and includes zero click days
|
147 |
+
foreach($dates_array as $date_str)
|
148 |
+
{
|
149 |
+
if(isset($temp_array[$date_str]))
|
150 |
+
$counts_array[$date_str] = $temp_array[$date_str];
|
151 |
+
else
|
152 |
+
$counts_array[$date_str] = 0;
|
153 |
+
}
|
154 |
+
|
155 |
+
return $counts_array;
|
156 |
+
}
|
157 |
+
|
158 |
+
|
159 |
+
function setupClickLineGraph($start_timestamp,$end_timestamp, $link_id = "all", $type = "all", $group = '')
|
160 |
+
{
|
161 |
+
global $wpdb, $prli_utils, $prli_link, $prli_group;
|
162 |
+
|
163 |
+
$dates_array = $this->get_counts_by_days($start_timestamp,$end_timestamp,$link_id,$type,$group);
|
164 |
+
|
165 |
+
$top_click_count = $prli_utils->getTopValue(array_values($dates_array));
|
166 |
+
|
167 |
+
if(!empty($group))
|
168 |
+
$link_slug = "group: '" . $wpdb->get_var("SELECT name FROM ".$prli_group->table_name." WHERE id=$group") . "'";
|
169 |
+
else if($link_id == "all")
|
170 |
+
$link_slug = "all links";
|
171 |
+
else
|
172 |
+
$link_slug = "'/".$wpdb->get_var("SELECT slug FROM ".$prli_link->table_name." WHERE id=$link_id") . "'";
|
173 |
+
|
174 |
+
if($type == "all")
|
175 |
+
$type_string = "All hits";
|
176 |
+
else
|
177 |
+
$type_string = "Unique hits";
|
178 |
+
|
179 |
+
$json_array = array(
|
180 |
+
"elements" => array( array(
|
181 |
+
"type" => "line",
|
182 |
+
"values" => array_values($dates_array),
|
183 |
+
"dot-style" => array(
|
184 |
+
"type" => "dot",
|
185 |
+
"dot-size" => 4,
|
186 |
+
"colour" => "#ffc94e",
|
187 |
+
"halo-size" => 1,
|
188 |
+
"tip" => "#val# Hits<br>#x_label#"
|
189 |
+
),
|
190 |
+
"width" => 2
|
191 |
+
) ),
|
192 |
+
"title" => array(
|
193 |
+
"text" => 'Pretty Link: '.$type_string.' on '.$link_slug. ' between ' . date("Y-n-j",$start_timestamp) . ' and ' . date("Y-n-j",$end_timestamp),
|
194 |
+
"style" => "font-size: 16px; font-weight: bold; color: #3030d0; text-align: center; padding-bottom: 5px;"
|
195 |
+
),
|
196 |
+
"bg_colour" => "-1",
|
197 |
+
"y_axis" => array(
|
198 |
+
"min" => 0,
|
199 |
+
"max" => $top_click_count,
|
200 |
+
"steps" => (int)(($top_click_count>=10)?$top_click_count/10:1),
|
201 |
+
"colour" => "#A2ACBA"
|
202 |
+
),
|
203 |
+
"x_axis" => array(
|
204 |
+
"colour" => "#A2ACBA",
|
205 |
+
"grid-colour" => "#ffefa7",
|
206 |
+
"offset" => false,
|
207 |
+
"steps" => 4,
|
208 |
+
"labels" => array(
|
209 |
+
"steps" => 2,
|
210 |
+
"rotate" => 25,
|
211 |
+
"colour" => "#000000",
|
212 |
+
"labels" => array_keys($dates_array)
|
213 |
+
)
|
214 |
+
)
|
215 |
+
);
|
216 |
+
|
217 |
+
return $prli_utils->prli_json_encode($json_array);
|
218 |
+
}
|
219 |
+
|
220 |
+
|
221 |
+
// Set defaults and grab get or post of each possible param
|
222 |
+
function get_params_array()
|
223 |
+
{
|
224 |
+
$values = array(
|
225 |
+
'paged' => (isset($_GET['paged'])?$_GET['paged']:(isset($_POST['paged'])?$_POST['paged']:1)),
|
226 |
+
'l' => (isset($_GET['l'])?$_GET['l']:(isset($_POST['l'])?$_POST['l']:'all')),
|
227 |
+
'group' => (isset($_GET['group'])?$_GET['group']:(isset($_POST['group'])?$_POST['group']:'')),
|
228 |
+
'ip' => (isset($_GET['ip'])?$_GET['ip']:(isset($_POST['ip'])?$_POST['ip']:'')),
|
229 |
+
'vuid' => (isset($_GET['vuid'])?$_GET['vuid']:(isset($_POST['vuid'])?$_POST['vuid']:'')),
|
230 |
+
'sdate' => (isset($_GET['sdate'])?$_GET['sdate']:(isset($_POST['sdate'])?$_POST['sdate']:'')),
|
231 |
+
'edate' => (isset($_GET['edate'])?$_GET['edate']:(isset($_POST['edate'])?$_POST['edate']:'')),
|
232 |
+
'type' => (isset($_GET['type'])?$_GET['type']:(isset($_POST['type'])?$_POST['type']:'all')),
|
233 |
+
'search' => (isset($_GET['search'])?$_GET['search']:(isset($_POST['search'])?$_POST['search']:'')),
|
234 |
+
'sort' => (isset($_GET['sort'])?$_GET['sort']:(isset($_POST['sort'])?$_POST['sort']:'')),
|
235 |
+
'sdir' => (isset($_GET['sdir'])?$_GET['sdir']:(isset($_POST['sdir'])?$_POST['sdir']:''))
|
236 |
+
);
|
237 |
+
|
238 |
+
return $values;
|
239 |
+
}
|
240 |
+
|
241 |
+
}
|
242 |
+
?>
|
classes/models/PrliGroup.php
ADDED
@@ -0,0 +1,116 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class PrliGroup
|
3 |
+
{
|
4 |
+
var $table_name;
|
5 |
+
|
6 |
+
function PrliGroup()
|
7 |
+
{
|
8 |
+
global $wpdb;
|
9 |
+
$this->table_name = "{$wpdb->prefix}prli_groups";
|
10 |
+
}
|
11 |
+
|
12 |
+
function create( $values )
|
13 |
+
{
|
14 |
+
global $wpdb, $wp_rewrite;
|
15 |
+
|
16 |
+
$query = 'INSERT INTO ' . $this->table_name .
|
17 |
+
' (name,description,created_at) VALUES (\'' .
|
18 |
+
$values['name'] . '\',\'' .
|
19 |
+
$values['description'] . '\',' .
|
20 |
+
'NOW())';
|
21 |
+
$query_results = $wpdb->query($query);
|
22 |
+
return $wpdb->insert_id;
|
23 |
+
}
|
24 |
+
|
25 |
+
function update( $id, $values )
|
26 |
+
{
|
27 |
+
global $wpdb, $wp_rewrite;
|
28 |
+
|
29 |
+
$query = 'UPDATE ' . $this->table_name .
|
30 |
+
' SET name=\'' . $values['name'] . '\', ' .
|
31 |
+
' description=\'' . $values['description'] . '\' ' .
|
32 |
+
' WHERE id='.$id;
|
33 |
+
$query_results = $wpdb->query($query);
|
34 |
+
return $query_results;
|
35 |
+
}
|
36 |
+
|
37 |
+
function destroy( $id )
|
38 |
+
{
|
39 |
+
require_once(PRLI_MODELS_PATH.'/models.inc.php');
|
40 |
+
global $wpdb, $prli_link, $wp_rewrite;
|
41 |
+
|
42 |
+
// Disconnect the links from this group
|
43 |
+
$query = 'UPDATE ' . $prli_link->table_name .
|
44 |
+
' SET group_id = NULL ' .
|
45 |
+
' WHERE group_id='.$id;
|
46 |
+
$query_results = $wpdb->query($query);
|
47 |
+
|
48 |
+
$destroy = 'DELETE FROM ' . $this->table_name . ' WHERE id=' . $id;
|
49 |
+
return $wpdb->query($destroy);
|
50 |
+
}
|
51 |
+
|
52 |
+
function getOne( $id )
|
53 |
+
{
|
54 |
+
global $wpdb, $prli_link, $prli_click;
|
55 |
+
$query = 'SELECT gr.*, (SELECT COUNT(*) FROM ' . $prli_link->table_name . ' li WHERE li.group_id = gr.id) as link_count, (SELECT COUNT(*) FROM ' . $prli_click->table_name . ' cl WHERE link_id IN (SELECT li2.id FROM ' . $prli_link->table_name . ' li2 WHERE li2.group_id=gr.id)) as click_count FROM ' . $this->table_name . ' gr WHERE id=' . $id . ';';
|
56 |
+
return $wpdb->get_row($query);
|
57 |
+
}
|
58 |
+
|
59 |
+
function getAll( $where = '', $order_by = '', $return_type = OBJECT )
|
60 |
+
{
|
61 |
+
global $wpdb, $prli_utils, $prli_link, $prli_click;
|
62 |
+
$query = 'SELECT gr.*, (SELECT COUNT(*) FROM ' . $prli_link->table_name . ' li WHERE li.group_id = gr.id) as link_count, (SELECT COUNT(*) FROM ' . $prli_click->table_name . ' cl WHERE link_id IN (SELECT li2.id FROM ' . $prli_link->table_name . ' li2 WHERE li2.group_id=gr.id)) as click_count FROM ' . $this->table_name . ' gr' . $prli_utils->prepend_and_or_where(' WHERE', $where) . $order_by;
|
63 |
+
return $wpdb->get_results($query, $return_type);
|
64 |
+
}
|
65 |
+
|
66 |
+
// Pagination Methods
|
67 |
+
function getRecordCount($where="")
|
68 |
+
{
|
69 |
+
global $wpdb, $prli_utils;
|
70 |
+
$query = 'SELECT COUNT(*) FROM ' . $this->table_name . $prli_utils->prepend_and_or_where(' WHERE', $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 = "", $order_by = '')
|
80 |
+
{
|
81 |
+
global $wpdb, $prli_link, $prli_utils, $prli_click;
|
82 |
+
$end_index = $current_p * $p_size;
|
83 |
+
$start_index = $end_index - $p_size;
|
84 |
+
$query = 'SELECT gr.*, (SELECT COUNT(*) FROM ' . $prli_link->table_name . ' li WHERE li.group_id = gr.id) as link_count, (SELECT COUNT(*) FROM ' . $prli_click->table_name . ' cl WHERE link_id IN (SELECT li2.id FROM ' . $prli_link->table_name . ' li2 WHERE li2.group_id=gr.id)) as click_count FROM ' . $this->table_name . ' gr' . $prli_utils->prepend_and_or_where(' WHERE', $where) . $order_by .' LIMIT ' . $start_index . ',' . $p_size;
|
85 |
+
$results = $wpdb->get_results($query);
|
86 |
+
return $results;
|
87 |
+
}
|
88 |
+
|
89 |
+
// Set defaults and grab get or post of each possible param
|
90 |
+
function get_params_array()
|
91 |
+
{
|
92 |
+
$values = array(
|
93 |
+
'action' => (isset($_GET['action'])?$_GET['action']:(isset($_POST['action'])?$_POST['action']:'list')),
|
94 |
+
'id' => (isset($_GET['id'])?$_GET['id']:(isset($_POST['id'])?$_POST['id']:'')),
|
95 |
+
'paged' => (isset($_GET['paged'])?$_GET['paged']:(isset($_POST['paged'])?$_POST['paged']:1)),
|
96 |
+
'group' => (isset($_GET['group'])?$_GET['group']:(isset($_POST['group'])?$_POST['group']:'')),
|
97 |
+
'search' => (isset($_GET['search'])?$_GET['search']:(isset($_POST['search'])?$_POST['search']:'')),
|
98 |
+
'sort' => (isset($_GET['sort'])?$_GET['sort']:(isset($_POST['sort'])?$_POST['sort']:'')),
|
99 |
+
'sdir' => (isset($_GET['sdir'])?$_GET['sdir']:(isset($_POST['sdir'])?$_POST['sdir']:''))
|
100 |
+
);
|
101 |
+
|
102 |
+
return $values;
|
103 |
+
}
|
104 |
+
|
105 |
+
function validate( $values )
|
106 |
+
{
|
107 |
+
global $wpdb, $prli_utils;
|
108 |
+
|
109 |
+
$errors = array();
|
110 |
+
if( empty($values['name']) )
|
111 |
+
$errors[] = "Group must have a name.";
|
112 |
+
|
113 |
+
return $errors;
|
114 |
+
}
|
115 |
+
}
|
116 |
+
?>
|
classes/models/PrliLink.php
ADDED
@@ -0,0 +1,315 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class PrliLink
|
3 |
+
{
|
4 |
+
var $table_name;
|
5 |
+
|
6 |
+
function PrliLink()
|
7 |
+
{
|
8 |
+
global $wpdb;
|
9 |
+
$this->table_name = "{$wpdb->prefix}prli_links";
|
10 |
+
}
|
11 |
+
|
12 |
+
function create( $values )
|
13 |
+
{
|
14 |
+
global $wpdb, $prli_url_utils;
|
15 |
+
|
16 |
+
$values['name'] = (!empty($values['name'])?$values['name']:$prli_url_utils->get_title($values['url'],$values['slug']));
|
17 |
+
$query_str = "INSERT INTO {$this->table_name} " .
|
18 |
+
'(url,'.
|
19 |
+
'slug,'.
|
20 |
+
'name,'.
|
21 |
+
'param_forwarding,'.
|
22 |
+
'param_struct,'.
|
23 |
+
'redirect_type,'.
|
24 |
+
'description,'.
|
25 |
+
'track_me,'.
|
26 |
+
'nofollow,'.
|
27 |
+
'group_id,'.
|
28 |
+
'created_at) ' .
|
29 |
+
'VALUES (%s,%s,%s,%s,%s,%s,%s,%d,%d,%d,NOW())';
|
30 |
+
|
31 |
+
$query = $wpdb->prepare( $query_str,
|
32 |
+
$values['url'],
|
33 |
+
$values['slug'],
|
34 |
+
$values['name'],
|
35 |
+
$values['param_forwarding'],
|
36 |
+
$values['param_struct'],
|
37 |
+
$values['redirect_type'],
|
38 |
+
$values['description'],
|
39 |
+
(int)isset($values['track_me']),
|
40 |
+
(int)isset($values['nofollow']),
|
41 |
+
(isset($values['group_id'])?(int)$values['group_id']:'NULL') );
|
42 |
+
$query_results = $wpdb->query($query);
|
43 |
+
|
44 |
+
if($query_results)
|
45 |
+
return $wpdb->insert_id;
|
46 |
+
else
|
47 |
+
return false;
|
48 |
+
}
|
49 |
+
|
50 |
+
function update( $id, $values )
|
51 |
+
{
|
52 |
+
global $wpdb, $prli_url_utils;
|
53 |
+
|
54 |
+
$values['name'] = (!empty($values['name'])?$values['name']:$prli_url_utils->get_title($values['url'],$values['slug']));
|
55 |
+
$query_str = "UPDATE {$this->table_name} " .
|
56 |
+
'SET url=%s, ' .
|
57 |
+
'slug=%s, ' .
|
58 |
+
'name=%s, ' .
|
59 |
+
'param_forwarding=%s, ' .
|
60 |
+
'param_struct=%s, ' .
|
61 |
+
'redirect_type=%s, ' .
|
62 |
+
'description=%s, ' .
|
63 |
+
'track_me=%d, ' .
|
64 |
+
'nofollow=%d, ' .
|
65 |
+
'group_id=%d ' .
|
66 |
+
' WHERE id=%d';
|
67 |
+
|
68 |
+
$query = $wpdb->prepare( $query_str,
|
69 |
+
$values['url'],
|
70 |
+
$values['slug'],
|
71 |
+
$values['name'],
|
72 |
+
$values['param_forwarding'],
|
73 |
+
$values['param_struct'],
|
74 |
+
$values['redirect_type'],
|
75 |
+
$values['description'],
|
76 |
+
(int)isset($values['track_me']),
|
77 |
+
(int)isset($values['nofollow']),
|
78 |
+
(isset($values['group_id'])?(int)$values['group_id']:'NULL'),
|
79 |
+
$id );
|
80 |
+
|
81 |
+
$query_results = $wpdb->query($query);
|
82 |
+
return $query_results;
|
83 |
+
}
|
84 |
+
|
85 |
+
function update_group( $id, $value, $group_id )
|
86 |
+
{
|
87 |
+
global $wpdb;
|
88 |
+
$query = 'UPDATE ' . $this->table_name .
|
89 |
+
' SET group_id=' . (isset($value)?$group_id:'NULL') .
|
90 |
+
' WHERE id='.$id;
|
91 |
+
$query_results = $wpdb->query($query);
|
92 |
+
return $query_results;
|
93 |
+
}
|
94 |
+
|
95 |
+
function destroy( $id )
|
96 |
+
{
|
97 |
+
require_once(PRLI_MODELS_PATH.'/models.inc.php');
|
98 |
+
global $wpdb, $prli_click;
|
99 |
+
|
100 |
+
$reset = 'DELETE FROM ' . $prli_click->table_name . ' WHERE link_id=' . $id;
|
101 |
+
$destroy = 'DELETE FROM ' . $this->table_name . ' WHERE id=' . $id;
|
102 |
+
|
103 |
+
$wpdb->query($reset);
|
104 |
+
return $wpdb->query($destroy);
|
105 |
+
}
|
106 |
+
|
107 |
+
function reset( $id )
|
108 |
+
{
|
109 |
+
require_once(PRLI_MODELS_PATH.'/models.inc.php');
|
110 |
+
global $wpdb, $prli_click;
|
111 |
+
|
112 |
+
$reset = 'DELETE FROM ' . $prli_click->table_name . ' WHERE link_id=' . $id;
|
113 |
+
return $wpdb->query($reset);
|
114 |
+
}
|
115 |
+
|
116 |
+
function getOneFromSlug( $slug, $return_type = OBJECT )
|
117 |
+
{
|
118 |
+
global $wpdb, $prli_click;
|
119 |
+
$query = 'SELECT li.*, ' .
|
120 |
+
'(SELECT COUNT(*) FROM ' . $prli_click->table_name . ' cl ' .
|
121 |
+
'WHERE cl.link_id = li.id' . $prli_click->get_exclude_where_clause( ' AND' ) . ') as clicks, ' .
|
122 |
+
'(SELECT COUNT(*) FROM ' . $prli_click->table_name . ' cl ' .
|
123 |
+
'WHERE cl.link_id = li.id ' .
|
124 |
+
'AND cl.first_click <> 0' . $prli_click->get_exclude_where_clause( ' AND' ) . ') as uniques ' .
|
125 |
+
'FROM ' . $this->table_name . ' li ' .
|
126 |
+
'WHERE slug=\'' . $slug . '\'';
|
127 |
+
return $wpdb->get_row($query, $return_type);
|
128 |
+
}
|
129 |
+
|
130 |
+
function getOne( $id )
|
131 |
+
{
|
132 |
+
global $wpdb, $prli_click;
|
133 |
+
$query = 'SELECT li.*, ' .
|
134 |
+
'(SELECT COUNT(*) FROM ' . $prli_click->table_name . ' cl ' .
|
135 |
+
'WHERE cl.link_id = li.id' . $prli_click->get_exclude_where_clause( ' AND' ) . ') as clicks, ' .
|
136 |
+
'(SELECT COUNT(*) FROM ' . $prli_click->table_name . ' cl ' .
|
137 |
+
'WHERE cl.link_id = li.id ' .
|
138 |
+
'AND cl.first_click <> 0' . $prli_click->get_exclude_where_clause( ' AND' ) . ') as uniques ' .
|
139 |
+
'FROM ' . $this->table_name . ' li ' .
|
140 |
+
'WHERE id=' . $id;
|
141 |
+
return $wpdb->get_row($query);
|
142 |
+
}
|
143 |
+
|
144 |
+
function find_first_target_url($target_url)
|
145 |
+
{
|
146 |
+
global $wpdb;
|
147 |
+
$query_str = "SELECT id FROM {$this->table_name} WHERE url=%s LIMIT 1";
|
148 |
+
$query = $wpdb->prepare($query_str,$target_url);
|
149 |
+
return $wpdb->get_var($query);
|
150 |
+
}
|
151 |
+
|
152 |
+
function get_link_min( $id, $return_type = OBJECT )
|
153 |
+
{
|
154 |
+
global $wpdb;
|
155 |
+
$query_str = 'SELECT id,'.
|
156 |
+
'url,'.
|
157 |
+
'slug,'.
|
158 |
+
'name,'.
|
159 |
+
'description,'.
|
160 |
+
'group_id,'.
|
161 |
+
'redirect_type,'.
|
162 |
+
'track_me,'.
|
163 |
+
'param_forwarding,'.
|
164 |
+
'param_struct'.
|
165 |
+
"FROM {$this->table_name} ".
|
166 |
+
'WHERE id=%d';
|
167 |
+
$query = $wpdb->prepare($query_str, $id);
|
168 |
+
return $wpdb->get_row($query, $return_type);
|
169 |
+
}
|
170 |
+
|
171 |
+
function getAll($where = '', $order_by = '', $return_type = OBJECT)
|
172 |
+
{
|
173 |
+
global $wpdb, $prli_click, $prli_group, $prli_utils;
|
174 |
+
$query = 'SELECT li.*, ' .
|
175 |
+
'(SELECT COUNT(*) FROM ' . $prli_click->table_name . ' cl ' .
|
176 |
+
'WHERE cl.link_id = li.id' . $prli_click->get_exclude_where_clause( ' AND' ) . ') as clicks, ' .
|
177 |
+
'(SELECT COUNT(*) FROM ' . $prli_click->table_name . ' cl ' .
|
178 |
+
'WHERE cl.link_id = li.id ' .
|
179 |
+
'AND cl.first_click <> 0' . $prli_click->get_exclude_where_clause( ' AND' ) . ') as uniques, ' .
|
180 |
+
'gr.name as group_name ' .
|
181 |
+
'FROM '. $this->table_name . ' li ' .
|
182 |
+
'LEFT OUTER JOIN ' . $prli_group->table_name . ' gr ON li.group_id=gr.id' .
|
183 |
+
$prli_utils->prepend_and_or_where(' WHERE', $where) . $order_by;
|
184 |
+
return $wpdb->get_results($query, $return_type);
|
185 |
+
}
|
186 |
+
|
187 |
+
// Pagination Methods
|
188 |
+
function getRecordCount($where="")
|
189 |
+
{
|
190 |
+
global $wpdb, $prli_utils;
|
191 |
+
$query = 'SELECT COUNT(*) FROM ' . $this->table_name . ' li' . $prli_utils->prepend_and_or_where(' WHERE', $where);
|
192 |
+
return $wpdb->get_var($query);
|
193 |
+
}
|
194 |
+
|
195 |
+
function getPageCount($p_size, $where="")
|
196 |
+
{
|
197 |
+
return ceil((int)$this->getRecordCount($where) / (int)$p_size);
|
198 |
+
}
|
199 |
+
|
200 |
+
function getPage($current_p,$p_size, $where = "", $order_by = '', $return_type = OBJECT)
|
201 |
+
{
|
202 |
+
global $wpdb, $prli_click, $prli_utils, $prli_group;
|
203 |
+
$end_index = $current_p * $p_size;
|
204 |
+
$start_index = $end_index - $p_size;
|
205 |
+
$query = 'SELECT li.*, ' .
|
206 |
+
'(SELECT COUNT(*) FROM ' . $prli_click->table_name . ' cl ' .
|
207 |
+
'WHERE cl.link_id = li.id' . $prli_click->get_exclude_where_clause( ' AND' ) . ') as clicks, ' .
|
208 |
+
'(SELECT COUNT(*) FROM ' . $prli_click->table_name . ' cl ' .
|
209 |
+
'WHERE cl.link_id = li.id ' .
|
210 |
+
'AND cl.first_click <> 0' . $prli_click->get_exclude_where_clause( ' AND' ) . ') as uniques, ' .
|
211 |
+
'gr.name as group_name ' .
|
212 |
+
'FROM ' . $this->table_name . ' li ' .
|
213 |
+
'LEFT OUTER JOIN ' . $prli_group->table_name . ' gr ON li.group_id=gr.id' .
|
214 |
+
$prli_utils->prepend_and_or_where(' WHERE', $where) . $order_by . ' ' .
|
215 |
+
'LIMIT ' . $start_index . ',' . $p_size . ';';
|
216 |
+
$results = $wpdb->get_results($query, $return_type);
|
217 |
+
return $results;
|
218 |
+
}
|
219 |
+
|
220 |
+
/** I'm generating a slug that is by default 2-3 characters long.
|
221 |
+
* This gives us a possibility of 36^3 - 37 = 46,619 possible
|
222 |
+
* random slugs. That should be *more* than enough slugs for
|
223 |
+
* any website -- if I get any feedback that we need more then
|
224 |
+
* I can always make a config option to raise the # of chars.
|
225 |
+
*/
|
226 |
+
function generateValidSlug($num_chars = 3)
|
227 |
+
{
|
228 |
+
global $wpdb, $prli_utils;
|
229 |
+
|
230 |
+
// We're doing a base 36 hash which is why we're always doing everything by 36
|
231 |
+
$max_slug_value = pow(36,$num_chars);
|
232 |
+
$min_slug_value = 37; // we want to have at least 2 characters in the slug
|
233 |
+
$slug = base_convert( rand($min_slug_value,$max_slug_value), 10, 36 );
|
234 |
+
|
235 |
+
$query = "SELECT slug FROM " . $this->table_name; // . " WHERE slug='" . $slug . "'";
|
236 |
+
$slugs = $wpdb->get_col($query,0);
|
237 |
+
|
238 |
+
// It is highly unlikely that we'll ever see 2 identical random slugs
|
239 |
+
// but just in case, here's some code to prevent collisions
|
240 |
+
while( in_array($slug,$slugs) or !$prli_utils->slugIsAvailable($slug) )
|
241 |
+
$slug = base_convert( rand($min_slug_value,$max_slug_value), 10, 36 );
|
242 |
+
|
243 |
+
return $slug;
|
244 |
+
}
|
245 |
+
|
246 |
+
function get_pretty_link_url($slug)
|
247 |
+
{
|
248 |
+
global $prli_blogurl;
|
249 |
+
|
250 |
+
$link = $this->getOneFromSlug($slug);
|
251 |
+
|
252 |
+
if((isset($link->param_forwarding) and $link->param_forwarding == 'custom') and
|
253 |
+
(isset($link->redirect_type) and $link->redirect_type == 'pixel'))
|
254 |
+
return "<img src=\"".$prli_blogurl . '/' . $link->slug . $link->param_struct . "\" width=\"1\" height=\"1\" style=\"display: none\" />";
|
255 |
+
else if((!isset($link->param_forwarding) or $link->param_forwarding != 'custom') and
|
256 |
+
(isset($link->redirect_type) and $link->redirect_type == 'pixel'))
|
257 |
+
return "<img src=\"".$prli_blogurl . '/' . $link->slug . "\" width=\"1\" height=\"1\" style=\"display: none\" />";
|
258 |
+
else if((isset($link->param_forwarding) and $link->param_forwarding == 'custom') and
|
259 |
+
(!isset($link->redirect_type) or $link->redirect_type != 'pixel'))
|
260 |
+
return $prli_blogurl . '/' . $link->slug . $link->param_struct;
|
261 |
+
else
|
262 |
+
return $prli_blogurl . '/' . $link->slug;
|
263 |
+
}
|
264 |
+
|
265 |
+
// Set defaults and grab get or post of each possible param
|
266 |
+
function get_params_array()
|
267 |
+
{
|
268 |
+
$values = array(
|
269 |
+
'action' => (isset($_GET['action'])?$_GET['action']:(isset($_POST['action'])?$_POST['action']:'list')),
|
270 |
+
'regenerate' => (isset($_GET['regenerate'])?$_GET['regenerate']:(isset($_POST['regenerate'])?$_POST['regenerate']:'false')),
|
271 |
+
'id' => (isset($_GET['id'])?$_GET['id']:(isset($_POST['id'])?$_POST['id']:'')),
|
272 |
+
'group_name' => (isset($_GET['group_name'])?$_GET['group_name']:(isset($_POST['group_name'])?$_POST['group_name']:'')),
|
273 |
+
'paged' => (isset($_GET['paged'])?$_GET['paged']:(isset($_POST['paged'])?$_POST['paged']:1)),
|
274 |
+
'group' => (isset($_GET['group'])?$_GET['group']:(isset($_POST['group'])?$_POST['group']:'')),
|
275 |
+
'search' => (isset($_GET['search'])?$_GET['search']:(isset($_POST['search'])?$_POST['search']:'')),
|
276 |
+
'sort' => (isset($_GET['sort'])?$_GET['sort']:(isset($_POST['sort'])?$_POST['sort']:'')),
|
277 |
+
'sdir' => (isset($_GET['sdir'])?$_GET['sdir']:(isset($_POST['sdir'])?$_POST['sdir']:''))
|
278 |
+
);
|
279 |
+
|
280 |
+
return $values;
|
281 |
+
}
|
282 |
+
|
283 |
+
function validate( $values )
|
284 |
+
{
|
285 |
+
global $wpdb, $prli_utils, $prli_blogurl;
|
286 |
+
|
287 |
+
$errors = array();
|
288 |
+
if( ( $values['url'] == null or $values['url'] == '') and $values['redirect_type'] != 'pixel' )
|
289 |
+
$errors[] = "Target URL can't be blank";
|
290 |
+
|
291 |
+
if( $values['slug'] == null or $values['slug'] == '' )
|
292 |
+
$errors[] = "Pretty Link can't be blank";
|
293 |
+
|
294 |
+
if( $values['url'] == "$prli_blogurl/".$values['slug'] )
|
295 |
+
$errors[] = "Target URL must be different than the Pretty Link";
|
296 |
+
|
297 |
+
if( !empty($values['url']) and !preg_match('/^http.?:\/\/.*\..*$/', $values['url'] ) )
|
298 |
+
$errors[] = "Link URL must be a correctly formatted url";
|
299 |
+
|
300 |
+
if( !preg_match('/^[a-zA-Z0-9\.\-_\/]+$/', $values['slug'] ) )
|
301 |
+
$errors[] = "Pretty Link must not contain spaces or special characters";
|
302 |
+
|
303 |
+
if( !$prli_utils->slugIsAvailable($values['slug'],$values['id']) )
|
304 |
+
$errors[] = "This pretty link slug is already taken, please choose a different one";
|
305 |
+
|
306 |
+
if( isset($values['param_forwarding']) and $values['param_forwarding'] == 'custom' and empty($values['param_struct']) )
|
307 |
+
$errors[] = "If Custom Parameter Forwarding has been selected then you must specify a forwarding format.";
|
308 |
+
|
309 |
+
if( isset($values['param_forwarding']) and $values['param_forwarding'] == 'custom' and !preg_match('#%.*?%#', $values['param_struct']) )
|
310 |
+
$errors[] = "Your parameter forwarding must have at least one parameter specified in the format ex: <code>/%var1%/%var_two%/%varname3% ...</code>";
|
311 |
+
|
312 |
+
return $errors;
|
313 |
+
}
|
314 |
+
}
|
315 |
+
?>
|
classes/models/PrliLinkMeta.php
ADDED
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class PrliLinkMeta
|
3 |
+
{
|
4 |
+
var $table_name;
|
5 |
+
|
6 |
+
function PrliLinkMeta()
|
7 |
+
{
|
8 |
+
global $wpdb;
|
9 |
+
$this->table_name = "{$wpdb->prefix}prli_link_metas";
|
10 |
+
}
|
11 |
+
|
12 |
+
function get_link_meta($link_id,$meta_key,$return_var=false)
|
13 |
+
{
|
14 |
+
global $wpdb;
|
15 |
+
$query_str = "SELECT meta_value FROM {$this->table_name} WHERE meta_key=%s and link_id=%d";
|
16 |
+
$query = $wpdb->prepare($query_str,$meta_key,$link_id);
|
17 |
+
|
18 |
+
if($return_var)
|
19 |
+
return $wpdb->get_var("{$query} LIMIT 1");
|
20 |
+
else
|
21 |
+
return $wpdb->get_col($query, 0);
|
22 |
+
}
|
23 |
+
|
24 |
+
function add_link_meta($link_id, $meta_key, $meta_value)
|
25 |
+
{
|
26 |
+
global $wpdb;
|
27 |
+
|
28 |
+
$query_str = "INSERT INTO {$this->table_name} " .
|
29 |
+
'(meta_key,meta_value,link_id,created_at) VALUES (%s,%s,%d,NOW())';
|
30 |
+
$query = $wpdb->prepare($query_str, $meta_key, $meta_value, $link_id);
|
31 |
+
return $wpdb->query($query);
|
32 |
+
}
|
33 |
+
|
34 |
+
function update_link_meta($link_id, $meta_key, $meta_values)
|
35 |
+
{
|
36 |
+
global $wpdb;
|
37 |
+
$this->delete_link_meta($link_id, $meta_key);
|
38 |
+
|
39 |
+
if(!is_array($meta_values))
|
40 |
+
$meta_values = array($meta_values);
|
41 |
+
|
42 |
+
foreach($meta_values as $meta_value)
|
43 |
+
$this->add_link_meta($link_id, $meta_key, $meta_value);
|
44 |
+
|
45 |
+
return $wpdb->query($query);
|
46 |
+
}
|
47 |
+
|
48 |
+
function delete_link_meta($link_id, $meta_key)
|
49 |
+
{
|
50 |
+
global $wpdb;
|
51 |
+
|
52 |
+
$query_str = "DELETE FROM {$this->table_name} " .
|
53 |
+
"WHERE meta_key=%s AND link_id=%d";
|
54 |
+
$query = $wpdb->prepare($query_str, $meta_key, $link_id);
|
55 |
+
return $wpdb->query($query);
|
56 |
+
}
|
57 |
+
}
|
58 |
+
?>
|
classes/models/PrliOptions.php
ADDED
@@ -0,0 +1,258 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class PrliOptions
|
3 |
+
{
|
4 |
+
var $prli_exclude_ips;
|
5 |
+
var $prettybar_image_url;
|
6 |
+
var $prettybar_background_image_url;
|
7 |
+
var $prettybar_color;
|
8 |
+
var $prettybar_text_color;
|
9 |
+
var $prettybar_link_color;
|
10 |
+
var $prettybar_hover_color;
|
11 |
+
var $prettybar_visited_color;
|
12 |
+
var $prettybar_show_title;
|
13 |
+
var $prettybar_show_description;
|
14 |
+
var $prettybar_show_share_links;
|
15 |
+
var $prettybar_show_target_url_link;
|
16 |
+
var $prettybar_title_limit;
|
17 |
+
var $prettybar_desc_limit;
|
18 |
+
var $prettybar_link_limit;
|
19 |
+
|
20 |
+
var $link_redirect_type;
|
21 |
+
var $link_track_me;
|
22 |
+
var $link_nofollow;
|
23 |
+
|
24 |
+
var $bookmarklet_auth;
|
25 |
+
|
26 |
+
function PrliOptions()
|
27 |
+
{
|
28 |
+
$this->set_default_options();
|
29 |
+
}
|
30 |
+
|
31 |
+
function set_default_options()
|
32 |
+
{
|
33 |
+
// Must account for the Legacy Options
|
34 |
+
$prli_exclude_ips = 'prli_exclude_ips';
|
35 |
+
$prettybar_image_url = 'prli_prettybar_image_url';
|
36 |
+
$prettybar_background_image_url = 'prli_prettybar_background_image_url';
|
37 |
+
$prettybar_color = 'prli_prettybar_color';
|
38 |
+
$prettybar_text_color = 'prli_prettybar_text_color';
|
39 |
+
$prettybar_link_color = 'prli_prettybar_link_color';
|
40 |
+
$prettybar_hover_color = 'prli_prettybar_hover_color';
|
41 |
+
$prettybar_visited_color = 'prli_prettybar_visited_color';
|
42 |
+
$prettybar_show_title = 'prli_prettybar_show_title';
|
43 |
+
$prettybar_show_description = 'prli_prettybar_show_description';
|
44 |
+
$prettybar_show_share_links = 'prli_prettybar_show_share_links';
|
45 |
+
$prettybar_show_target_url_link = 'prli_prettybar_show_target_url_link';
|
46 |
+
$prettybar_title_limit = 'prli_prettybar_title_limit';
|
47 |
+
$prettybar_desc_limit = 'prli_prettybar_desc_limit';
|
48 |
+
$prettybar_link_limit = 'prli_prettybar_link_limit';
|
49 |
+
$link_show_prettybar = 'prli_link_show_prettybar';
|
50 |
+
$link_ultra_cloak = 'prli_link_ultra_cloak';
|
51 |
+
$link_track_me = 'prli_link_track_me';
|
52 |
+
$link_track_as_pixel = 'prli_link_track_as_pixel';
|
53 |
+
$link_nofollow = 'prli_link_nofollow';
|
54 |
+
$link_redirect_type = 'prli_link_redirect_type';
|
55 |
+
|
56 |
+
|
57 |
+
if(!isset($this->prettybar_show_title)) {
|
58 |
+
if($var = get_option( $prettybar_show_title )) {
|
59 |
+
$this->prettybar_show_title = $var;
|
60 |
+
delete_option( $prettybar_show_title );
|
61 |
+
}
|
62 |
+
else
|
63 |
+
$this->prettybar_show_title = '1';
|
64 |
+
}
|
65 |
+
|
66 |
+
if(!isset($this->prettybar_show_description)) {
|
67 |
+
if($var = get_option( $prettybar_show_description )) {
|
68 |
+
$this->prettybar_show_description = $var;
|
69 |
+
delete_option( $prettybar_show_description );
|
70 |
+
}
|
71 |
+
else
|
72 |
+
$this->prettybar_show_description = '1';
|
73 |
+
}
|
74 |
+
|
75 |
+
if(!isset($this->prettybar_show_share_links)) {
|
76 |
+
if($var = get_option( $prettybar_show_share_links )) {
|
77 |
+
$this->prettybar_show_share_links = $var;
|
78 |
+
delete_option( $prettybar_show_share_links );
|
79 |
+
}
|
80 |
+
else
|
81 |
+
$this->prettybar_show_share_links = '1';
|
82 |
+
}
|
83 |
+
|
84 |
+
if(!isset($this->prettybar_show_target_url_link)) {
|
85 |
+
if($var = get_option( $prettybar_show_target_url_link )) {
|
86 |
+
$this->prettybar_show_target_url_link = $var;
|
87 |
+
delete_option( $prettybar_show_target_url_link );
|
88 |
+
}
|
89 |
+
else
|
90 |
+
$this->prettybar_show_target_url_link = '1';
|
91 |
+
}
|
92 |
+
|
93 |
+
if(!isset($this->link_track_me)) {
|
94 |
+
if($var = get_option( $link_track_me )) {
|
95 |
+
$this->link_track_me = $var;
|
96 |
+
delete_option( $link_track_me );
|
97 |
+
}
|
98 |
+
else
|
99 |
+
$this->link_track_me = '1';
|
100 |
+
}
|
101 |
+
|
102 |
+
if(!isset($this->link_nofollow)) {
|
103 |
+
if($var = get_option( $link_nofollow )) {
|
104 |
+
$this->link_nofollow = $var;
|
105 |
+
delete_option( $link_nofollow );
|
106 |
+
}
|
107 |
+
else
|
108 |
+
$this->link_nofollow = '0';
|
109 |
+
}
|
110 |
+
|
111 |
+
if(!isset($this->link_redirect_type)) {
|
112 |
+
if($var = get_option( $link_track_as_pixel )) {
|
113 |
+
$this->link_redirect_type = 'pixel';
|
114 |
+
delete_option( $link_show_prettybar );
|
115 |
+
delete_option( $link_ultra_cloak );
|
116 |
+
delete_option( $link_track_as_pixel );
|
117 |
+
delete_option( $link_redirect_type );
|
118 |
+
}
|
119 |
+
if($var = get_option( $link_show_prettybar )) {
|
120 |
+
$this->link_redirect_type = 'prettybar';
|
121 |
+
delete_option( $link_show_prettybar );
|
122 |
+
delete_option( $link_ultra_cloak );
|
123 |
+
delete_option( $link_track_as_pixel );
|
124 |
+
delete_option( $link_redirect_type );
|
125 |
+
}
|
126 |
+
if($var = get_option( $link_ultra_cloak )) {
|
127 |
+
$this->link_redirect_type = 'cloak';
|
128 |
+
delete_option( $link_show_prettybar );
|
129 |
+
delete_option( $link_ultra_cloak );
|
130 |
+
delete_option( $link_track_as_pixel );
|
131 |
+
delete_option( $link_redirect_type );
|
132 |
+
}
|
133 |
+
if($var = get_option( $link_redirect_type )) {
|
134 |
+
$this->link_redirect_type = $var;
|
135 |
+
delete_option( $link_show_prettybar );
|
136 |
+
delete_option( $link_ultra_cloak );
|
137 |
+
delete_option( $link_track_as_pixel );
|
138 |
+
delete_option( $link_redirect_type );
|
139 |
+
}
|
140 |
+
else
|
141 |
+
$this->link_redirect_type = '307';
|
142 |
+
}
|
143 |
+
|
144 |
+
if(!isset($this->prli_exclude_ips))
|
145 |
+
{
|
146 |
+
if($var = get_option( $prli_exclude_ips )) {
|
147 |
+
$this->prli_exclude_ips = $var;
|
148 |
+
delete_option( $prli_exclude_ips );
|
149 |
+
}
|
150 |
+
else
|
151 |
+
$this->prli_exclude_ips = '';
|
152 |
+
}
|
153 |
+
|
154 |
+
if(!isset($this->prettybar_image_url))
|
155 |
+
{
|
156 |
+
if($var = get_option( $prettybar_image_url )) {
|
157 |
+
$this->prettybar_image_url = $var;
|
158 |
+
delete_option( $prettybar_image_url );
|
159 |
+
}
|
160 |
+
else
|
161 |
+
$this->prettybar_image_url = PRLI_URL . '/images/pretty-link-48x48.png';
|
162 |
+
}
|
163 |
+
|
164 |
+
if(!isset($this->prettybar_background_image_url))
|
165 |
+
{
|
166 |
+
if($var = get_option( $prettybar_background_image_url )) {
|
167 |
+
$this->prettybar_background_image_url = $var;
|
168 |
+
delete_option( $prettybar_background_image_url );
|
169 |
+
}
|
170 |
+
else
|
171 |
+
$this->prettybar_background_image_url = PRLI_URL . '/images/bar_background.png';
|
172 |
+
}
|
173 |
+
|
174 |
+
if(!isset($this->prettybar_color))
|
175 |
+
{
|
176 |
+
if($var = get_option( $prettybar_color )) {
|
177 |
+
$this->prettybar_color = $var;
|
178 |
+
delete_option( $prettybar_color );
|
179 |
+
}
|
180 |
+
else
|
181 |
+
$this->prettybar_color = '';
|
182 |
+
}
|
183 |
+
|
184 |
+
if(!isset($this->prettybar_text_color))
|
185 |
+
{
|
186 |
+
if($var = get_option( $prettybar_text_color )) {
|
187 |
+
$this->prettybar_text_color = $var;
|
188 |
+
delete_option( $prettybar_text_color );
|
189 |
+
}
|
190 |
+
else
|
191 |
+
$this->prettybar_text_color = '000000';
|
192 |
+
}
|
193 |
+
|
194 |
+
if(!isset($this->prettybar_link_color))
|
195 |
+
{
|
196 |
+
if($var = get_option( $prettybar_link_color )) {
|
197 |
+
$this->prettybar_link_color = $var;
|
198 |
+
delete_option( $prettybar_link_color );
|
199 |
+
}
|
200 |
+
else
|
201 |
+
$this->prettybar_link_color = '0000ee';
|
202 |
+
}
|
203 |
+
|
204 |
+
if(!isset($this->prettybar_hover_color))
|
205 |
+
{
|
206 |
+
if($var = get_option( $prettybar_hover_color )) {
|
207 |
+
$this->prettybar_hover_color = $var;
|
208 |
+
delete_option( $prettybar_hover_color );
|
209 |
+
}
|
210 |
+
else
|
211 |
+
$this->prettybar_hover_color = 'ababab';
|
212 |
+
}
|
213 |
+
|
214 |
+
if(!isset($this->prettybar_visited_color))
|
215 |
+
{
|
216 |
+
if($var = get_option( $prettybar_visited_color )) {
|
217 |
+
$this->prettybar_visited_color = $var;
|
218 |
+
delete_option( $prettybar_visited_color );
|
219 |
+
}
|
220 |
+
else
|
221 |
+
$this->prettybar_visited_color = '551a8b';
|
222 |
+
}
|
223 |
+
|
224 |
+
if(!isset($this->prettybar_title_limit))
|
225 |
+
{
|
226 |
+
if($var = get_option( $prettybar_title_limit )) {
|
227 |
+
$this->prettybar_title_limit = $var;
|
228 |
+
delete_option( $prettybar_title_limit );
|
229 |
+
}
|
230 |
+
else
|
231 |
+
$this->prettybar_title_limit = '25';
|
232 |
+
}
|
233 |
+
|
234 |
+
if(!isset($this->prettybar_desc_limit))
|
235 |
+
{
|
236 |
+
if($var = get_option( $prettybar_desc_limit )) {
|
237 |
+
$this->prettybar_desc_limit = $var;
|
238 |
+
delete_option( $prettybar_desc_limit );
|
239 |
+
}
|
240 |
+
else
|
241 |
+
$this->prettybar_desc_limit = '30';
|
242 |
+
}
|
243 |
+
|
244 |
+
if(!isset($this->prettybar_link_limit))
|
245 |
+
{
|
246 |
+
if($var = get_option( $prettybar_link_limit )) {
|
247 |
+
$this->prettybar_link_limit = $var;
|
248 |
+
delete_option( $prettybar_link_limit );
|
249 |
+
}
|
250 |
+
else
|
251 |
+
$this->prettybar_link_limit = '30';
|
252 |
+
}
|
253 |
+
|
254 |
+
if(!isset($this->bookmarklet_auth))
|
255 |
+
$this->bookmarklet_auth = md5(get_option('auth_salt') . time());
|
256 |
+
}
|
257 |
+
}
|
258 |
+
?>
|
classes/models/PrliUrlUtils.php
ADDED
@@ -0,0 +1,127 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?
|
2 |
+
class PrliUrlUtils {
|
3 |
+
|
4 |
+
function get_title($url, $slug='')
|
5 |
+
{
|
6 |
+
// Grab the title tag
|
7 |
+
$title = $this->url_grab_title($url);
|
8 |
+
|
9 |
+
if(!$title)
|
10 |
+
return $slug;
|
11 |
+
|
12 |
+
return $title;
|
13 |
+
}
|
14 |
+
|
15 |
+
/*
|
16 |
+
Go out to the web and see if the url resolves
|
17 |
+
*/
|
18 |
+
function valid_url($url)
|
19 |
+
{
|
20 |
+
$valid = false;
|
21 |
+
|
22 |
+
$remote_page = $this->read_remote_file($url,1);
|
23 |
+
if($remote_page and !empty($remote_page))
|
24 |
+
$valid = true;
|
25 |
+
|
26 |
+
return $valid;
|
27 |
+
}
|
28 |
+
|
29 |
+
function url_grab_title($url)
|
30 |
+
{
|
31 |
+
$title = false;
|
32 |
+
|
33 |
+
$remote_page = $this->read_remote_file($url,4);
|
34 |
+
|
35 |
+
// Look for <title>(.*?)</title> in the text
|
36 |
+
if($remote_page and preg_match('#<title>[\s\n\r]*?(.*?)[\s\n\r]*?</title>#im', $remote_page, $matches))
|
37 |
+
$title = trim($matches[1]);
|
38 |
+
|
39 |
+
return $title;
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Sends http request ensuring the request will fail before $timeout seconds
|
44 |
+
* gotta use a socket connection because some hosting setups don't allow fopen.
|
45 |
+
* Supports SSL sites as well as 301, 302 & 307 redirects
|
46 |
+
* Returns the response content (no header, trimmed)
|
47 |
+
* @param string $url
|
48 |
+
* @param string $num_chunks Set to 0 if you want to read the full file
|
49 |
+
* @param string $chunk_size In bytes
|
50 |
+
* @param int $timeout
|
51 |
+
* @return string|false false if request failed
|
52 |
+
*/
|
53 |
+
function read_remote_file($url, $num_chunks=0, $chunk_size=1024, $timeout=30 )
|
54 |
+
{
|
55 |
+
$purl = @parse_url($url);
|
56 |
+
|
57 |
+
$sock_host = $purl['host'];
|
58 |
+
$sock_port = 80;
|
59 |
+
$sock_scheme = $purl['scheme'];
|
60 |
+
|
61 |
+
$req_host = $purl['host'];
|
62 |
+
$req_path = $purl['path'];
|
63 |
+
|
64 |
+
if(empty($req_path))
|
65 |
+
$req_path = "/";
|
66 |
+
|
67 |
+
if($sock_scheme == 'https')
|
68 |
+
{
|
69 |
+
$sock_port = 443;
|
70 |
+
$sock_host = "ssl://{$sock_host}";
|
71 |
+
}
|
72 |
+
|
73 |
+
$fp = fsockopen($sock_host, $sock_port, $errno, $errstr, $timeout);
|
74 |
+
$contents = '';
|
75 |
+
$header = '';
|
76 |
+
|
77 |
+
if (!$fp)
|
78 |
+
return false;
|
79 |
+
else
|
80 |
+
{
|
81 |
+
// Send get request
|
82 |
+
$request = "GET {$req_path} HTTP/1.1\r\n";
|
83 |
+
$request .= "Host: {$req_host}\r\n";
|
84 |
+
$request .= "Connection: Close\r\n\r\n";
|
85 |
+
fwrite($fp, $request);
|
86 |
+
|
87 |
+
// Read response
|
88 |
+
$head_end_found = false;
|
89 |
+
$buffer = '';
|
90 |
+
for($i = 0; !feof($fp); $i++)
|
91 |
+
{
|
92 |
+
if($num_chunks > 0 and $i >= $num_chunks)
|
93 |
+
break;
|
94 |
+
|
95 |
+
$out = fread($fp,$chunk_size);
|
96 |
+
if($head_end_found)
|
97 |
+
$contents .= $out;
|
98 |
+
else
|
99 |
+
{
|
100 |
+
$buffer .= $out;
|
101 |
+
$head_end = strpos($buffer, "\r\n\r\n");
|
102 |
+
if($head_end !== false)
|
103 |
+
{
|
104 |
+
$head_end_found = true;
|
105 |
+
$contents .= substr($buffer, ($head_end + 4));
|
106 |
+
$header .= substr($buffer, 0, $head_end);
|
107 |
+
// Follow HTTP redirects
|
108 |
+
if(preg_match("#http/1\.1 301#i",$header) or
|
109 |
+
preg_match("#http/1\.1 302#i",$header) or
|
110 |
+
preg_match("#http/1\.1 307#i",$header))
|
111 |
+
{
|
112 |
+
preg_match("#^Location:(.*?)$#im",$header,$matches);
|
113 |
+
return $this->read_remote_file(trim($matches[1]));
|
114 |
+
}
|
115 |
+
}
|
116 |
+
}
|
117 |
+
}
|
118 |
+
fclose($fp);
|
119 |
+
}
|
120 |
+
|
121 |
+
if(empty($contents))
|
122 |
+
return false;
|
123 |
+
else
|
124 |
+
return trim($contents);
|
125 |
+
}
|
126 |
+
}
|
127 |
+
?>
|
classes/models/PrliUtils.php
ADDED
@@ -0,0 +1,941 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
require_once('models.inc.php');
|
3 |
+
|
4 |
+
class PrliUtils
|
5 |
+
{
|
6 |
+
/** Okay I realize that Percentagize isn't really a word but
|
7 |
+
* this is so that the values we have will work with google
|
8 |
+
* charts.
|
9 |
+
*/
|
10 |
+
function percentagizeArray($data,$max_value)
|
11 |
+
{
|
12 |
+
$new_data = array();
|
13 |
+
foreach($data as $point)
|
14 |
+
{
|
15 |
+
if( $max_value > 0 )
|
16 |
+
{
|
17 |
+
$new_data[] = $point / $max_value * 100;
|
18 |
+
}
|
19 |
+
else
|
20 |
+
{
|
21 |
+
$new_data[] = 0;
|
22 |
+
}
|
23 |
+
}
|
24 |
+
return $new_data;
|
25 |
+
}
|
26 |
+
|
27 |
+
function getTopValue($values_array)
|
28 |
+
{
|
29 |
+
rsort($values_array);
|
30 |
+
return $values_array[0];
|
31 |
+
}
|
32 |
+
|
33 |
+
function getFirstClickDate()
|
34 |
+
{
|
35 |
+
global $wpdb;
|
36 |
+
|
37 |
+
$clicks_table = $wpdb->prefix . "prli_clicks";
|
38 |
+
$query = "SELECT created_at FROM $clicks_table ORDER BY created_at LIMIT 1";
|
39 |
+
$first_click = $wpdb->get_var($query);
|
40 |
+
|
41 |
+
if(isset($first_click))
|
42 |
+
{
|
43 |
+
return strtotime($first_click);
|
44 |
+
}
|
45 |
+
else
|
46 |
+
return null;
|
47 |
+
}
|
48 |
+
|
49 |
+
function getMonthsArray()
|
50 |
+
{
|
51 |
+
global $wpdb;
|
52 |
+
global $prli_click;
|
53 |
+
|
54 |
+
$months = array();
|
55 |
+
$year = date("Y");
|
56 |
+
$month = date("m");
|
57 |
+
$current_timestamp = time();
|
58 |
+
$current_month_timestamp = mktime(0, 0, 0, date("m", $current_timestamp), 1, date("Y", $current_timestamp));
|
59 |
+
|
60 |
+
$clicks_table = $prli_click->tableName();
|
61 |
+
$first_click = $wpdb->get_var("SELECT created_at FROM $clicks_table ORDER BY created_at LIMIT 1;");
|
62 |
+
$first_timestamp = ((empty($first_click))?$current_timestamp:strtotime($first_click));
|
63 |
+
$first_date = mktime(0, 0, 0, date("m", $first_timestamp), 1, date("Y", $first_timestamp));
|
64 |
+
|
65 |
+
while($current_month_timestamp >= $first_date)
|
66 |
+
{
|
67 |
+
$months[] = $current_month_timestamp;
|
68 |
+
if(date("m") == 1)
|
69 |
+
$current_month_timestamp = mktime(0, 0, 0, 12, 1, date("Y", $current_month_timestamp)-1);
|
70 |
+
else
|
71 |
+
$current_month_timestamp = mktime(0, 0, 0, date("m", $current_month_timestamp)-1, 1, date("Y", $current_month_timestamp));
|
72 |
+
}
|
73 |
+
return $months;
|
74 |
+
}
|
75 |
+
|
76 |
+
// For Pagination
|
77 |
+
function getLastRecordNum($r_count,$current_p,$p_size)
|
78 |
+
{
|
79 |
+
return (($r_count < ($current_p * $p_size))?$r_count:($current_p * $p_size));
|
80 |
+
}
|
81 |
+
|
82 |
+
// For Pagination
|
83 |
+
function getFirstRecordNum($r_count,$current_p,$p_size)
|
84 |
+
{
|
85 |
+
if($current_p == 1)
|
86 |
+
return 1;
|
87 |
+
else
|
88 |
+
return ($this->getLastRecordNum($r_count,($current_p - 1),$p_size) + 1);
|
89 |
+
}
|
90 |
+
|
91 |
+
function slugIsAvailable( $full_slug, $id = '' )
|
92 |
+
{
|
93 |
+
global $wpdb, $prli_blogurl, $prli_link;
|
94 |
+
|
95 |
+
// We don't care about anything after the slash for now because we don't want
|
96 |
+
// to have to worry about comparing against every imaginable combination in WordPress
|
97 |
+
$slug_components = explode('/',$full_slug);
|
98 |
+
$slug = $slug_components[0];
|
99 |
+
|
100 |
+
// Check slug uniqueness against posts, pages and categories
|
101 |
+
$posts_table = $wpdb->prefix . "posts";
|
102 |
+
$terms_table = $wpdb->prefix . "terms";
|
103 |
+
|
104 |
+
$post_slug = $wpdb->get_var("SELECT post_name FROM $posts_table WHERE post_name='$slug'");
|
105 |
+
$term_slug = $wpdb->get_col("SELECT slug FROM $terms_table WHERE slug='$slug'");
|
106 |
+
|
107 |
+
if( $post_slug == $slug or $term_slug == $slug )
|
108 |
+
return false;
|
109 |
+
|
110 |
+
// Check slug against files on the root wordpress install
|
111 |
+
$root_dir = opendir(ABSPATH);
|
112 |
+
|
113 |
+
while (($file = readdir($root_dir)) !== false) {
|
114 |
+
$haystack = strtolower($file);
|
115 |
+
if($haystack == $slug)
|
116 |
+
return false;
|
117 |
+
}
|
118 |
+
|
119 |
+
// Check slug against other slugs in the prli links database.
|
120 |
+
// We'll use the full_slug here because its easier to guarantee uniqueness.
|
121 |
+
if($id != null and $id != '')
|
122 |
+
$query = "SELECT slug FROM " . $prli_link->table_name . " WHERE slug='" . $full_slug . "' AND id <> " . $id;
|
123 |
+
else
|
124 |
+
$query = "SELECT slug FROM " . $prli_link->table_name . " WHERE slug='" . $full_slug . "'";
|
125 |
+
|
126 |
+
$link_slug = $wpdb->get_var($query);
|
127 |
+
|
128 |
+
if( $link_slug == $full_slug )
|
129 |
+
return false;
|
130 |
+
|
131 |
+
// TODO: Check permalink structure to avoid the ability of creating a year or something as a slug
|
132 |
+
|
133 |
+
return true;
|
134 |
+
}
|
135 |
+
|
136 |
+
/* Needed because we don't know if the target uesr will have a browsercap file installed
|
137 |
+
on their server ... particularly in a shared hosting environment this is difficult
|
138 |
+
*/
|
139 |
+
function php_get_browser($agent = NULL)
|
140 |
+
{
|
141 |
+
$agent=$agent?$agent:$_SERVER['HTTP_USER_AGENT'];
|
142 |
+
$yu=array();
|
143 |
+
$q_s=array("#\.#","#\*#","#\?#");
|
144 |
+
$q_r=array("\.",".*",".?");
|
145 |
+
$brows=parse_ini_file(PRLI_PATH."/includes/php/php_browsecap.ini",true);
|
146 |
+
foreach($brows as $k=>$t)
|
147 |
+
{
|
148 |
+
if(fnmatch($k,$agent))
|
149 |
+
{
|
150 |
+
$yu['browser_name_pattern']=$k;
|
151 |
+
$pat=preg_replace($q_s,$q_r,$k);
|
152 |
+
$yu['browser_name_regex']=strtolower("^$pat$");
|
153 |
+
foreach($brows as $g=>$r)
|
154 |
+
{
|
155 |
+
if($t['Parent']==$g)
|
156 |
+
{
|
157 |
+
foreach($brows as $a=>$b)
|
158 |
+
{
|
159 |
+
if($r['Parent']==$a)
|
160 |
+
{
|
161 |
+
$yu=array_merge($yu,$b,$r,$t);
|
162 |
+
foreach($yu as $d=>$z)
|
163 |
+
{
|
164 |
+
$l=strtolower($d);
|
165 |
+
$hu[$l]=$z;
|
166 |
+
}
|
167 |
+
}
|
168 |
+
}
|
169 |
+
}
|
170 |
+
}
|
171 |
+
|
172 |
+
break;
|
173 |
+
}
|
174 |
+
}
|
175 |
+
|
176 |
+
return $hu;
|
177 |
+
}
|
178 |
+
|
179 |
+
// This is where the magic happens!
|
180 |
+
function track_link($slug,$values)
|
181 |
+
{
|
182 |
+
global $wpdb, $prli_click, $prli_link;
|
183 |
+
|
184 |
+
$query = "SELECT * FROM ".$prli_link->table_name." WHERE slug='$slug' LIMIT 1";
|
185 |
+
$pretty_link = $wpdb->get_row($query);
|
186 |
+
$pretty_link_target = apply_filters('prli_target_url',array('url' => $pretty_link->url, 'link_id' => $pretty_link->id));
|
187 |
+
$pretty_link_url = $pretty_link_target['url'];
|
188 |
+
|
189 |
+
if(isset($pretty_link->track_me) and $pretty_link->track_me)
|
190 |
+
{
|
191 |
+
$first_click = false;
|
192 |
+
|
193 |
+
$click_ip = $_SERVER['REMOTE_ADDR'];
|
194 |
+
$click_referer = $_SERVER['HTTP_REFERER'];
|
195 |
+
$click_host = gethostbyaddr($click_ip);
|
196 |
+
|
197 |
+
$click_uri = $_SERVER['REQUEST_URI'];
|
198 |
+
$click_user_agent = $_SERVER['HTTP_USER_AGENT'];
|
199 |
+
$click_browser = $this->php_get_browser();
|
200 |
+
|
201 |
+
//Set Cookie if it doesn't exist
|
202 |
+
$cookie_name = 'prli_click_' . $pretty_link->id;
|
203 |
+
//Used for unique click tracking
|
204 |
+
$cookie_expire_time = time()+60*60*24*30; // Expire in 30 days
|
205 |
+
|
206 |
+
$visitor_cookie = 'prli_visitor';
|
207 |
+
//Used for visitor activity
|
208 |
+
$visitor_cookie_expire_time = time()+60*60*24*365; // Expire in 1 year
|
209 |
+
|
210 |
+
|
211 |
+
if($_COOKIE[$cookie_name] == null)
|
212 |
+
{
|
213 |
+
setcookie($cookie_name,$slug,$cookie_expire_time);
|
214 |
+
$first_click = true;
|
215 |
+
}
|
216 |
+
|
217 |
+
// Retrieve / Generate visitor id
|
218 |
+
if($_COOKIE[$visitor_cookie] == null)
|
219 |
+
{
|
220 |
+
$visitor_uid = $prli_click->generateUniqueVisitorId();
|
221 |
+
setcookie($visitor_cookie,$visitor_uid,$visitor_cookie_expire_time);
|
222 |
+
}
|
223 |
+
else
|
224 |
+
$visitor_uid = $_COOKIE[$visitor_cookie];
|
225 |
+
|
226 |
+
//Record Click in DB
|
227 |
+
$insert = "INSERT INTO ".$prli_click->table_name." (link_id,vuid,ip,browser,btype,bversion,os,referer,uri,host,first_click,created_at) VALUES ($pretty_link->id,'$visitor_uid','$click_ip','$click_user_agent','".$click_browser['browser']."','".$click_browser['version']."','".$click_browser['platform']."','$click_referer','$click_uri','$click_host','$first_click',NOW())";
|
228 |
+
|
229 |
+
$results = $wpdb->query( $insert );
|
230 |
+
|
231 |
+
do_action('prli_record_click',array('link_id' => $pretty_link->id, 'click_id' => $wpdb->insert_id, 'url' => $pretty_link_url));
|
232 |
+
}
|
233 |
+
|
234 |
+
// Reformat Parameters
|
235 |
+
$param_string = '';
|
236 |
+
|
237 |
+
if(isset($pretty_link->param_forwarding) and $pretty_link->param_forwarding and isset($values) and count($values) >= 1)
|
238 |
+
{
|
239 |
+
$first_param = true;
|
240 |
+
foreach($values as $key => $value)
|
241 |
+
{
|
242 |
+
if($first_param)
|
243 |
+
{
|
244 |
+
$param_string = (preg_match("#\?#", $pretty_link_url)?"&":"?");
|
245 |
+
$first_param = false;
|
246 |
+
}
|
247 |
+
else
|
248 |
+
$param_string .= "&";
|
249 |
+
|
250 |
+
$param_string .= "$key=$value";
|
251 |
+
}
|
252 |
+
}
|
253 |
+
|
254 |
+
if(isset($pretty_link->nofollow) and $pretty_link->nofollow)
|
255 |
+
header("X-Robots-Tag: noindex, nofollow", true);
|
256 |
+
|
257 |
+
switch($pretty_link->redirect_type)
|
258 |
+
{
|
259 |
+
case 'pixel':
|
260 |
+
break;
|
261 |
+
case 'prettybar':
|
262 |
+
global $prli_blogurl;
|
263 |
+
require_once PRLI_VIEWS_PATH . '/prli-links/bar.php';
|
264 |
+
break;
|
265 |
+
case 'cloak':
|
266 |
+
require_once PRLI_VIEWS_PATH . '/prli-links/ultra-cloak.php';
|
267 |
+
break;
|
268 |
+
case '301':
|
269 |
+
header("HTTP/1.1 301 Moved Permanently");
|
270 |
+
header('Location: '.$pretty_link_url.$param_string);
|
271 |
+
break;
|
272 |
+
default:
|
273 |
+
if($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.0')
|
274 |
+
header("HTTP/1.1 302 Found");
|
275 |
+
else
|
276 |
+
header("HTTP/1.1 307 Temporary Redirect");
|
277 |
+
header('Location: '.$pretty_link_url.$param_string);
|
278 |
+
}
|
279 |
+
}
|
280 |
+
|
281 |
+
function get_custom_forwarding_rule($param_struct)
|
282 |
+
{
|
283 |
+
$param_struct = preg_replace('#%.*?%#','(.*?)',$param_struct);
|
284 |
+
return preg_replace('#\(\.\*\?\)$#','(.*)',$param_struct); // replace the last one with a greedy operator
|
285 |
+
}
|
286 |
+
|
287 |
+
function get_custom_forwarding_params($param_struct, $start_index = 1)
|
288 |
+
{
|
289 |
+
preg_match_all('#%(.*?)%#', $param_struct, $matches);
|
290 |
+
|
291 |
+
$param_string = '';
|
292 |
+
$match_index = $start_index;
|
293 |
+
for($i = 0; $i < count($matches[1]); $i++)
|
294 |
+
{
|
295 |
+
if($i == 0 and $start_index == 1)
|
296 |
+
$param_string .= "?";
|
297 |
+
else
|
298 |
+
$param_string .= "&";
|
299 |
+
|
300 |
+
$param_string .= $matches[1][$i] . "=$$match_index";
|
301 |
+
$match_index++;
|
302 |
+
}
|
303 |
+
|
304 |
+
return $param_string;
|
305 |
+
}
|
306 |
+
|
307 |
+
function decode_custom_param_str($param_struct, $uri_string)
|
308 |
+
{
|
309 |
+
// Get the structure matches (param names)
|
310 |
+
preg_match_all('#%(.*?)%#', $param_struct, $struct_matches);
|
311 |
+
|
312 |
+
// Get the uri matches (param values)
|
313 |
+
$match_str = '#'.$this->get_custom_forwarding_rule($param_struct).'#';
|
314 |
+
preg_match($match_str, $uri_string, $uri_matches);
|
315 |
+
|
316 |
+
$param_array = array();
|
317 |
+
for($i = 0; $i < count($struct_matches[1]); $i++)
|
318 |
+
$param_array[$struct_matches[1][$i]] = $uri_matches[$i+1];
|
319 |
+
|
320 |
+
return $param_array;
|
321 |
+
}
|
322 |
+
|
323 |
+
// Detects whether an array is a true numerical array or an
|
324 |
+
// associative array (or hash).
|
325 |
+
function prli_array_type($item)
|
326 |
+
{
|
327 |
+
$array_type = 'unknown';
|
328 |
+
|
329 |
+
if(is_array($item))
|
330 |
+
{
|
331 |
+
$array_type = 'array';
|
332 |
+
|
333 |
+
foreach($item as $key => $value)
|
334 |
+
{
|
335 |
+
if(!is_numeric($key))
|
336 |
+
{
|
337 |
+
$array_type = 'hash';
|
338 |
+
break;
|
339 |
+
}
|
340 |
+
}
|
341 |
+
}
|
342 |
+
|
343 |
+
return $array_type;
|
344 |
+
}
|
345 |
+
|
346 |
+
// This eliminates the need to use php's built in json_encoder
|
347 |
+
// which only works with PHP 5.2 and above.
|
348 |
+
function prli_json_encode($json_array)
|
349 |
+
{
|
350 |
+
$json_str = '';
|
351 |
+
|
352 |
+
if(is_array($json_array))
|
353 |
+
{
|
354 |
+
if($this->prli_array_type($json_array) == 'array')
|
355 |
+
{
|
356 |
+
$first = true;
|
357 |
+
$json_str .= "[";
|
358 |
+
foreach($json_array as $item)
|
359 |
+
{
|
360 |
+
if(!$first)
|
361 |
+
$json_str .= ",";
|
362 |
+
|
363 |
+
if(is_numeric($item))
|
364 |
+
$json_str .= (($item < 0)?"\"$item\"":$item);
|
365 |
+
else if(is_array($item))
|
366 |
+
$json_str .= $this->prli_json_encode($item);
|
367 |
+
else if(is_string($item))
|
368 |
+
$json_str .= '"'.$item.'"';
|
369 |
+
else if(is_bool($item))
|
370 |
+
$json_str .= (($item)?"true":"false");
|
371 |
+
|
372 |
+
$first = false;
|
373 |
+
}
|
374 |
+
$json_str .= "]";
|
375 |
+
}
|
376 |
+
else if($this->prli_array_type($json_array) == 'hash')
|
377 |
+
{
|
378 |
+
$first = true;
|
379 |
+
$json_str .= "{";
|
380 |
+
foreach($json_array as $key => $item)
|
381 |
+
{
|
382 |
+
if(!$first)
|
383 |
+
$json_str .= ",";
|
384 |
+
|
385 |
+
$json_str .= "\"$key\":";
|
386 |
+
|
387 |
+
if(is_numeric($item))
|
388 |
+
$json_str .= (($item < 0)?"\"$item\"":$item);
|
389 |
+
else if(is_array($item))
|
390 |
+
$json_str .= $this->prli_json_encode($item);
|
391 |
+
else if(is_string($item))
|
392 |
+
$json_str .= "\"$item\"";
|
393 |
+
else if(is_bool($item))
|
394 |
+
$json_str .= (($item)?"true":"false");
|
395 |
+
|
396 |
+
$first = false;
|
397 |
+
}
|
398 |
+
$json_str .= "}";
|
399 |
+
}
|
400 |
+
}
|
401 |
+
|
402 |
+
return $json_str;
|
403 |
+
}
|
404 |
+
|
405 |
+
// This eliminates the need to use php's built in json_encoder
|
406 |
+
// which only works with PHP 5.2 and above.
|
407 |
+
function prli_json_decode(&$json_str,$type='array',$index = 0)
|
408 |
+
{
|
409 |
+
$json_array = array();
|
410 |
+
$index_str = '';
|
411 |
+
$value_str = '';
|
412 |
+
$in_string = false;
|
413 |
+
$in_index = ($type=='hash'); //first char in hash is an index
|
414 |
+
$in_value = ($type=='array'); //first char in array is a value
|
415 |
+
|
416 |
+
$json_special_chars_array = array('{','[','}',']','"',',',':');
|
417 |
+
|
418 |
+
// On the first pass we need to do some special stuff
|
419 |
+
if($index == 0)
|
420 |
+
{
|
421 |
+
if($json_str[$index] == '{')
|
422 |
+
{
|
423 |
+
$type = 'hash';
|
424 |
+
$in_index = true;
|
425 |
+
$in_value = false;
|
426 |
+
}
|
427 |
+
else if($json_str[$index]=='[')
|
428 |
+
{
|
429 |
+
$type = 'array';
|
430 |
+
$in_index = false;
|
431 |
+
$in_value = true;
|
432 |
+
}
|
433 |
+
else
|
434 |
+
return false; // not valid json
|
435 |
+
|
436 |
+
// skip to next index
|
437 |
+
$index++;
|
438 |
+
}
|
439 |
+
|
440 |
+
for($i = $index; $i < strlen($json_str); $i++)
|
441 |
+
{
|
442 |
+
if($in_string and in_array($json_str[$i],$json_special_chars_array))
|
443 |
+
{
|
444 |
+
if($json_str[$i] == '"')
|
445 |
+
$in_string = false;
|
446 |
+
else
|
447 |
+
{
|
448 |
+
if($in_value)
|
449 |
+
$value_str .= $json_str[$i];
|
450 |
+
else if($in_index)
|
451 |
+
$index_str .= $json_str[$i];
|
452 |
+
}
|
453 |
+
}
|
454 |
+
else
|
455 |
+
{
|
456 |
+
switch($json_str[$i])
|
457 |
+
{
|
458 |
+
case '{':
|
459 |
+
$array_vals = $this->prli_json_decode($json_str,'hash',$i + 1);
|
460 |
+
|
461 |
+
if($type=='hash')
|
462 |
+
$json_array[$index_str] = $array_vals[1]; // We'll never get an array as an index
|
463 |
+
else if($type=='array')
|
464 |
+
$json_array[] = $array_vals[1];
|
465 |
+
|
466 |
+
$i = $array_vals[0]; // Skip ahead to the new index
|
467 |
+
break;
|
468 |
+
|
469 |
+
case '[':
|
470 |
+
$array_vals = $this->prli_json_decode($json_str,'array',$i + 1);
|
471 |
+
|
472 |
+
if($type=='hash')
|
473 |
+
$json_array[$index_str] = $array_vals[1];
|
474 |
+
else if($type=='array')
|
475 |
+
$json_array[] = $array_vals[1];
|
476 |
+
|
477 |
+
$i = $array_vals[0]; // Skip ahead to the new index
|
478 |
+
break;
|
479 |
+
|
480 |
+
case '}':
|
481 |
+
if(!empty($index_str) and !empty($value_str))
|
482 |
+
{
|
483 |
+
$json_array[$index_str] = htmlspecialchars_decode(stripslashes($value_str));
|
484 |
+
$index_str = '';
|
485 |
+
$value_str = '';
|
486 |
+
}
|
487 |
+
return array($i,$json_array);
|
488 |
+
|
489 |
+
case ']':
|
490 |
+
if(!empty($value_str))
|
491 |
+
{
|
492 |
+
$json_array[] = htmlspecialchars_decode(stripslashes($value_str));
|
493 |
+
$value_str = '';
|
494 |
+
}
|
495 |
+
return array($i,$json_array);
|
496 |
+
|
497 |
+
// skip the null character
|
498 |
+
case '\0':
|
499 |
+
break;
|
500 |
+
|
501 |
+
// Handle Escapes
|
502 |
+
case '\\':
|
503 |
+
if($in_string)
|
504 |
+
{
|
505 |
+
if(in_array($json_str[$i + 1],$json_special_chars_array))
|
506 |
+
{
|
507 |
+
if($in_value)
|
508 |
+
$value_str .= '\\'.$json_str[$i + 1];
|
509 |
+
else if($in_index)
|
510 |
+
$index_str .= '\\'.$json_str[$i + 1];
|
511 |
+
|
512 |
+
$i++; // skip the escaped char now that its been recorded
|
513 |
+
}
|
514 |
+
else
|
515 |
+
{
|
516 |
+
if($in_value)
|
517 |
+
$value_str .= $json_str[$i];
|
518 |
+
else if($in_index)
|
519 |
+
$index_str .= $json_str[$i];
|
520 |
+
}
|
521 |
+
}
|
522 |
+
break;
|
523 |
+
|
524 |
+
case '"':
|
525 |
+
$in_string = !$in_string; // just tells us if we're in a string
|
526 |
+
break;
|
527 |
+
|
528 |
+
case ':':
|
529 |
+
if($type == 'hash')
|
530 |
+
{
|
531 |
+
$in_value = true;
|
532 |
+
$in_index = false;
|
533 |
+
}
|
534 |
+
break;
|
535 |
+
|
536 |
+
case ',':
|
537 |
+
if($type == 'hash')
|
538 |
+
{
|
539 |
+
if(!empty($index_str) and !empty($value_str))
|
540 |
+
{
|
541 |
+
$json_array[$index_str] = htmlspecialchars_decode(stripslashes($value_str));
|
542 |
+
$index_str = '';
|
543 |
+
$value_str = '';
|
544 |
+
}
|
545 |
+
|
546 |
+
$in_index = true;
|
547 |
+
$in_value = false;
|
548 |
+
}
|
549 |
+
else if($type == 'array')
|
550 |
+
{
|
551 |
+
if(!empty($value_str))
|
552 |
+
{
|
553 |
+
$json_array[] = htmlspecialchars_decode(stripslashes($value_str));
|
554 |
+
$value_str = '';
|
555 |
+
}
|
556 |
+
|
557 |
+
$in_value = true;
|
558 |
+
$in_index = false; // always false in an array
|
559 |
+
}
|
560 |
+
break;
|
561 |
+
|
562 |
+
// record index and value
|
563 |
+
default:
|
564 |
+
if($in_value)
|
565 |
+
$value_str .= $json_str[$i];
|
566 |
+
else if($in_index)
|
567 |
+
$index_str .= $json_str[$i];
|
568 |
+
}
|
569 |
+
}
|
570 |
+
}
|
571 |
+
|
572 |
+
return array(-1,$json_array);
|
573 |
+
}
|
574 |
+
|
575 |
+
// Get the timestamp of the start date
|
576 |
+
function get_start_date($values,$min_date = '')
|
577 |
+
{
|
578 |
+
// set default to 30 days ago
|
579 |
+
if(empty($min_date))
|
580 |
+
$min_date = 30;
|
581 |
+
|
582 |
+
if(!empty($values['sdate']))
|
583 |
+
{
|
584 |
+
$sdate = explode("-",$values['sdate']);
|
585 |
+
$start_timestamp = mktime(0,0,0,$sdate[1],$sdate[2],$sdate[0]);
|
586 |
+
}
|
587 |
+
else
|
588 |
+
$start_timestamp = time()-60*60*24*(int)$min_date;
|
589 |
+
|
590 |
+
return $start_timestamp;
|
591 |
+
}
|
592 |
+
|
593 |
+
// Get the timestamp of the end date
|
594 |
+
function get_end_date($values)
|
595 |
+
{
|
596 |
+
if(!empty($values['edate']))
|
597 |
+
{
|
598 |
+
$edate = explode("-",$values['edate']);
|
599 |
+
$end_timestamp = mktime(0,0,0,$edate[1],$edate[2],$edate[0]);
|
600 |
+
}
|
601 |
+
else
|
602 |
+
$end_timestamp = time();
|
603 |
+
|
604 |
+
return $end_timestamp;
|
605 |
+
}
|
606 |
+
|
607 |
+
function prepend_and_or_where( $starts_with = ' WHERE', $where = '' )
|
608 |
+
{
|
609 |
+
return (( $where == '' )?'':$starts_with . $where);
|
610 |
+
}
|
611 |
+
|
612 |
+
// Determines whether or not Pretty Link Pro is installed and activated
|
613 |
+
function pro_is_installed()
|
614 |
+
{
|
615 |
+
$activated = get_option('prlipro_activated');
|
616 |
+
|
617 |
+
if(!$activated)
|
618 |
+
{
|
619 |
+
$username = get_option( 'prlipro_username' );
|
620 |
+
$password = get_option( 'prlipro_password' );
|
621 |
+
|
622 |
+
if($username and $password)
|
623 |
+
{
|
624 |
+
$user_type = $this->get_pro_user_type($username, $password);
|
625 |
+
|
626 |
+
if(!empty($user_type))
|
627 |
+
{
|
628 |
+
// Tells us that Pro has been activated
|
629 |
+
delete_option('prlipro_activated');
|
630 |
+
add_option('prlipro_activated',1);
|
631 |
+
|
632 |
+
$activated = true;
|
633 |
+
}
|
634 |
+
}
|
635 |
+
}
|
636 |
+
|
637 |
+
|
638 |
+
return ( $activated and $this->pro_files_installed() );
|
639 |
+
}
|
640 |
+
|
641 |
+
function pro_files_installed()
|
642 |
+
{
|
643 |
+
return file_exists(PRLI_PATH . "/pro/pretty-link-pro.php");
|
644 |
+
}
|
645 |
+
|
646 |
+
function get_pro_version()
|
647 |
+
{
|
648 |
+
if($this->pro_is_installed())
|
649 |
+
{
|
650 |
+
require_once(PRLI_PATH . "/pro/prlipro-config.php");
|
651 |
+
global $prlipro_version;
|
652 |
+
|
653 |
+
return $prlipro_version;
|
654 |
+
}
|
655 |
+
else
|
656 |
+
return 0;
|
657 |
+
}
|
658 |
+
|
659 |
+
function get_pro_user_type($username, $password)
|
660 |
+
{
|
661 |
+
include_once(ABSPATH."wp-includes/class-IXR.php");
|
662 |
+
|
663 |
+
$client = new IXR_Client('http://prettylinkpro.com/xmlrpc.php');
|
664 |
+
|
665 |
+
if (!$client->query('prlipro.get_user_type',$username,$password))
|
666 |
+
return false;
|
667 |
+
|
668 |
+
$type = $client->getResponse();
|
669 |
+
|
670 |
+
return $type;
|
671 |
+
}
|
672 |
+
|
673 |
+
function download_and_install_pro($username, $password, $force = false)
|
674 |
+
{
|
675 |
+
global $prli_version, $wpdb;
|
676 |
+
|
677 |
+
include_once(ABSPATH."wp-includes/class-IXR.php");
|
678 |
+
|
679 |
+
$client = new IXR_Client('http://prettylinkpro.com/xmlrpc.php');
|
680 |
+
$user_type = $this->get_pro_user_type($username, $password);
|
681 |
+
|
682 |
+
if(!empty($user_type))
|
683 |
+
{
|
684 |
+
if($force or !$this->pro_files_installed())
|
685 |
+
{
|
686 |
+
// Test to make sure this sheesh is writeable
|
687 |
+
$handle = fopen(PRLI_PATH . '/098j1248iomv.txt', 'w');
|
688 |
+
if(!$handle)
|
689 |
+
{
|
690 |
+
return "Your account was validated but " . PRLI_PATH . " is not writeable<br/>Talk to your webhost about increasing your write permissions or install using the <a href=\"http://prettylinkpro.com/user-manual/pretty-link-pro-manual-installation/\">Manual Install</a> Process";
|
691 |
+
}
|
692 |
+
else
|
693 |
+
{
|
694 |
+
fclose($handle);
|
695 |
+
unlink(PRLI_PATH . '/098j1248iomv.txt');
|
696 |
+
}
|
697 |
+
|
698 |
+
// Get the file
|
699 |
+
if (!$client->query('prlipro.download_upgrade_file',$username,$password,$prli_version))
|
700 |
+
return $client->getErrorCode() . ": " . $client->getErrorMessage();
|
701 |
+
|
702 |
+
$zipfile_str = $client->getResponse();
|
703 |
+
|
704 |
+
$zipfilename = PRLI_PATH . "/pretty-link-pro-{$prli_version}.zip";
|
705 |
+
|
706 |
+
// Write the transferred string out as a file
|
707 |
+
$fh = fopen($zipfilename, 'w');
|
708 |
+
fwrite($fh, $zipfile_str);
|
709 |
+
fclose($fh);
|
710 |
+
|
711 |
+
// Unzip the file
|
712 |
+
include_once(ABSPATH.'wp-admin/includes/class-pclzip.php');
|
713 |
+
$prlipro_path = PRLI_PATH . '/pro';
|
714 |
+
|
715 |
+
// unlink pro directory if force is set to true
|
716 |
+
if($force)
|
717 |
+
$this->delete_dir($prlipro_path);
|
718 |
+
|
719 |
+
$archive = new PclZip($zipfilename);
|
720 |
+
if( !($archive_files = $archive->extract( PCLZIP_OPT_PATH, PRLI_PATH ) ) )
|
721 |
+
return("Unzip Error : ".$archive->errorInfo(true));
|
722 |
+
|
723 |
+
// Unlink the zip file
|
724 |
+
unlink($zipfilename);
|
725 |
+
}
|
726 |
+
|
727 |
+
$this->install_pro_db();
|
728 |
+
|
729 |
+
// Delete all Pro Keyword Caches if they exist
|
730 |
+
$postmeta_table = "{$wpdb->prefix}postmeta";
|
731 |
+
$query = $wpdb->prepare("DELETE FROM {$postmeta_table} WHERE meta_key=%s", 'prli-keyword-cached-content');
|
732 |
+
$wpdb->query($query);
|
733 |
+
|
734 |
+
// Tells us that Pro has been activated
|
735 |
+
delete_option('prlipro_activated');
|
736 |
+
add_option('prlipro_activated',1);
|
737 |
+
}
|
738 |
+
else
|
739 |
+
return("Your Username and/or Password are not valid");
|
740 |
+
|
741 |
+
return 'SUCCESS';
|
742 |
+
}
|
743 |
+
|
744 |
+
function uninstall_pro()
|
745 |
+
{
|
746 |
+
$prlipro_path = PRLI_PATH . '/pro';
|
747 |
+
|
748 |
+
// unlink pro directory
|
749 |
+
$this->delete_dir($prlipro_path);
|
750 |
+
|
751 |
+
delete_option( 'prlipro_activated' );
|
752 |
+
delete_option( 'prlipro_username' );
|
753 |
+
delete_option( 'prlipro_password' );
|
754 |
+
|
755 |
+
// Yah- I just leave the pro database tables & data hanging
|
756 |
+
// around in case you want to re-install it at some point
|
757 |
+
}
|
758 |
+
|
759 |
+
function install_pro_db()
|
760 |
+
{
|
761 |
+
global $wpdb;
|
762 |
+
|
763 |
+
$upgrade_path = ABSPATH . 'wp-admin/includes/upgrade.php';
|
764 |
+
require_once($upgrade_path);
|
765 |
+
|
766 |
+
// Pretty Link Pro Tables
|
767 |
+
$tweets_table = "{$wpdb->prefix}prli_tweets";
|
768 |
+
$keywords_table = "{$wpdb->prefix}prli_keywords";
|
769 |
+
$reports_table = "{$wpdb->prefix}prli_reports";
|
770 |
+
$report_links_table = "{$wpdb->prefix}prli_report_links";
|
771 |
+
$link_rotations_table = "{$wpdb->prefix}prli_link_rotations";
|
772 |
+
$clicks_rotations_table = "{$wpdb->prefix}prli_clicks_rotations";
|
773 |
+
|
774 |
+
/* Create/Upgrade Tweets Table */
|
775 |
+
$sql = "CREATE TABLE {$tweets_table} (
|
776 |
+
id int(11) NOT NULL auto_increment,
|
777 |
+
twid varchar(255) NOT NULL,
|
778 |
+
tw_text varchar(255) default NULL,
|
779 |
+
tw_to_user_id varchar(255) default NULL,
|
780 |
+
tw_from_user varchar(255) default NULL,
|
781 |
+
tw_from_user_id varchar(255) NOT NULL,
|
782 |
+
tw_iso_language_code varchar(255) default NULL,
|
783 |
+
tw_source varchar(255) default NULL,
|
784 |
+
tw_profile_image_url varchar(255) default NULL,
|
785 |
+
tw_created_at varchar(255) NOT NULL,
|
786 |
+
created_at datetime NOT NULL,
|
787 |
+
link_id int(11) default NULL,
|
788 |
+
PRIMARY KEY (id),
|
789 |
+
KEY link_id (link_id),
|
790 |
+
KEY twid (twid)
|
791 |
+
);";
|
792 |
+
|
793 |
+
dbDelta($sql);
|
794 |
+
|
795 |
+
/* Create/Upgrade Keywords Table */
|
796 |
+
$sql = "CREATE TABLE {$keywords_table} (
|
797 |
+
id int(11) NOT NULL auto_increment,
|
798 |
+
text varchar(255) NOT NULL,
|
799 |
+
link_id int(11) NOT NULL,
|
800 |
+
created_at datetime NOT NULL,
|
801 |
+
PRIMARY KEY (id),
|
802 |
+
KEY link_id (link_id)
|
803 |
+
);";
|
804 |
+
|
805 |
+
dbDelta($sql);
|
806 |
+
|
807 |
+
/* Create/Upgrade Reports Table */
|
808 |
+
$sql = "CREATE TABLE {$reports_table} (
|
809 |
+
id int(11) NOT NULL auto_increment,
|
810 |
+
name varchar(255) NOT NULL,
|
811 |
+
goal_link_id int(11) default NULL,
|
812 |
+
created_at datetime NOT NULL,
|
813 |
+
PRIMARY KEY (id),
|
814 |
+
KEY goal_link_id (goal_link_id)
|
815 |
+
);";
|
816 |
+
|
817 |
+
dbDelta($sql);
|
818 |
+
|
819 |
+
/* Create/Upgrade Reports Table */
|
820 |
+
$sql = "CREATE TABLE {$report_links_table} (
|
821 |
+
id int(11) NOT NULL auto_increment,
|
822 |
+
report_id int(11) NOT NULL,
|
823 |
+
link_id int(11) NOT NULL,
|
824 |
+
created_at datetime NOT NULL,
|
825 |
+
PRIMARY KEY (id),
|
826 |
+
KEY report_id (report_id),
|
827 |
+
KEY link_id (link_id)
|
828 |
+
);";
|
829 |
+
|
830 |
+
dbDelta($sql);
|
831 |
+
|
832 |
+
/* Create/Upgrade Link Rotations Table */
|
833 |
+
$sql = "CREATE TABLE {$link_rotations_table} (
|
834 |
+
id int(11) NOT NULL auto_increment,
|
835 |
+
url varchar(255) default NULL,
|
836 |
+
weight int(11) default 0,
|
837 |
+
r_index int(11) default 0,
|
838 |
+
link_id int(11) NOT NULL,
|
839 |
+
created_at datetime NOT NULL,
|
840 |
+
PRIMARY KEY (id),
|
841 |
+
KEY link_id (link_id)
|
842 |
+
);";
|
843 |
+
|
844 |
+
dbDelta($sql);
|
845 |
+
|
846 |
+
/* Create/Upgrade Clicks / Rotations Table */
|
847 |
+
$sql = "CREATE TABLE {$clicks_rotations_table} (
|
848 |
+
id int(11) NOT NULL auto_increment,
|
849 |
+
click_id int(11) NOT NULL,
|
850 |
+
link_id int(11) NOT NULL,
|
851 |
+
url text NOT NULL,
|
852 |
+
PRIMARY KEY (id),
|
853 |
+
KEY click_id (click_id),
|
854 |
+
KEY link_id (link_id)
|
855 |
+
);";
|
856 |
+
|
857 |
+
dbDelta($sql);
|
858 |
+
}
|
859 |
+
|
860 |
+
// be careful with this one -- I use it to forceably reinstall pretty link pro
|
861 |
+
function delete_dir($dir)
|
862 |
+
{
|
863 |
+
if (!file_exists($dir))
|
864 |
+
return true;
|
865 |
+
|
866 |
+
if (!is_dir($dir))
|
867 |
+
return unlink($dir);
|
868 |
+
|
869 |
+
foreach (scandir($dir) as $item)
|
870 |
+
{
|
871 |
+
if ($item == '.' || $item == '..')
|
872 |
+
continue;
|
873 |
+
|
874 |
+
if (!$this->delete_dir($dir.DIRECTORY_SEPARATOR.$item))
|
875 |
+
return false;
|
876 |
+
}
|
877 |
+
|
878 |
+
return rmdir($dir);
|
879 |
+
}
|
880 |
+
|
881 |
+
// Used in the install procedure to migrate database columns
|
882 |
+
function migrate_before_db_upgrade()
|
883 |
+
{
|
884 |
+
global $prli_options, $prli_link, $prli_click, $wpdb;
|
885 |
+
$db_version = (int)get_option('prli_db_version');
|
886 |
+
|
887 |
+
// Migration for version 1 of the database
|
888 |
+
if(!$db_version or $db_version < 1)
|
889 |
+
{
|
890 |
+
$query = "SELECT * from {$prli_link->table_name}";
|
891 |
+
$links = $wpdb->get_results($query);
|
892 |
+
$query_str = "UPDATE {$prli_link->table_name} SET redirect_type=%s WHERE id=%d";
|
893 |
+
|
894 |
+
foreach($links as $link)
|
895 |
+
{
|
896 |
+
if(isset($link->track_as_img) and $link->track_as_img)
|
897 |
+
{
|
898 |
+
$query = $wpdb->prepare($query_str, 'pixel', $link->id);
|
899 |
+
$wpdb->query($query);
|
900 |
+
}
|
901 |
+
else if(isset($link->use_prettybar) and $link->use_prettybar)
|
902 |
+
{
|
903 |
+
$query = $wpdb->prepare($query_str, 'prettybar', $link->id);
|
904 |
+
$wpdb->query($query);
|
905 |
+
}
|
906 |
+
else if(isset($link->use_ultra_cloak) and $link->use_ultra_cloak)
|
907 |
+
{
|
908 |
+
$query = $wpdb->prepare($query_str, 'cloak', $link->id);
|
909 |
+
$wpdb->query($query);
|
910 |
+
}
|
911 |
+
}
|
912 |
+
|
913 |
+
$query = "ALTER TABLE {$prli_link->table_name} DROP COLUMN track_as_img, DROP COLUMN use_prettybar, DROP COLUMN use_ultra_cloak, DROP COLUMN gorder";
|
914 |
+
$wpdb->query($query);
|
915 |
+
}
|
916 |
+
|
917 |
+
if($db_version < 2)
|
918 |
+
{
|
919 |
+
unset($prli_options->prli_exclude_ips);
|
920 |
+
unset($prli_options->prettybar_image_url);
|
921 |
+
unset($prli_options->prettybar_background_image_url);
|
922 |
+
unset($prli_options->prettybar_color);
|
923 |
+
unset($prli_options->prettybar_text_color);
|
924 |
+
unset($prli_options->prettybar_link_color);
|
925 |
+
unset($prli_options->prettybar_hover_color);
|
926 |
+
unset($prli_options->prettybar_visited_color);
|
927 |
+
unset($prli_options->prettybar_title_limit);
|
928 |
+
unset($prli_options->prettybar_desc_limit);
|
929 |
+
unset($prli_options->prettybar_link_limit);
|
930 |
+
|
931 |
+
// Save the posted value in the database
|
932 |
+
$prli_options_str = serialize($prli_options);
|
933 |
+
|
934 |
+
// Save the posted value in the database
|
935 |
+
delete_option( 'prli_options' );
|
936 |
+
add_option( 'prli_options', $prli_options_str );
|
937 |
+
}
|
938 |
+
}
|
939 |
+
|
940 |
+
}
|
941 |
+
?>
|
classes/models/models.inc.php
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
require_once(PRLI_MODELS_PATH.'/PrliLink.php');
|
3 |
+
require_once(PRLI_MODELS_PATH.'/PrliClick.php');
|
4 |
+
require_once(PRLI_MODELS_PATH.'/PrliGroup.php');
|
5 |
+
require_once(PRLI_MODELS_PATH.'/PrliUtils.php');
|
6 |
+
require_once(PRLI_MODELS_PATH.'/PrliUrlUtils.php');
|
7 |
+
require_once(PRLI_MODELS_PATH.'/PrliLinkMeta.php');
|
8 |
+
|
9 |
+
global $prli_link;
|
10 |
+
global $prli_link_meta;
|
11 |
+
global $prli_click;
|
12 |
+
global $prli_group;
|
13 |
+
global $prli_utils;
|
14 |
+
global $prli_url_utils;
|
15 |
+
|
16 |
+
$prli_link = new PrliLink();
|
17 |
+
$prli_link_meta = new PrliLinkMeta();
|
18 |
+
$prli_click = new PrliClick();
|
19 |
+
$prli_group = new PrliGroup();
|
20 |
+
$prli_utils = new PrliUtils();
|
21 |
+
$prli_url_utils = new PrliUrlUtils();
|
22 |
+
?>
|
classes/views/prli-clicks/csv.php
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
require_once('prli-config.php');
|
3 |
+
|
4 |
+
if(is_user_logged_in() and $current_user->user_level >= 8)
|
5 |
+
{
|
6 |
+
$filename = date("ymdHis",time()) . '_' . $link_name . '_pretty_link_clicks.csv';
|
7 |
+
header("Content-Type: text/x-csv");
|
8 |
+
header("Content-Disposition: attachment; filename=\"$filename\"");
|
9 |
+
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");
|
10 |
+
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
|
11 |
+
header("Cache-Control: no-cache, must-revalidate");
|
12 |
+
header("Pragma: no-cache");
|
13 |
+
|
14 |
+
echo '"Browser","Browser Version","Platform","IP","Visitor ID","Timestamp","Host","URI","Referrer","Link"' . "\n";
|
15 |
+
foreach($clicks as $click)
|
16 |
+
{
|
17 |
+
$link = $prli_link->getOne($click->link_id);
|
18 |
+
|
19 |
+
echo "\"$click->btype\",\"$click->bversion\",\"$click->os\",\"$click->ip\",\"$click->vuid\",\"$click->created_at\",\"$click->host\",\"$click->uri\",\"$click->referer\",\"" . ((empty($link->name))?$link->slug:$link->name) . "\"\n";
|
20 |
+
}
|
21 |
+
}
|
22 |
+
else
|
23 |
+
header("Location: " . $prli_blogurl);
|
24 |
+
?>
|
classes/views/prli-clicks/head.php
ADDED
@@ -0,0 +1,105 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!-- JQuery UI Includes -->
|
2 |
+
<link type="text/css" href="<?php echo PRLI_URL; ?>/includes/jquery/css/ui-lightness/jquery-ui-1.7.1.custom.css" rel="stylesheet" />
|
3 |
+
<script type="text/javascript" src="<?php echo PRLI_URL; ?>/includes/jquery/js/jquery-1.3.2.min.js"></script>
|
4 |
+
<script type="text/javascript" src="<?php echo PRLI_URL; ?>/includes/jquery/js/jquery-ui-1.7.1.custom.min.js"></script>
|
5 |
+
|
6 |
+
<script type="text/javascript">
|
7 |
+
$(document).ready(function(){
|
8 |
+
$("#sdate").datepicker({ dateFormat: 'yy-mm-dd', defaultDate: -30, minDate: -<?php echo $min_date; ?>, maxDate: 0 });
|
9 |
+
$("#edate").datepicker({ dateFormat: 'yy-mm-dd', minDate: -<?php echo $min_date; ?>, maxDate: 0 });
|
10 |
+
});
|
11 |
+
</script>
|
12 |
+
|
13 |
+
<script type="text/javascript">
|
14 |
+
$(document).ready(function(){
|
15 |
+
$(".filter_pane").hide();
|
16 |
+
$(".filter_toggle").click( function () {
|
17 |
+
$(".filter_pane").slideToggle("slow");
|
18 |
+
});
|
19 |
+
});
|
20 |
+
</script>
|
21 |
+
|
22 |
+
<style type="text/css">
|
23 |
+
.filter_toggle {
|
24 |
+
line-height: 34px;
|
25 |
+
font-size: 14px;
|
26 |
+
font-weight: bold;
|
27 |
+
padding-bottom: 10px;
|
28 |
+
}
|
29 |
+
|
30 |
+
.filter_pane {
|
31 |
+
background-color: white;
|
32 |
+
border: 2px solid #777777;
|
33 |
+
height: 275px;
|
34 |
+
width: 600px;
|
35 |
+
padding-left: 20px;
|
36 |
+
padding-top: 10px;
|
37 |
+
}
|
38 |
+
|
39 |
+
</style>
|
40 |
+
|
41 |
+
<!-- Open Flash Chart Includes -->
|
42 |
+
<script type="text/javascript" src="<?php echo PRLI_URL; ?>/includes/version-2-kvasir/js/json/json2.js"></script>
|
43 |
+
<script type="text/javascript" src="<?php echo PRLI_URL; ?>/includes/version-2-kvasir/js/swfobject.js"></script>
|
44 |
+
<script type="text/javascript">
|
45 |
+
swfobject.embedSWF("<?php echo PRLI_URL; ?>/includes/version-2-kvasir/open-flash-chart.swf", "my_chart", "100%", "250", "9.0.0");
|
46 |
+
</script>
|
47 |
+
|
48 |
+
<script type="text/javascript">
|
49 |
+
|
50 |
+
function ofc_ready()
|
51 |
+
{
|
52 |
+
//alert('ofc_ready');
|
53 |
+
}
|
54 |
+
|
55 |
+
function open_flash_chart_data()
|
56 |
+
{
|
57 |
+
//alert( 'reading data' );
|
58 |
+
return JSON.stringify(data);
|
59 |
+
}
|
60 |
+
|
61 |
+
function findSWF(movieName) {
|
62 |
+
if (navigator.appName.indexOf("Microsoft")!= -1) {
|
63 |
+
return window[movieName];
|
64 |
+
} else {
|
65 |
+
return document[movieName];
|
66 |
+
}
|
67 |
+
}
|
68 |
+
|
69 |
+
OFC = {};
|
70 |
+
|
71 |
+
OFC.jquery = {
|
72 |
+
name: "jQuery",
|
73 |
+
version: function(src) { return $('#'+ src)[0].get_version() },
|
74 |
+
rasterize: function (src, dst) { $('#'+ dst).replaceWith(OFC.jquery.image(src)) },
|
75 |
+
image: function(src) { return "<img src='data:image/png;base64," + $('#'+src)[0].get_img_binary() + "' />"},
|
76 |
+
popup: function(src) {
|
77 |
+
var img_win = window.open('', 'Charts: Export as Image')
|
78 |
+
with(img_win.document) {
|
79 |
+
write('<html><head><title>Charts: Export as Image<\/title><\/head><body>' + OFC.jquery.image(src) + '<div>Right-Click on the above Image to Save<\/div><\/body><\/html>') }
|
80 |
+
// stop the 'loading...' message
|
81 |
+
img_win.document.close();
|
82 |
+
}
|
83 |
+
}
|
84 |
+
|
85 |
+
// Using an object as namespaces is JS Best Practice. I like the Control.XXX style.
|
86 |
+
//if (!Control) {var Control = {}}
|
87 |
+
//if (typeof(Control == "undefined")) {var Control = {}}
|
88 |
+
if (typeof(Control == "undefined")) {var Control = {OFC: OFC.jquery}}
|
89 |
+
|
90 |
+
|
91 |
+
// By default, right-clicking on OFC and choosing "save image locally" calls this function.
|
92 |
+
// You are free to change the code in OFC and call my wrapper (Control.OFC.your_favorite_save_method)
|
93 |
+
// function save_image() { alert(1); Control.OFC.popup('my_chart') }
|
94 |
+
function save_image() {
|
95 |
+
//alert(1);
|
96 |
+
OFC.jquery.popup('my_chart')
|
97 |
+
}
|
98 |
+
|
99 |
+
function moo() {
|
100 |
+
//alert(99);
|
101 |
+
};
|
102 |
+
|
103 |
+
var data = <?php echo $prli_click->setupClickLineGraph($start_timestamp,$end_timestamp,$link_id,$type,$group); ?>;
|
104 |
+
|
105 |
+
</script>
|
classes/views/prli-clicks/list.php
ADDED
@@ -0,0 +1,151 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="wrap">
|
2 |
+
<?php
|
3 |
+
require(PRLI_VIEWS_PATH.'/shared/nav.php');
|
4 |
+
?>
|
5 |
+
<h2><img src="<?php echo PRLI_URL.'/images/pretty-link-med.png'; ?>"/> Pretty Link: Hits</h2>
|
6 |
+
<span style="font-size: 14px; font-weight: bold;">For <?php echo $link_name; ?>: </span>
|
7 |
+
<?php
|
8 |
+
// Don't show this sheesh if we're displaying the vuid or ip grouping
|
9 |
+
if(empty($params['ip']) and empty($params['vuid']))
|
10 |
+
{
|
11 |
+
?>
|
12 |
+
<a href="#" style="display:inline;" class="filter_toggle">Customize Report</a>
|
13 |
+
<?php
|
14 |
+
}
|
15 |
+
?>
|
16 |
+
<?php
|
17 |
+
if(!empty($params['l']) and $params['l'] != 'all')
|
18 |
+
echo '<br/><a href="?page='. PRLI_PLUGIN_NAME .'/prli-links.php">« Back to Links</a>';
|
19 |
+
else if(!empty($params['ip']) or !empty($params['vuid']))
|
20 |
+
echo '<br/><a href="?page='. PRLI_PLUGIN_NAME .'/prli-clicks.php">« Back to Hits</a>';
|
21 |
+
|
22 |
+
if(empty($params['ip']) and empty($params['vuid']))
|
23 |
+
{
|
24 |
+
?>
|
25 |
+
|
26 |
+
|
27 |
+
<div class="filter_pane">
|
28 |
+
<form class="form-fields" name="form2" method="post" action="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI']); ?>">
|
29 |
+
<?php wp_nonce_field('prli-reports'); ?>
|
30 |
+
<span>Type:</span>
|
31 |
+
<select id="type" name="type" style="display: inline;">
|
32 |
+
<option value="all"<?php print ((empty($params['type']) or $params['type'] == "all")?" selected=\"true\"":""); ?>>All Hits </option>
|
33 |
+
<option value="unique"<?php print (($params['type'] == "unique")?" selected=\"true\"":""); ?>>Unique Hits </option>
|
34 |
+
</select>
|
35 |
+
<br/>
|
36 |
+
<br/>
|
37 |
+
<span>Date Range:</span>
|
38 |
+
<div id="dateselectors" style="display: inline;">
|
39 |
+
<input type="text" name="sdate" id="sdate" value="<?php echo $params['sdate']; ?>" style="display:inline;"/> to <input type="text" name="edate" id="edate" value="<?php echo $params['edate']; ?>" style="display:inline;"/>
|
40 |
+
</div>
|
41 |
+
<br/>
|
42 |
+
<br/>
|
43 |
+
<div class="submit" style="display: inline;"><input type="submit" name="Submit" value="Customize"/> or <a href="#" class="filter_toggle">Cancel</a></div>
|
44 |
+
</form>
|
45 |
+
</div>
|
46 |
+
|
47 |
+
<div id="my_chart"></div>
|
48 |
+
|
49 |
+
<?php
|
50 |
+
}
|
51 |
+
$navstyle = "float: right;";
|
52 |
+
require(PRLI_VIEWS_PATH.'/shared/table-nav.php');
|
53 |
+
?>
|
54 |
+
|
55 |
+
<div id="search_pane" style="padding-top: 5px;">
|
56 |
+
<form class="form-fields" name="click_form" method="post" action="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI']); ?>">
|
57 |
+
<?php wp_nonce_field('prli-clicks'); ?>
|
58 |
+
|
59 |
+
<input type="hidden" name="sort" id="sort" value="<?php echo $sort_str; ?>" />
|
60 |
+
<input type="hidden" name="sdir" id="sort" value="<?php echo $sdir_str; ?>" />
|
61 |
+
<input type="text" name="search" id="search" value="<?php echo $search_str; ?>" style="display:inline;"/>
|
62 |
+
<div class="submit" style="display: inline;"><input type="submit" name="Submit" value="Search Hits"/>
|
63 |
+
<?php
|
64 |
+
if(!empty($search_str))
|
65 |
+
{
|
66 |
+
?>
|
67 |
+
or <a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php<?php echo (!empty($params['l'])?'&l='.$params['l']:''); ?>">Reset</a>
|
68 |
+
<?php
|
69 |
+
}
|
70 |
+
?>
|
71 |
+
</div>
|
72 |
+
</form>
|
73 |
+
</div>
|
74 |
+
<table class="widefat post fixed" cellspacing="0">
|
75 |
+
<thead>
|
76 |
+
<tr>
|
77 |
+
<th class="manage-column" width="5%"><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php<?php echo $sort_params; ?>&sort=btype<?php echo (($sort_str == 'btype' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Browser<?php echo (($sort_str == 'btype')?' <img src="'.PRLI_URL.'/images/'.(($sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a>
|
78 |
+
</th>
|
79 |
+
<th class="manage-column" width="12%">
|
80 |
+
<a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php<?php echo $sort_params; ?>&sort=ip<?php echo (($sort_str == 'ip' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">IP<?php echo (($sort_str == 'ip')?' <img src="'.PRLI_URL.'/images/'.(($sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a>
|
81 |
+
</th>
|
82 |
+
<th class="manage-column" width="12%">
|
83 |
+
<a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php<?php echo $sort_params; ?>&sort=vuid<?php echo (($sort_str == 'vuid' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Visitor<?php echo (($sort_str == 'vuid')?' <img src="'.PRLI_URL.'/images/'.(($sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a>
|
84 |
+
</th>
|
85 |
+
<th class="manage-column" width="13%">
|
86 |
+
<a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php<?php echo $sort_params; ?>&sort=created_at<?php echo (($sort_str == 'created_at' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Timestamp<?php echo ((empty($sort_str) or $sort_str == 'created_at')?' <img src="'.PRLI_URL.'/images/'.((empty($sort_str) or $sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a>
|
87 |
+
</th>
|
88 |
+
<th class="manage-column" width="16%">
|
89 |
+
<a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php<?php echo $sort_params; ?>&sort=host<?php echo (($sort_str == 'host' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Host<?php echo (($sort_str == 'host')?' <img src="'.PRLI_URL.'/images/'.(($sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a>
|
90 |
+
</th>
|
91 |
+
<th class="manage-column" width="16%">
|
92 |
+
<a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php<?php echo $sort_params; ?>&sort=uri<?php echo (($sort_str == 'uri' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">URI<?php echo (($sort_str == 'uri')?' <img src="'.PRLI_URL.'/images/'.(($sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a>
|
93 |
+
</th>
|
94 |
+
<th class="manage-column" width="16%">
|
95 |
+
<a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php<?php echo $sort_params; ?>&sort=referer<?php echo (($sort_str == 'referer' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Referrer<?php echo (($sort_str == 'referer')?' <img src="'.PRLI_URL.'/images/'.(($sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a>
|
96 |
+
</th>
|
97 |
+
<th class="manage-column" width="13%">
|
98 |
+
<a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php<?php echo $sort_params; ?>&sort=link<?php echo (($sort_str == 'link' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Link<?php echo (($sort_str == 'link')?' <img src="'.PRLI_URL.'/images/'.(($sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a>
|
99 |
+
</th>
|
100 |
+
</tr>
|
101 |
+
</thead>
|
102 |
+
<?php
|
103 |
+
|
104 |
+
if(count($clicks) <= 0)
|
105 |
+
{
|
106 |
+
?>
|
107 |
+
<tr>
|
108 |
+
<td colspan="7">No Hits have been recorded yet</td>
|
109 |
+
</tr>
|
110 |
+
<?php
|
111 |
+
}
|
112 |
+
else
|
113 |
+
{
|
114 |
+
foreach($clicks as $click)
|
115 |
+
{
|
116 |
+
?>
|
117 |
+
<tr>
|
118 |
+
<td><img src="<?php echo PRLI_URL; ?>/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="<?php echo PRLI_URL; ?>/images/os/<?php echo prli_os_image($click->os); ?>" alt="<?php echo $click->os; ?>" title="<?php echo $click->os; ?>"/></td>
|
119 |
+
<td><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php&ip=<?php echo $click->ip; ?>" title="View All Activity for IP Address: <?php echo $click->ip; ?>"><?php echo $click->ip; ?> (<?php echo $click->ip_count; ?>)</a></td>
|
120 |
+
<td><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php&vuid=<?php echo $click->vuid; ?>" title="View All Activity for Visitor: <?php echo $click->vuid; ?>"><?php echo $click->vuid; ?><?php echo (($click->vuid != null)?" ($click->vuid_count)":''); ?></a></td>
|
121 |
+
<td><?php echo $click->created_at; ?></td>
|
122 |
+
<td><?php echo $click->host; ?></td>
|
123 |
+
<td><?php echo $click->uri; ?></td>
|
124 |
+
<td><?php echo $click->referer; ?></td>
|
125 |
+
<td><a href="?page=<?php print PRLI_PLUGIN_NAME; ?>/prli-clicks.php&l=<?php echo $click->link_id; ?>" title="View clicks for <?php echo $click->link_name; ?>"><?php echo $click->link_name; ?></a></td>
|
126 |
+
</tr>
|
127 |
+
<?php
|
128 |
+
}
|
129 |
+
}
|
130 |
+
?>
|
131 |
+
<tfoot>
|
132 |
+
<tr>
|
133 |
+
<th class="manage-column">Browser</th>
|
134 |
+
<th class="manage-column">IP</th>
|
135 |
+
<th class="manage-column">Visitor</th>
|
136 |
+
<th class="manage-column">Timestamp</th>
|
137 |
+
<th class="manage-column">Host</th>
|
138 |
+
<th class="manage-column">URI</th>
|
139 |
+
<th class="manage-column">Referrer</th>
|
140 |
+
<th class="manage-column">Link</th>
|
141 |
+
</tr>
|
142 |
+
</tfoot>
|
143 |
+
</table>
|
144 |
+
|
145 |
+
<a href="<?php echo PRLI_URL; ?>/prli-clicks.php?action=csv<?php echo $page_params; ?>">Download CSV (<?php echo $link_name; ?>)</a>
|
146 |
+
|
147 |
+
<?php
|
148 |
+
require(PRLI_VIEWS_PATH.'/shared/table-nav.php');
|
149 |
+
?>
|
150 |
+
|
151 |
+
</div>
|
classes/views/prli-dashboard-widget/widget.php
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="wrap">
|
2 |
+
<a href="http://blairwilliams.com/pretty-link"><img style="float: left; border: 0px;" src="<?php echo PRLI_URL.'/images/prettylink_logo_small.jpg'; ?>"/></a><div style="min-height: 48px;"><div style="min-height: 18px; margin-left: 137px; margin-top: 0px; padding-top: 0px; border: 1px solid #e5e597; background-color: #ffffa0; display: block;"><p style="font-size: 11px; margin:0px; padding: 0px; padding-left: 10px;"><?php echo $message; ?></p></div></div>
|
3 |
+
|
4 |
+
<form name="form1" method="post" action="?page=<?php echo PRLI_PLUGIN_NAME ?>/prli-links.php">
|
5 |
+
<input type="hidden" name="action" value="quick-create">
|
6 |
+
<?php wp_nonce_field('update-options'); ?>
|
7 |
+
|
8 |
+
<table class="form-table">
|
9 |
+
<tr class="form-field">
|
10 |
+
<td valign="top">Target URL</td>
|
11 |
+
<td><input type="text" name="url" value="" size="75">
|
12 |
+
</tr>
|
13 |
+
<tr>
|
14 |
+
<td valign="top">Pretty Link</td>
|
15 |
+
<td><strong><?php echo $prli_blogurl; ?></strong>/<input type="text" name="slug" value="<?php echo $prli_link->generateValidSlug(); ?>">
|
16 |
+
</tr>
|
17 |
+
</table>
|
18 |
+
|
19 |
+
<p class="submit">
|
20 |
+
<input type="submit" name="Submit" value="Create" />
|
21 |
+
</p>
|
22 |
+
</form>
|
23 |
+
</div>
|
classes/views/prli-groups/edit.php
ADDED
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="wrap">
|
2 |
+
<h2><img src="<?php echo PRLI_URL.'/images/pretty-link-med.png'; ?>"/> Pretty Link: Edit Group</h2>
|
3 |
+
|
4 |
+
<?php
|
5 |
+
require(PRLI_VIEWS_PATH.'/shared/errors.php');
|
6 |
+
?>
|
7 |
+
|
8 |
+
<form name="form1" method="post" action="?page=<?php echo PRLI_PLUGIN_NAME ?>/prli-groups.php">
|
9 |
+
<input type="hidden" name="action" value="update">
|
10 |
+
<input type="hidden" name="id" value="<?php echo $id; ?>">
|
11 |
+
<?php wp_nonce_field('update-options'); ?>
|
12 |
+
|
13 |
+
<table class="form-table">
|
14 |
+
<tr class="form-field">
|
15 |
+
<td width="75px" valign="top">Name: </td>
|
16 |
+
<td><input type="text" name="name" value="<?php echo htmlspecialchars(stripslashes((($_POST['name'] != null and $record == null)?$_POST['name']:$record->name))); ?>" size="75">
|
17 |
+
<br/><span class="setting-description">This is how you'll identify your Group.</span></td>
|
18 |
+
</tr>
|
19 |
+
<tr class="form-field">
|
20 |
+
<td valign="top">Description: </td>
|
21 |
+
<td><textarea style="height: 100px;" name="description"><?php echo (($_POST['description'] != null and $record == null)?$_POST['description']:$record->description); ?></textarea>
|
22 |
+
<br/><span class="setting-description">A Description of this group.</span></td>
|
23 |
+
</tr>
|
24 |
+
<tr class="form-field" valign="top">
|
25 |
+
<td valign="top">Links: </td>
|
26 |
+
<td valign="top">
|
27 |
+
<div style="height: 150px; width: 95%; border: 1px solid #8cbdd5; overflow: auto;">
|
28 |
+
<table width="100%" cellspacing="0">
|
29 |
+
<thead style="background-color: #dedede; padding: 0px; margin: 0px; line-height: 8px; font-size: 14px;">
|
30 |
+
<th style="padding-left: 5px; margin: 0px; width: 50%; min-width: 50%;"><strong>Name</strong></th>
|
31 |
+
<th style="padding-left: 5px; margin: 0px; width: 50%; min-width: 50%;"><strong>Current Group</strong></th>
|
32 |
+
</thead>
|
33 |
+
<?php
|
34 |
+
for($i = 0; $i < count($links); $i++)
|
35 |
+
{
|
36 |
+
$link = $links[$i];
|
37 |
+
?>
|
38 |
+
<tr style="line-height: 15px; font-size: 12px;<?php echo (($i%2)?' background-color: #efefef;':''); ?>">
|
39 |
+
<td style="min-width: 50%; width: 50%"><input type="checkbox" style="display:inline;width: 15px; padding: 0; margin: 0; float: left; text-align: left;" name="link[<?php echo $link->id; ?>]" <?php echo (((isset($_POST['link'][$link->id]) and $_POST['link'][$link->id] == 'on') or (empty($_POST) and $link->group_id == $record->id))?'checked="true"':''); ?>/><span> <?php echo htmlspecialchars(stripslashes($link->name)) . " <strong>(" . $link->slug . ")</strong>"; ?></span></td>
|
40 |
+
<td style="min-width: 50%; width: 50%"><?php echo htmlspecialchars(stripslashes($link->group_name)); ?></td>
|
41 |
+
</tr>
|
42 |
+
<?php
|
43 |
+
|
44 |
+
}
|
45 |
+
?>
|
46 |
+
</table>
|
47 |
+
</div>
|
48 |
+
<span class="setting-description">Select some links for this group. <strong>Note: each link can only be in one group at a time.</strong></span></td>
|
49 |
+
</td>
|
50 |
+
</tr>
|
51 |
+
</table>
|
52 |
+
|
53 |
+
<p class="submit">
|
54 |
+
<input type="submit" name="Submit" value="Update" /> or <a href="?page=<?php echo PRLI_PLUGIN_NAME ?>/prli-groups.php">Cancel</a>
|
55 |
+
</p>
|
56 |
+
|
57 |
+
</form>
|
58 |
+
</div>
|
classes/views/prli-groups/head.php
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<script type="text/javascript" src="<?php echo PRLI_URL; ?>/includes/jquery/js/jquery-1.3.2.min.js"></script>
|
2 |
+
<script type="text/javascript">
|
3 |
+
jQuery(document).ready(function() {
|
4 |
+
jQuery('.group_actions').hide();
|
5 |
+
jQuery('.edit_group').hover(
|
6 |
+
function() {
|
7 |
+
jQuery(this).children(".group_actions").show();
|
8 |
+
},
|
9 |
+
function() {
|
10 |
+
jQuery(this).children(".group_actions").hide();
|
11 |
+
}
|
12 |
+
);
|
13 |
+
});
|
14 |
+
</script>
|
15 |
+
|
16 |
+
<style type="text/css">
|
17 |
+
|
18 |
+
.advanced_toggle {
|
19 |
+
line-height: 34px;
|
20 |
+
font-size: 12px;
|
21 |
+
font-weight: bold;
|
22 |
+
padding-bottom: 10px;
|
23 |
+
}
|
24 |
+
|
25 |
+
.edit_group {
|
26 |
+
height: 50px;
|
27 |
+
}
|
28 |
+
.group_name {
|
29 |
+
font-size: 12px;
|
30 |
+
font-weight: bold;
|
31 |
+
}
|
32 |
+
.group_actions {
|
33 |
+
padding-top: 5px;
|
34 |
+
}
|
35 |
+
</style>
|
classes/views/prli-groups/list.php
ADDED
@@ -0,0 +1,88 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="wrap">
|
2 |
+
<?php
|
3 |
+
require(PRLI_VIEWS_PATH.'/shared/nav.php');
|
4 |
+
?>
|
5 |
+
<h2><img src="<?php echo PRLI_URL.'/images/pretty-link-med.png'; ?>"/> Pretty Link: Groups</h2>
|
6 |
+
<div id="message" class="updated fade" style="padding:5px;"><?php echo $prli_message; ?></div>
|
7 |
+
<div id="search_pane" style="float: right;">
|
8 |
+
<form class="form-fields" name="group_form" method="post" action="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI']); ?>">
|
9 |
+
<?php wp_nonce_field('prli-groups'); ?>
|
10 |
+
<input type="hidden" name="sort" id="sort" value="<?php echo $sort_str; ?>" />
|
11 |
+
<input type="hidden" name="sdir" id="sort" value="<?php echo $sdir_str; ?>" />
|
12 |
+
<input type="text" name="search" id="search" value="<?php echo $search_str; ?>" style="display:inline;"/>
|
13 |
+
<div class="submit" style="display: inline;"><input type="submit" name="Submit" value="Search"/>
|
14 |
+
<?php
|
15 |
+
if(!empty($search_str))
|
16 |
+
{
|
17 |
+
?>
|
18 |
+
or <a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-groups.php">Reset</a>
|
19 |
+
<?php
|
20 |
+
}
|
21 |
+
?>
|
22 |
+
</div>
|
23 |
+
</form>
|
24 |
+
</div>
|
25 |
+
<div id="button_bar">
|
26 |
+
<p><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-groups.php&action=new">Add a Pretty Link Group</a></p>
|
27 |
+
</div>
|
28 |
+
|
29 |
+
<?php
|
30 |
+
require(PRLI_VIEWS_PATH.'/shared/table-nav.php');
|
31 |
+
?>
|
32 |
+
<table class="widefat post fixed" cellspacing="0">
|
33 |
+
<thead>
|
34 |
+
<tr>
|
35 |
+
<th class="manage-column" width="50%"><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-groups.php&sort=name<?php echo (($sort_str == 'name' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Name<?php echo (($sort_str == 'name')?' <img src="'.PRLI_URL.'/images/'.(($sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a></th>
|
36 |
+
<th class="manage-column" width="10%"><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-groups.php&sort=click_count<?php echo (($sort_str == 'click_count' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Hits<?php echo (($sort_str == 'click_count')?' <img src="'.PRLI_URL.'/images/'.(($sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a></th>
|
37 |
+
<th class="manage-column" width="10%"><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-groups.php&sort=link_count<?php echo (($sort_str == 'link_count' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Links<?php echo (($sort_str == 'link_count')?' <img src="'.PRLI_URL.'/images/'.(($sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a></th>
|
38 |
+
<th class="manage-column" width="30%"><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-groups.php&sort=created_at<?php echo (($sort_str == 'created_at' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Created<?php echo ((empty($sort_str) or $sort_str == 'created_at')?' <img src="'.PRLI_URL.'/images/'.((empty($sort_str) or $sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a></th>
|
39 |
+
</tr>
|
40 |
+
</thead>
|
41 |
+
<?php
|
42 |
+
|
43 |
+
if($record_count <= 0)
|
44 |
+
{
|
45 |
+
?>
|
46 |
+
<tr>
|
47 |
+
<td colspan="5">No Pretty Link Groups were found</td>
|
48 |
+
</tr>
|
49 |
+
<?php
|
50 |
+
}
|
51 |
+
else
|
52 |
+
{
|
53 |
+
foreach($groups as $group)
|
54 |
+
{
|
55 |
+
?>
|
56 |
+
<tr>
|
57 |
+
<td class="edit_group">
|
58 |
+
<a class="group_name" href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-groups.php&action=edit&id=<?php echo $group->id; ?>" title="Edit <?php echo htmlspecialchars(stripslashes($group->name)); ?>"><?php echo htmlspecialchars(stripslashes($group->name)); ?></a>
|
59 |
+
<br/>
|
60 |
+
<div class="group_actions">
|
61 |
+
<a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-groups.php&action=edit&id=<?php echo $group->id; ?>" title="Edit <?php echo htmlspecialchars(stripslashes($group->name)); ?>">Edit</a> |
|
62 |
+
<a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-groups.php&action=destroy&id=<?php echo $group->id; ?>" onclick="return confirm('Are you sure you want to delete your <?php echo htmlspecialchars(stripslashes($group->name)); ?> Pretty Link Group?');" title="Delete <?php echo htmlspecialchars(stripslashes($group->name)); ?>">Delete</a> |
|
63 |
+
<a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-links.php&group=<?php echo $group->id; ?>" title="View links in <?php echo htmlspecialchars(stripslashes($group->name)); ?>">Links</a> |
|
64 |
+
<a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php&group=<?php echo $group->id; ?>" title="View hits in <?php echo htmlspecialchars(stripslashes($group->name)); ?>">Hits</a>
|
65 |
+
</div>
|
66 |
+
</td>
|
67 |
+
<td><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php&group=<?php echo $group->id; ?>" title="View hits in <?php echo htmlspecialchars(stripslashes($group->name)); ?>"><?php echo $group->click_count; ?></a></td>
|
68 |
+
<td><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-links.php&group=<?php echo $group->id; ?>" title="View links in <?php echo htmlspecialchars(stripslashes($group->name)); ?>"><?php echo $group->link_count; ?></a></td>
|
69 |
+
<td><?php echo $group->created_at; ?></td>
|
70 |
+
</tr>
|
71 |
+
<?php
|
72 |
+
}
|
73 |
+
}
|
74 |
+
?>
|
75 |
+
<tfoot>
|
76 |
+
<tr>
|
77 |
+
<th class="manage-column">Name</th>
|
78 |
+
<th class="manage-column">Hits</th>
|
79 |
+
<th class="manage-column">Links</th>
|
80 |
+
<th class="manage-column">Created</th>
|
81 |
+
</tr>
|
82 |
+
</tfoot>
|
83 |
+
</table>
|
84 |
+
<?php
|
85 |
+
require(PRLI_VIEWS_PATH.'/shared/table-nav.php');
|
86 |
+
?>
|
87 |
+
|
88 |
+
</div>
|
classes/views/prli-groups/new.php
ADDED
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="wrap">
|
2 |
+
<h2><img src="<?php echo PRLI_URL.'/images/pretty-link-med.png'; ?>"/> Pretty Link: Add Group</h2>
|
3 |
+
|
4 |
+
<?php
|
5 |
+
require(PRLI_VIEWS_PATH.'/shared/errors.php');
|
6 |
+
?>
|
7 |
+
|
8 |
+
<form name="form1" method="post" action="?page=<?php echo PRLI_PLUGIN_NAME ?>/prli-groups.php">
|
9 |
+
<input type="hidden" name="action" value="create">
|
10 |
+
<?php wp_nonce_field('update-options'); ?>
|
11 |
+
<input type="hidden" name="id" value="<?php echo $id; ?>">
|
12 |
+
|
13 |
+
<table class="form-table">
|
14 |
+
<tr class="form-field">
|
15 |
+
<td width="75px" valign="top">Name*: </td>
|
16 |
+
<td><input type="text" name="name" value="<?php echo (($_POST['name'] != null)?$_POST['name']:''); ?>" size="75">
|
17 |
+
<br/><span class="setting-description">This is how you'll identify your Group.</span></td>
|
18 |
+
</tr>
|
19 |
+
<tr class="form-field">
|
20 |
+
<td valign="top">Description: </td>
|
21 |
+
<td><textarea style="height: 100px;" name="description"><?php echo (($_POST['description'] != null)?$_POST['description']:''); ?></textarea>
|
22 |
+
<br/><span class="setting-description">A Description of this group.</span></td>
|
23 |
+
</tr>
|
24 |
+
<tr class="form-field" valign="top">
|
25 |
+
<td valign="top">Links: </td>
|
26 |
+
<td valign="top">
|
27 |
+
<div style="height: 150px; width: 95%; border: 1px solid #8cbdd5; overflow: auto;">
|
28 |
+
<table width="100%" cellspacing="0">
|
29 |
+
<thead style="background-color: #dedede; padding: 0px; margin: 0px; line-height: 8px; font-size: 14px;">
|
30 |
+
<th width="50%" style="padding-left: 5px; margin: 0px;"><strong>Name</strong></th>
|
31 |
+
<th width="50%" style="padding-left: 5px; margin: 0px;"><strong>Current Group</strong></th>
|
32 |
+
</thead>
|
33 |
+
<?php
|
34 |
+
for($i = 0; $i < count($links); $i++)
|
35 |
+
{
|
36 |
+
$link = $links[$i];
|
37 |
+
?>
|
38 |
+
<tr style="line-height: 15px; font-size: 12px;<?php echo (($i%2)?' background-color: #efefef;':''); ?>">
|
39 |
+
<td style="min-width: 50%; width: 50%;"><input type="checkbox" style="width: 15px;" name="link[<?php echo $link->id; ?>]" <?php echo ((isset($_POST['link'][$link->id]) and $_POST['link'][$link->id] == 'on')?'checked="true"':''); ?>/> <?php echo htmlspecialchars(stripslashes($link->name)) . " <strong>(" . $link->slug . ")</strong>"; ?></td>
|
40 |
+
<td style="min-width: 50%; width: 50%;"><?php echo htmlspecialchars(stripslashes($link->group_name)); ?></td>
|
41 |
+
</tr>
|
42 |
+
<?php
|
43 |
+
|
44 |
+
}
|
45 |
+
?>
|
46 |
+
</table>
|
47 |
+
</div>
|
48 |
+
<span class="setting-description">Select some links for this group. <strong>Note: each link can only be in one group at a time.</strong></span></td>
|
49 |
+
</td>
|
50 |
+
</tr>
|
51 |
+
</table>
|
52 |
+
</div>
|
53 |
+
|
54 |
+
<p class="submit">
|
55 |
+
<input type="submit" name="Submit" value="Create" /> or <a href="?page=<?php echo PRLI_PLUGIN_NAME ?>/prli-groups.php">Cancel</a>
|
56 |
+
</p>
|
57 |
+
|
58 |
+
</form>
|
59 |
+
</div>
|
classes/views/prli-links/bar.php
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
+
<html>
|
3 |
+
<head>
|
4 |
+
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
5 |
+
<title><?php echo htmlspecialchars(stripslashes($pretty_link->name)); ?></title>
|
6 |
+
</head>
|
7 |
+
<frameset rows="66,*" framespacing=0 frameborder=0>
|
8 |
+
<frame src="<?php echo PRLI_URL . "/pretty-bar.php?slug=".$pretty_link->slug . "&url=".urlencode($pretty_link_url.$param_string); ?>" noresize frameborder=0 scrolling=no marginwidth=0 marginheight=0 style="">
|
9 |
+
<frame src="<?php echo $pretty_link_url.$param_string; ?>" frameborder=0 marginwidth=0 marginheight=0>
|
10 |
+
<noframes>Your browser does not support frames. Click <a href="<?php echo $pretty_link_url.$param_string; ?>">here</a> to view the page.</noframes>
|
11 |
+
</frameset>
|
12 |
+
</html>
|
classes/views/prli-links/edit.php
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 echo PRLI_PLUGIN_NAME ?>/prli-links.php">
|
9 |
+
<input type="hidden" name="action" value="update">
|
10 |
+
<input type="hidden" name="id" value="<?php echo $id; ?>">
|
11 |
+
<?php wp_nonce_field('update-options'); ?>
|
12 |
+
|
13 |
+
<?php
|
14 |
+
require(PRLI_VIEWS_PATH.'/prli-links/form.php');
|
15 |
+
?>
|
16 |
+
|
17 |
+
<p class="submit">
|
18 |
+
<input type="submit" name="Submit" value="Update" /> or <a href="?page=<?php echo PRLI_PLUGIN_NAME ?>/prli-links.php">Cancel</a>
|
19 |
+
</p>
|
20 |
+
|
21 |
+
</form>
|
22 |
+
</div>
|
classes/views/prli-links/form.php
ADDED
@@ -0,0 +1,94 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<table class="form-table">
|
2 |
+
<tr class="form-field">
|
3 |
+
<td width="75px" valign="top">Target URL*: </td>
|
4 |
+
<td><textarea style="height: 50px;" name="url"><?php echo $values['url']; ?></textarea>
|
5 |
+
<a class="toggle"> [?]</a>
|
6 |
+
<span class="description toggle_pane"><br/>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>
|
7 |
+
</tr>
|
8 |
+
<tr>
|
9 |
+
<td valign="top">Pretty Link*: </td>
|
10 |
+
<td><strong><?php echo $prli_blogurl; ?></strong>/<input type="text" name="slug" value="<?php echo $values['slug']; ?>" size="25">
|
11 |
+
<a class="toggle"> [?]</a>
|
12 |
+
<span class="toggle_pane description"><br/>Enter the slug (word trailing your main URL) that will form your pretty link and redirect to the URL above.</span></td>
|
13 |
+
</tr>
|
14 |
+
<tr class="form-field">
|
15 |
+
<td width="75px" valign="top">Title: </td>
|
16 |
+
<td><input type="text" name="name" size="75" value="<?php echo $values['name']; ?>" />
|
17 |
+
<a class="toggle"> [?]</a>
|
18 |
+
<span class="description toggle_pane"><br/>This will act as the title of your Pretty Link. If a name is not entered here then the slug name will be used.</span></td>
|
19 |
+
</tr>
|
20 |
+
<tr class="form-field">
|
21 |
+
<td valign="top">Description: </td>
|
22 |
+
<td><textarea style="height: 50px;" name="description"><?php echo $values['description']; ?></textarea>
|
23 |
+
</select><a class="toggle"> [?]</a>
|
24 |
+
<span class="toggle_pane description"><br/>A Description of this link.</span></td>
|
25 |
+
</tr>
|
26 |
+
</table>
|
27 |
+
<h3><a class="options-table-toggle">Link Options <span class="expand-options" style="display: none;">[+]</span><span class="collapse-options">[-]</span></a> <span class="expand-collapse" style="display: none"><a class="expand-all" title="Show all option instructions."> [?]</a><a class="collapse-all" title="Hide all option instructions." style="display: none;"> [?]</a></span></h3>
|
28 |
+
<table class="options-table">
|
29 |
+
<tr>
|
30 |
+
<td valign="top" width="50%">
|
31 |
+
<h3>Group </h3>
|
32 |
+
<div class="pane">
|
33 |
+
<select name="group_id" style="padding: 0px; margin: 0px;">
|
34 |
+
<option>None</option>
|
35 |
+
<?php
|
36 |
+
foreach($values['groups'] as $group)
|
37 |
+
{
|
38 |
+
?>
|
39 |
+
<option value="<?php echo $group['id']; ?>"<?php echo $group['value']; ?>><?php echo $group['name']; ?> </option>
|
40 |
+
<?php
|
41 |
+
}
|
42 |
+
?>
|
43 |
+
</select><a class="toggle"> [?]</a>
|
44 |
+
<div class="toggle_pane description">Select a group for this link.</div>
|
45 |
+
</div>
|
46 |
+
<br/>
|
47 |
+
<h3>Redirection Type </h3>
|
48 |
+
<div class="pane">
|
49 |
+
<select id="redirect_type" name="redirect_type" style="padding: 0px; margin: 0px;">
|
50 |
+
<option value="307"<?php echo $values['redirect_type']['307']; ?>>307 (Temporary) </option>
|
51 |
+
<option value="301"<?php echo $values['redirect_type']['301']; ?>>301 (Permanent) </option>
|
52 |
+
<option value="prettybar"<?php echo $values['redirect_type']['prettybar']; ?>>Pretty Bar </option>
|
53 |
+
<option value="cloak"<?php echo $values['redirect_type']['cloak']; ?>>Cloaked </option>
|
54 |
+
<option value="pixel"<?php echo $values['redirect_type']['pixel']; ?>>Pixel </option>
|
55 |
+
</select><a class="toggle"> [?]</a>
|
56 |
+
<div class="toggle_pane description"><strong>307 Redirection</strong> is the best option if your Target URL could possibly change or need accurate reporting for this link.<br/><br/><strong>301 Redirection</strong> is the best option if you're <strong>NOT</strong> planning on changing your Target URL. Traditionally this option is considered to be the best approach to use for your SEO/SEM efforts but since Pretty Link uses your domain name either way this notion isn't necessarily true for Pretty Links. Also, this option may not give you accurate reporting since proxy and caching servers may go directly to your Target URL once it's cached.<br/><br/><strong>Pretty Bar Redirection</strong> is the best option if you want to show the Pretty Bar at the top of the page when redirecting to the Target URL.<br/><br/><strong>Cloak Redirection</strong> is the best option if you don't want your Target URL to be visible even after the redirection. This way, if a Target URL doesn't redirect to a URL you want to show then this will mask it.<br/><br/><strong>Pixel Redirection</strong> is the option you should select if you want this link to behave like a tracking pixel 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 $prli_blogurl . "/yourslug"; ?>" /></code>) then the page load will be tracked as a click and then displayed. Note: If this option is selected your Target URL will simply be ignored if there's a value in it.</div>
|
57 |
+
</div>
|
58 |
+
<br/>
|
59 |
+
<h3>SEO Options</h3>
|
60 |
+
<div class="pane">
|
61 |
+
<input type="checkbox" name="nofollow" <?php echo $values['nofollow']; ?>/> 'Nofollow' this Link <a class="toggle"> [?]</a>
|
62 |
+
<div class="toggle_pane description">Select this if you want to add a nofollow code to this link. A nofollow will prevent reputable spiders and robots from following or indexing this link.</div>
|
63 |
+
</div>
|
64 |
+
</td>
|
65 |
+
<td valign="top" width="50%">
|
66 |
+
<h3>Tracking Options</h3>
|
67 |
+
<div class="pane">
|
68 |
+
<input type="checkbox" name="track_me" <?php echo $values['track_me']; ?>/> Track this Link <a class="toggle"> [?]</a>
|
69 |
+
<div class="toggle_pane description">De-select this option if you don't want this link tracked. If de-selected, this link will still redirect to the target URL but hits on it won't be recorded in the database.</div>
|
70 |
+
</div>
|
71 |
+
<br/>
|
72 |
+
<a name="param_forwarding_pos" height="0"></a>
|
73 |
+
<h3>Parameter Forwarding</h3>
|
74 |
+
<ul style="list-style-type: none" class="pane">
|
75 |
+
<li>
|
76 |
+
<input type="radio" name="param_forwarding" value="off" <?php echo $values['param_forwarding']['off']; ?>/> Forward Parameters Off <a class="toggle"> [?]</a>
|
77 |
+
<div class="toggle_pane description">You may want to leave this option off if you don't need to forward any parameters on to your Target URL.</div>
|
78 |
+
</li>
|
79 |
+
<li>
|
80 |
+
<input type="radio" name="param_forwarding" value="on" <?php echo $values['param_forwarding']['on']; ?> /> Standard Parameter Forwarding <a class="toggle"> [?]</a>
|
81 |
+
<div class="toggle_pane description">Select this option if you want to forward parameters through your pretty link to your Target URL. This will allow you to pass parameters in the standard syntax for example the pretty link <code>http://yoururl.com/coollink?product_id=4&sku=5441</code> will forward to the target URL and append the same parameters like so: <code>http://anotherurl.com?product_id=4&sku=5441</code>.</div>
|
82 |
+
</li>
|
83 |
+
<li>
|
84 |
+
<input type="radio" name="param_forwarding" value="custom" <?php echo $values['param_forwarding']['custom']; ?> /> Custom Parameter Forwarding <input type="text" name="param_struct" value="<?php echo $values['param_struct'] ?>" size="25"/> <a class="toggle"> [?]</a>
|
85 |
+
<div class="toggle_pane description">Select this option if you want to forward parameters through your Pretty Link to your Target URL and write the parameters in a custom format. For example, say I wanted to to have my links look like this: <code>http://yourdomain.com/products/14/4</code> and I wanted this to forward to <code>http://anotherurl.com?product_id=14&dock=4</code> you'd just select this option and enter the following string into the text field <code>/products/%product_id%/%dock%</code>. This will tell Pretty Link where each variable will be located in the URL and what each variable name is.</div>
|
86 |
+
</li>
|
87 |
+
</ul>
|
88 |
+
</td>
|
89 |
+
</tr>
|
90 |
+
</table>
|
91 |
+
<?php
|
92 |
+
// Add stuff to the form here
|
93 |
+
do_action('prli_link_fields',$id);
|
94 |
+
?>
|
classes/views/prli-links/head.php
ADDED
@@ -0,0 +1,91 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<script type="text/javascript">
|
2 |
+
jQuery(document).ready(function() {
|
3 |
+
jQuery('.link_actions').hide();
|
4 |
+
jQuery('.edit_link').hover(
|
5 |
+
function() {
|
6 |
+
jQuery(this).children(".link_actions").show();
|
7 |
+
},
|
8 |
+
function() {
|
9 |
+
jQuery(this).children(".link_actions").hide();
|
10 |
+
}
|
11 |
+
);
|
12 |
+
|
13 |
+
jQuery(".options-table").hide();
|
14 |
+
jQuery(".options-table-toggle > .expand-options").show();
|
15 |
+
jQuery(".options-table-toggle > .collapse-options").hide();
|
16 |
+
jQuery(".options-table-toggle").click( function () {
|
17 |
+
jQuery(this).children(".expand-options").toggle();
|
18 |
+
jQuery(this).children(".collapse-options").toggle();
|
19 |
+
jQuery(".expand-collapse").toggle();
|
20 |
+
jQuery(".options-table").toggle();
|
21 |
+
});
|
22 |
+
|
23 |
+
jQuery(".toggle_pane").hide();
|
24 |
+
jQuery(".toggle").click( function () {
|
25 |
+
jQuery(this).next(".toggle_pane").toggle();
|
26 |
+
});
|
27 |
+
jQuery(".expand-all").click( function () {
|
28 |
+
jQuery(".toggle_pane").show();
|
29 |
+
jQuery(".expand-all").hide();
|
30 |
+
jQuery(".collapse-all").show();
|
31 |
+
});
|
32 |
+
jQuery(".collapse-all").click( function () {
|
33 |
+
jQuery(".toggle_pane").hide();
|
34 |
+
jQuery(".expand-all").show();
|
35 |
+
jQuery(".collapse-all").hide();
|
36 |
+
});
|
37 |
+
});
|
38 |
+
</script>
|
39 |
+
|
40 |
+
<style type="text/css">
|
41 |
+
|
42 |
+
.options-table {
|
43 |
+
width: 80%;
|
44 |
+
margin-top: 10px;
|
45 |
+
}
|
46 |
+
|
47 |
+
.options-table td {
|
48 |
+
padding: 10px;
|
49 |
+
background-color: #f4f0db;
|
50 |
+
}
|
51 |
+
|
52 |
+
.options-table h3 {
|
53 |
+
padding: 0px;
|
54 |
+
margin: 0px;
|
55 |
+
padding-left: 10px;
|
56 |
+
}
|
57 |
+
|
58 |
+
.expand-all, .collapse-all, .options-table-toggle {
|
59 |
+
cursor: pointer;
|
60 |
+
}
|
61 |
+
|
62 |
+
.toggle {
|
63 |
+
line-height: 34px;
|
64 |
+
font-size: 12px;
|
65 |
+
font-weight: bold;
|
66 |
+
padding-bottom: 10px;
|
67 |
+
cursor: pointer;
|
68 |
+
}
|
69 |
+
|
70 |
+
.pane {
|
71 |
+
background-color: #f4f0db;
|
72 |
+
padding-left: 10px;
|
73 |
+
}
|
74 |
+
|
75 |
+
ul.pane li {
|
76 |
+
padding: 0px;
|
77 |
+
margin: 0px;
|
78 |
+
}
|
79 |
+
|
80 |
+
.edit_link {
|
81 |
+
height: 50px;
|
82 |
+
}
|
83 |
+
|
84 |
+
.slug_name {
|
85 |
+
font-size: 12px;
|
86 |
+
font-weight: bold;
|
87 |
+
}
|
88 |
+
.link_actions {
|
89 |
+
padding-top: 5px;
|
90 |
+
}
|
91 |
+
</style>
|
classes/views/prli-links/list.php
ADDED
@@ -0,0 +1,182 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="wrap">
|
2 |
+
<?php
|
3 |
+
require(PRLI_VIEWS_PATH.'/shared/nav.php');
|
4 |
+
?>
|
5 |
+
<h2><img src="<?php echo PRLI_URL.'/images/pretty-link-med.png'; ?>"/> Pretty Link: Links</h2>
|
6 |
+
<?php
|
7 |
+
if(empty($params['group']))
|
8 |
+
{
|
9 |
+
$permalink_structure = get_option('permalink_structure');
|
10 |
+
if(!$permalink_structure or empty($permalink_structure))
|
11 |
+
{
|
12 |
+
?>
|
13 |
+
<div class="error" style="padding-top: 5px; padding-bottom: 5px;"><strong>WordPress Must be Configured:</strong> Pretty Link won't work until you select a Permalink Structure other than "Default" ... <a href="<?php echo $prli_siteurl; ?>/wp-admin/options-permalink.php">Permalink Settings</a></div>
|
14 |
+
<?php
|
15 |
+
}
|
16 |
+
?>
|
17 |
+
<div id="message" class="updated fade" style="padding:5px;"><?php echo $prli_message; ?></div>
|
18 |
+
<?php do_action('prli-link-message'); ?>
|
19 |
+
<div id="search_pane" style="float: right;">
|
20 |
+
<form class="form-fields" name="link_form" method="post" action="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI']); ?>">
|
21 |
+
<?php wp_nonce_field('prli-links'); ?>
|
22 |
+
<input type="hidden" name="sort" id="sort" value="<?php echo $sort_str; ?>" />
|
23 |
+
<input type="hidden" name="sdir" id="sort" value="<?php echo $sdir_str; ?>" />
|
24 |
+
<input type="text" name="search" id="search" value="<?php echo $search_str; ?>" style="display:inline;"/>
|
25 |
+
<div class="submit" style="display: inline;"><input type="submit" name="Submit" value="Search"/>
|
26 |
+
<?php
|
27 |
+
if(!empty($search_str))
|
28 |
+
{
|
29 |
+
?>
|
30 |
+
or <a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-links.php">Reset</a>
|
31 |
+
<?php
|
32 |
+
}
|
33 |
+
?>
|
34 |
+
</div>
|
35 |
+
</form>
|
36 |
+
</div>
|
37 |
+
<div id="button_bar">
|
38 |
+
<p><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-add-link.php"><img src="<?php echo PRLI_URL.'/images/pretty-link-add.png'; ?>"/> Add a Pretty Link</a>
|
39 |
+
| <a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-options.php">Options</a>
|
40 |
+
<?php do_action('prli-link-nav'); ?>
|
41 |
+
</p>
|
42 |
+
</div>
|
43 |
+
<?php
|
44 |
+
}
|
45 |
+
else
|
46 |
+
{
|
47 |
+
?>
|
48 |
+
<h3><?php echo $prli_message; ?></h3>
|
49 |
+
<a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-groups.php">« Back to Groups</a>
|
50 |
+
<br/><br/>
|
51 |
+
<?php
|
52 |
+
}
|
53 |
+
?>
|
54 |
+
<form class="form-fields link-list-form" name="link_list_form" method="post" action="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI']); ?>">
|
55 |
+
<input type="hidden" name="action" value="list-form"/>
|
56 |
+
<?php $footer = false; require(PRLI_VIEWS_PATH.'/shared/link-table-nav.php'); ?>
|
57 |
+
<table class="widefat post fixed" cellspacing="0">
|
58 |
+
<thead>
|
59 |
+
<tr>
|
60 |
+
<th class="manage-column" width="30%"><?php do_action('prli-list-header-icon'); ?><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-links.php&sort=name<?php echo (($sort_str == 'name' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Name<?php echo (($sort_str == 'name')?' <img src="'.PRLI_URL.'/images/'.(($sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a></th>
|
61 |
+
<?php do_action('prli_link_column_header'); ?>
|
62 |
+
<th class="manage-column" width="10%"><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-links.php&sort=clicks<?php echo (($sort_str == 'clicks' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Hits / Uniq<?php echo (($sort_str == 'clicks')?' <img src="'.PRLI_URL.'/images/'.(($sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a></th>
|
63 |
+
<th class="manage-column" width="5%"><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-links.php&sort=group_name<?php echo (($sort_str == 'group_name' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Group<?php echo (($sort_str == 'group_name')?' <img src="'.PRLI_URL.'/images/'.(($sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a></th>
|
64 |
+
<th class="manage-column" width="12%"><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-links.php&sort=created_at<?php echo (($sort_str == 'created_at' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Created<?php echo ((empty($sort_str) or $sort_str == 'created_at')?' <img src="'.PRLI_URL.'/images/'.((empty($sort_str) or $sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a></th>
|
65 |
+
<th class="manage-column" width="20%"><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-links.php&sort=slug<?php echo (($sort_str == 'slug' and $sdir_str == 'asc')?'&sdir=desc':''); ?>">Links<?php echo (($sort_str == 'slug')?' <img src="'.PRLI_URL.'/images/'.(($sdir_str == 'desc')?'arrow_down.png':'arrow_up.png').'"/>':'') ?></a></th>
|
66 |
+
</tr>
|
67 |
+
</thead>
|
68 |
+
<?php
|
69 |
+
|
70 |
+
if($record_count <= 0)
|
71 |
+
{
|
72 |
+
?>
|
73 |
+
<tr>
|
74 |
+
<td colspan="5">No Pretty Links were found</td>
|
75 |
+
</tr>
|
76 |
+
<?php
|
77 |
+
}
|
78 |
+
else
|
79 |
+
{
|
80 |
+
foreach($links as $link)
|
81 |
+
{
|
82 |
+
$pretty_link_url = $prli_link->get_pretty_link_url($link->slug);//$prli_blogurl . '/' . $link->slug;
|
83 |
+
?>
|
84 |
+
<tr style="min-height: 75px; height: 75px;">
|
85 |
+
<td class="edit_link">
|
86 |
+
|
87 |
+
<?php do_action('prli_list_icon',$link->id); ?>
|
88 |
+
<?php if( $link->redirect_type == 'prettybar' ) { ?>
|
89 |
+
<img src="<?php echo PRLI_URL.'/images/pretty-link-small.png'; ?>" title="Using PrettyBar" width="13px" height="13px" />
|
90 |
+
<?php }
|
91 |
+
else if( $link->redirect_type == 'cloak' ) { ?>
|
92 |
+
<img src="<?php echo PRLI_URL.'/images/ultra-cloak.png'; ?>" title="Using Ultra Cloak" width="13px" height="13px" />
|
93 |
+
<?php }
|
94 |
+
else if( $link->redirect_type == 'pixel' ) { ?>
|
95 |
+
<img src="<?php echo PRLI_URL.'/images/pixel_track.png'; ?>" width="13px" height="13px" name="Pixel Tracking Enabled" alt="Pixel Tracking Enabled" title="Pixel Tracking Enabled"/>
|
96 |
+
<?php }
|
97 |
+
else if( $link->redirect_type == '307' ) { ?>
|
98 |
+
<span title="Temporary Redirection (307)" style="font-size: 14px; line-height: 14px; padding: 0px; margin: 0px; color: green;"><strong>T</strong></span>
|
99 |
+
<?php }
|
100 |
+
else if( $link->redirect_type == '301' ) { ?>
|
101 |
+
<span title="Permanent Redirection (301)" style="font-size: 14px; line-height: 14px; padding: 0px; margin: 0px; color: green;"><strong>P</strong></span>
|
102 |
+
<?php } ?>
|
103 |
+
|
104 |
+
<?php if( $link->nofollow ) { ?>
|
105 |
+
<img src="<?php echo PRLI_URL.'/images/nofollow.png'; ?>" title="nofollow" width="13px" height="13px" />
|
106 |
+
<?php }
|
107 |
+
|
108 |
+
if($link->param_forwarding == 'on')
|
109 |
+
{
|
110 |
+
?>
|
111 |
+
<img src="<?php echo PRLI_URL.'/images/forward_params.png'; ?>" width="13px" height="13px" name="Standard Parameter Forwarding Enabled" alt="Standard Parameter Forwarding Enabled" title="Standard Parameter Forwarding Enabled"/>
|
112 |
+
<?php
|
113 |
+
}
|
114 |
+
else if($link->param_forwarding == 'custom')
|
115 |
+
{
|
116 |
+
?>
|
117 |
+
<img src="<?php echo PRLI_URL.'/images/forward_params.png'; ?>" width="13px" height="13px" name="Custom Parameter Forwarding Enabled" alt="Custom Parameter Forwarding Enabled" title="Custom Parameter Forwarding Enabled"/>
|
118 |
+
<?php
|
119 |
+
}
|
120 |
+
?>
|
121 |
+
|
122 |
+
<?php if( $link->redirect_type != 'pixel' )
|
123 |
+
{
|
124 |
+
?>
|
125 |
+
<a href="<? echo $link->url; ?>" target="_blank" title="Visit Target URL: <?php echo $link->url; ?> in a New Window"><img src="<?php echo PRLI_URL.'/images/url_icon.gif'; ?>" width="13px" height="13px" name="Visit" alt="Visit"/></a>
|
126 |
+
<a href="<? echo $pretty_link_url; ?>" target="_blank" title="Visit Pretty Link: <?php echo $pretty_link_url; ?> in a New Window"><img src="<?php echo PRLI_URL.'/images/url_icon.gif'; ?>" width="13px" height="13px" name="Visit" alt="Visit"/></a>
|
127 |
+
<?php
|
128 |
+
}
|
129 |
+
?>
|
130 |
+
<a class="slug_name" href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-links.php&action=edit&id=<?php echo $link->id; ?>" title="Edit <?php echo stripslashes($link->name); ?>"><?php echo stripslashes($link->name); ?></a>
|
131 |
+
<br/>
|
132 |
+
<div class="link_actions">
|
133 |
+
<a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-links.php&action=edit&id=<?php echo $link->id; ?>" title="Edit <?php echo $link->slug; ?>">Edit</a> |
|
134 |
+
<a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-links.php&action=destroy&id=<?php echo $link->id; ?>" onclick="return confirm('Are you sure you want to delete your <?php echo $link->name; ?> Pretty Link? This will delete the Pretty Link and all of the statistical data about it in your database.');" title="Delete <?php echo $link->slug; ?>">Delete</a>
|
135 |
+
<?php if( $link->track_me ) { ?>
|
136 |
+
| <a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-links.php&action=reset&id=<?php echo $link->id; ?>" onclick="return confirm('Are you sure you want to reset your <?php echo $link->name; ?> Pretty Link? This will delete all of the statistical data about this Pretty Link in your database.');" title="Reset <?php echo $link->name; ?>">Reset</a> |
|
137 |
+
<a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-clicks.php&l=<?php echo $link->id; ?>" title="View clicks for <?php echo $link->slug; ?>">Hits</a>
|
138 |
+
<?php do_action('prli-link-action',$link->id); ?>
|
139 |
+
<?php } ?>
|
140 |
+
<?php if( $link->redirect_type != 'pixel' )
|
141 |
+
{
|
142 |
+
?>
|
143 |
+
| <a href="http://twitter.com/home?status=<?php echo $pretty_link_url; ?>" target="_blank" title="Post <?php echo $pretty_link_url; ?> to Twitter">Tweet</a> |
|
144 |
+
<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>
|
145 |
+
<?php
|
146 |
+
}
|
147 |
+
?>
|
148 |
+
</div>
|
149 |
+
</td>
|
150 |
+
<?php do_action('prli_link_column_row',$link->id); ?>
|
151 |
+
<td><?php echo (($link->track_me)?"<a href=\"?page=".PRLI_PLUGIN_NAME."/prli-clicks.php&l=$link->id\" title=\"View clicks for $link->slug\">$link->clicks/$link->uniques</a>":"<img src=\"".PRLI_URL."/images/not_tracking.png\" title=\"This link isn't being tracked\"/>"); ?></td>
|
152 |
+
<td><a href="?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-links.php&group=<?php echo $link->group_id; ?>"><?php echo $link->group_name; ?></a></td>
|
153 |
+
<td><?php echo $link->created_at; ?></td>
|
154 |
+
</td>
|
155 |
+
<td><input type='text' style="font-size: 10px; width: 100%;" readonly="true" onclick='this.select();' onfocus='this.select();' value='<?php echo $pretty_link_url; ?>' /><br/>
|
156 |
+
<?php if( $link->redirect_type != 'pixel' )
|
157 |
+
{
|
158 |
+
?>
|
159 |
+
<span style="font-size: 8px;" title="<?php echo $link->url; ?>"><strong>Target URL:</strong> <? echo substr($link->url,0,47) . ((strlen($link->url) >= 47)?'...':''); ?></span></td>
|
160 |
+
<?php
|
161 |
+
}
|
162 |
+
?>
|
163 |
+
</tr>
|
164 |
+
<?php
|
165 |
+
}
|
166 |
+
}
|
167 |
+
?>
|
168 |
+
<tfoot>
|
169 |
+
<tr>
|
170 |
+
<th class="manage-column"><?php do_action('prli-list-header-icon'); ?>Name</th>
|
171 |
+
<?php do_action('prli_link_column_footer'); ?>
|
172 |
+
<th class="manage-column">Hits / Uniq</th>
|
173 |
+
<th class="manage-column">Group</th>
|
174 |
+
<th class="manage-column">Created</th>
|
175 |
+
<th class="manage-column">Links</th>
|
176 |
+
</tr>
|
177 |
+
</tfoot>
|
178 |
+
</table>
|
179 |
+
<?php $footer = true; require(PRLI_VIEWS_PATH.'/shared/link-table-nav.php'); ?>
|
180 |
+
</form>
|
181 |
+
|
182 |
+
</div>
|
classes/views/prli-links/new.php
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 echo 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 echo $id; ?>">
|
12 |
+
|
13 |
+
<?php
|
14 |
+
require(PRLI_VIEWS_PATH.'/prli-links/form.php');
|
15 |
+
?>
|
16 |
+
|
17 |
+
<p class="submit">
|
18 |
+
<input type="submit" name="Submit" value="Create" /> or <a href="?page=<?php echo PRLI_PLUGIN_NAME ?>/prli-links.php">Cancel</a>
|
19 |
+
</p>
|
20 |
+
|
21 |
+
</form>
|
22 |
+
</div>
|
classes/views/prli-links/ultra-cloak.php
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
+
<html>
|
3 |
+
<head>
|
4 |
+
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
5 |
+
<title><?php echo htmlspecialchars(stripslashes($pretty_link->name)); ?></title>
|
6 |
+
</head>
|
7 |
+
<frameset rows="*" framespacing=0 frameborder=0>
|
8 |
+
<frame src="<?php echo $pretty_link_url.$param_string; ?>" frameborder=0 marginwidth=0 marginheight=0>
|
9 |
+
<noframes>Your browser does not support frames. Click <a href="<?php echo $pretty_link_url.$param_string; ?>">here</a> to view the page.</noframes>
|
10 |
+
</frameset>
|
11 |
+
</html>
|
classes/views/prli-options/form.php
ADDED
@@ -0,0 +1,160 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="wrap">
|
2 |
+
<div id="icon-options-general" class="icon32"><br /></div>
|
3 |
+
<h2 id="prli_title">Pretty Link: Options</h2>
|
4 |
+
<br/>
|
5 |
+
<?php
|
6 |
+
$permalink_structure = get_option('permalink_structure');
|
7 |
+
if(!$permalink_structure or empty($permalink_structure))
|
8 |
+
{
|
9 |
+
?>
|
10 |
+
<div class="error" style="padding-top: 5px; padding-bottom: 5px;"><strong>WordPress Must be Configured:</strong> Pretty Link won't work until you select a Permalink Structure other than "Default" ... <a href="<?php echo $prli_siteurl; ?>/wp-admin/options-permalink.php">Permalink Settings</a></div>
|
11 |
+
<?php
|
12 |
+
}
|
13 |
+
?>
|
14 |
+
<?php do_action('prli-options-message'); ?>
|
15 |
+
<a href="admin.php?page=<?php echo PRLI_PLUGIN_NAME; ?>/prli-links.php">« Pretty Link Admin</a>
|
16 |
+
|
17 |
+
<form name="form1" method="post" action="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI']); ?>">
|
18 |
+
<input type="hidden" name="<?php echo $hidden_field_name; ?>" value="Y">
|
19 |
+
<?php wp_nonce_field('update-options'); ?>
|
20 |
+
|
21 |
+
<h3><a class="toggle link-toggle-button">Link Option Defaults <span class="link-expand" style="display: none;">[+]</span><span class="link-collapse">[-]</span></a></h3>
|
22 |
+
<ul class="link-toggle-pane" style="list-style-type: none;">
|
23 |
+
<input type="checkbox" name="<?php echo $link_track_me; ?>" <?php echo (($prli_options->link_track_me != 0)?'checked="true"':''); ?>/> Track Link
|
24 |
+
<br/><span class="description">Default all new links to be tracked.</span>
|
25 |
+
</li>
|
26 |
+
<li>
|
27 |
+
<input type="checkbox" name="<?php echo $link_nofollow; ?>" <?php echo (($prli_options->link_nofollow != 0)?'checked="true"':''); ?>/> Add <code>nofollow</code> to Link
|
28 |
+
<br/><span class="description">Add the <code>nofollow</code> attribute by default to new links.</span>
|
29 |
+
</li>
|
30 |
+
<li>
|
31 |
+
<h4>Default Link Redirection Type:</h4>
|
32 |
+
<select name="<?php echo $link_redirect_type; ?>">
|
33 |
+
<option value="307" <?php echo (($prli_options->link_redirect_type == '307')?' selected="selected"':''); ?>/>Temporary (307)</option>
|
34 |
+
<option value="301" <?php echo (($prli_options->link_redirect_type == '301')?' selected="selected"':''); ?>/>Permanent (301)</option>
|
35 |
+
<option value="prettybar" <?php echo (($prli_options->link_redirect_type == 'prettybar')?' selected="selected"':''); ?>/>Pretty Bar</option>
|
36 |
+
<option value="cloak" <?php echo (($prli_options->link_redirect_type == 'cloak')?' selected="selected"':''); ?>/>Cloak</option>
|
37 |
+
<option value="pixel" <?php echo (($prli_options->link_redirect_type == 'pixel')?' selected="selected"':''); ?>/>Pixel</option>
|
38 |
+
</select>
|
39 |
+
<br/><span class="description">Select the type of redirection you want your newly created links to have.</span>
|
40 |
+
</li>
|
41 |
+
</ul>
|
42 |
+
<h3><a class="toggle prettybar-toggle-button">PrettyBar Options <span class="prettybar-expand" style="display: none;">[+]</span><span class="prettybar-collapse">[-]</span></a></h3>
|
43 |
+
<table class="prettybar-toggle-pane form-table">
|
44 |
+
<tr class="form-field">
|
45 |
+
<td valign="top" width="15%"><?php _e("Image URL:", $prettybar_image_url ); ?> </td>
|
46 |
+
<td width="85%">
|
47 |
+
<input type="text" name="<?php echo $prettybar_image_url; ?>" value="<?php echo $prli_options->prettybar_image_url; ?>"/>
|
48 |
+
<br/><span class="description">If set, this will replace the logo image on the PrettyBar. The image that this URL references should be 48x48 Pixels to fit.</span>
|
49 |
+
</td>
|
50 |
+
</tr>
|
51 |
+
<tr class="form-field">
|
52 |
+
<td valign="top" width="15%"><?php _e("Background Image URL:", $prettybar_background_image_url ); ?> </td>
|
53 |
+
<td width="85%">
|
54 |
+
<input type="text" name="<?php echo $prettybar_background_image_url; ?>" value="<?php echo $prli_options->prettybar_background_image_url; ?>"/>
|
55 |
+
<br/><span class="description">If set, this will replace the background image on PrettyBar. The image that this URL references should be 65px tall -- this image will be repeated horizontally across the bar.</span>
|
56 |
+
</td>
|
57 |
+
</tr>
|
58 |
+
<tr>
|
59 |
+
<td valign="top" width="15%"><?php _e("Background Color:", $prettybar_color ); ?> </td>
|
60 |
+
<td width="85%">
|
61 |
+
#<input type="text" name="<?php echo $prettybar_color; ?>" value="<?php echo $prli_options->prettybar_color; ?>" size="6"/>
|
62 |
+
<br/><span class="description">This will alter the background color of the PrettyBar if you haven't specified a PrettyBar background image.</span>
|
63 |
+
</td>
|
64 |
+
</tr>
|
65 |
+
<tr>
|
66 |
+
<td valign="top" width="15%"><?php _e("Text Color:", $prettybar_text_color ); ?> </td>
|
67 |
+
<td width="85%">
|
68 |
+
#<input type="text" name="<?php echo $prettybar_text_color; ?>" value="<?php echo $prli_options->prettybar_text_color; ?>" size="6"/>
|
69 |
+
<br/><span class="description">If not set, this defaults to black (RGB value <code>#000000</code>) but you can change it to whatever color you like.</span>
|
70 |
+
</td>
|
71 |
+
</tr>
|
72 |
+
<tr>
|
73 |
+
<td valign="top" width="15%"><?php _e("Link Color:", $prettybar_link_color ); ?> </td>
|
74 |
+
<td width="85%">
|
75 |
+
#<input type="text" name="<?php echo $prettybar_link_color; ?>" value="<?php echo $prli_options->prettybar_link_color; ?>" size="6"/>
|
76 |
+
<br/><span class="description">If not set, this defaults to blue (RGB value <code>#0000ee</code>) but you can change it to whatever color you like.</span>
|
77 |
+
</td>
|
78 |
+
</tr>
|
79 |
+
<tr>
|
80 |
+
<td valign="top" width="15%"><?php _e("Link Hover Color:", $prettybar_hover_color ); ?> </td>
|
81 |
+
<td width="85%">
|
82 |
+
#<input type="text" name="<?php echo $prettybar_hover_color; ?>" value="<?php echo $prli_options->prettybar_hover_color; ?>" size="6"/>
|
83 |
+
<br/><span class="description">If not set, this defaults to RGB value <code>#ababab</code> but you can change it to whatever color you like.</span>
|
84 |
+
</td>
|
85 |
+
</tr>
|
86 |
+
<tr>
|
87 |
+
<td valign="top" width="15%"><?php _e("Visited Link Color:", $prettybar_visited_color ); ?> </td>
|
88 |
+
<td width="85%">
|
89 |
+
#<input type="text" name="<?php echo $prettybar_visited_color; ?>" value="<?php echo $prli_options->prettybar_visited_color; ?>" size="6"/>
|
90 |
+
<br/><span class="description">If not set, this defaults to RGB value <code>#551a8b</code> but you can change it to whatever color you like.</span>
|
91 |
+
</td>
|
92 |
+
</tr>
|
93 |
+
<tr>
|
94 |
+
<td valign="top" width="15%"><?php _e("Title Char Limit*:", $prettybar_title_limit ); ?> </td>
|
95 |
+
<td width="85%">
|
96 |
+
<input type="text" name="<?php echo $prettybar_title_limit; ?>" value="<?php echo $prli_options->prettybar_title_limit; ?>" size="4"/>
|
97 |
+
<br/><span class="description">If your Website has a long title then you may need to adjust this value so that it will all fit on the PrettyBar. It is recommended that you keep this value to <code>30</code> characters or less so the PrettyBar's format looks good across different browsers and screen resolutions.</span>
|
98 |
+
</td>
|
99 |
+
</tr>
|
100 |
+
<tr>
|
101 |
+
<td valign="top" width="15%"><?php _e("Description Char Limit*:", $prettybar_desc_limit ); ?> </td>
|
102 |
+
<td width="85%">
|
103 |
+
<input type="text" name="<?php echo $prettybar_desc_limit; ?>" value="<?php echo $prli_options->prettybar_desc_limit; ?>" size="4"/>
|
104 |
+
<br/><span class="description">If your Website has a long Description (tagline) then you may need to adjust this value so that it will all fit on the PrettyBar. It is recommended that you keep this value to <code>40</code> characters or less so the PrettyBar's format looks good across different browsers and screen resolutions.</span>
|
105 |
+
</td>
|
106 |
+
</tr>
|
107 |
+
<tr>
|
108 |
+
<td valign="top" width="15%"><?php _e("Target URL Char Limit*:", $prettybar_link_limit ); ?> </td>
|
109 |
+
<td width="85%">
|
110 |
+
<input type="text" name="<?php echo $prettybar_link_limit; ?>" value="<?php echo $prli_options->prettybar_link_limit; ?>" size="4"/>
|
111 |
+
<br/><span class="description">If you link to a lot of large Target URLs you may want to adjust this value. It is recommended that you keep this value to <code>40</code> or below so the PrettyBar's format looks good across different browsers and URL sizes</span>
|
112 |
+
</td>
|
113 |
+
</tr>
|
114 |
+
<tr>
|
115 |
+
<td colspan="2">
|
116 |
+
<input type="checkbox" name="<?php echo $prettybar_show_title; ?>" <?php echo (($prli_options->prettybar_show_title != 0)?'checked="true"':''); ?>/> Show Pretty Bar Title
|
117 |
+
<br/><span class="description">Make sure this is checked if you want the title of your blog (and link) to show up on the PrettyBar.</span>
|
118 |
+
</td>
|
119 |
+
</tr>
|
120 |
+
<tr>
|
121 |
+
<td colspan="2">
|
122 |
+
<input type="checkbox" name="<?php echo $prettybar_show_description; ?>" <?php echo (($prli_options->prettybar_show_description != 0)?'checked="true"':''); ?>/> Show Pretty Bar Description
|
123 |
+
<br/><span class="description">Make sure this is checked if you want your site description to show up on the PrettyBar.</span>
|
124 |
+
</td>
|
125 |
+
</tr>
|
126 |
+
<tr>
|
127 |
+
<td colspan="2">
|
128 |
+
<input type="checkbox" name="<?php echo $prettybar_show_share_links; ?>" <?php echo (($prli_options->prettybar_show_share_links != 0)?'checked="true"':''); ?>/> Show Pretty Bar Share Links
|
129 |
+
<br/><span class="description">Make sure this is checked if you want "share links" to show up on the PrettyBar.</span>
|
130 |
+
</td>
|
131 |
+
</tr>
|
132 |
+
<tr>
|
133 |
+
<td colspan="2">
|
134 |
+
<input type="checkbox" name="<?php echo $prettybar_show_target_url_link; ?>" <?php echo (($prli_options->prettybar_show_target_url_link != 0)?'checked="true"':''); ?>/> Show Pretty Bar Target URL
|
135 |
+
<br/><span class="description">Make sure this is checked if you want a link displaying the Target URL to show up on the PrettyBar.</span>
|
136 |
+
</td>
|
137 |
+
</tr>
|
138 |
+
|
139 |
+
</table>
|
140 |
+
<h3><a class="toggle reporting-toggle-button">Reporting Options <span class="reporting-expand" style="display: none;">[+]</span><span class="reporting-collapse">[-]</span></a></h3>
|
141 |
+
<table class="reporting-toggle-pane form-table">
|
142 |
+
<tr class="form-field">
|
143 |
+
<td valign="top">Excluded IP Addresses: </td>
|
144 |
+
<td>
|
145 |
+
<input type="text" name="<?php echo $prli_exclude_ips; ?>" value="<?php echo $prli_options->prli_exclude_ips; ?>">
|
146 |
+
<br/><span class="description">Enter IP Addresses you want to exclude from your Hit data and Stats. Each IP Address should be separated by commas. Example: <code>192.168.0.1, 192.168.2.1, 192.168.3.4</code></span>
|
147 |
+
<br/><span class="description" style="color: red;">Your Current IP Address is <?php echo $_SERVER['REMOTE_ADDR']; ?></span>
|
148 |
+
</td>
|
149 |
+
</tr>
|
150 |
+
</table>
|
151 |
+
|
152 |
+
<p class="submit">
|
153 |
+
<input type="submit" name="Submit" value="<?php _e('Update Options', $prli_domain ) ?>" />
|
154 |
+
</p>
|
155 |
+
|
156 |
+
<p><a href="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI'] ); ?>&action=clear_all_clicks4134" onclick="return confirm('***WARNING*** If you click OK you will delete ALL of the Hit data in your Database. Your data will be gone forever -- no way to retreive it. Do not click OK unless you are absolutely sure you want to delete all your data because there is no going back!');">Delete All Hits</a>
|
157 |
+
<br/><span class="description">Seriously, only click this link if you want to delete all the Hit data in your database.</span></p>
|
158 |
+
|
159 |
+
</form>
|
160 |
+
</div>
|
classes/views/prli-options/head.php
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<script type="text/javascript">
|
2 |
+
jQuery(document).ready(function() {
|
3 |
+
jQuery('.prettybar-expand').show();
|
4 |
+
jQuery('.prettybar-collapse').hide();
|
5 |
+
jQuery('.prettybar-toggle-pane').hide();
|
6 |
+
jQuery('.prettybar-toggle-button').click(function() {
|
7 |
+
jQuery('.prettybar-toggle-pane').toggle();
|
8 |
+
jQuery('.prettybar-expand').toggle();
|
9 |
+
jQuery('.prettybar-collapse').toggle();
|
10 |
+
});
|
11 |
+
|
12 |
+
jQuery('.reporting-expand').show();
|
13 |
+
jQuery('.reporting-collapse').hide();
|
14 |
+
jQuery('.reporting-toggle-pane').hide();
|
15 |
+
jQuery('.reporting-toggle-button').click(function() {
|
16 |
+
jQuery('.reporting-toggle-pane').toggle();
|
17 |
+
jQuery('.reporting-expand').toggle();
|
18 |
+
jQuery('.reporting-collapse').toggle();
|
19 |
+
});
|
20 |
+
|
21 |
+
jQuery('.link-expand').show();
|
22 |
+
jQuery('.link-collapse').hide();
|
23 |
+
jQuery('.link-toggle-pane').hide();
|
24 |
+
jQuery('.link-toggle-button').click(function() {
|
25 |
+
jQuery('.link-toggle-pane').toggle();
|
26 |
+
jQuery('.link-expand').toggle();
|
27 |
+
jQuery('.link-collapse').toggle();
|
28 |
+
});
|
29 |
+
});
|
30 |
+
</script>
|
31 |
+
|
32 |
+
<style type="text/css">
|
33 |
+
.toggle {
|
34 |
+
cursor: pointer;
|
35 |
+
}
|
36 |
+
</style>
|
classes/views/prli-options/pro-settings.php
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="wrap">
|
2 |
+
<div id="icon-options-general" class="icon32"><br /></div>
|
3 |
+
<h2 id="prli_title">Pretty Link: Pro Account Information</h2>
|
4 |
+
<?php $this_uri = preg_replace('#&.*?$#', '', str_replace( '%7E', '~', $_SERVER['REQUEST_URI'])); ?>
|
5 |
+
<form name="proaccount_form" method="post" action="<?php echo $this_uri; ?>">
|
6 |
+
<input type="hidden" name="<?php echo $hidden_field_name; ?>" value="Y">
|
7 |
+
<input type="hidden" name="action" value="pro-settings">
|
8 |
+
<?php wp_nonce_field('update-options'); ?>
|
9 |
+
|
10 |
+
<h3>Pretty Link Pro Account Information</h3>
|
11 |
+
<?php if($prli_utils->pro_is_installed()) { ?>
|
12 |
+
<p><a href="http://prettylinkpro.com/user-manual">User Manual</a></p>
|
13 |
+
<?php } ?>
|
14 |
+
<table class="form-table">
|
15 |
+
<tr class="form-field">
|
16 |
+
<td valign="top" width="15%"><?php _e("Pretty Link Pro Username*:", $prlipro_username ); ?> </td>
|
17 |
+
<td width="85%">
|
18 |
+
<input type="text" name="<?php echo $prlipro_username; ?>" value="<?php echo $prlipro_username_val; ?>"/>
|
19 |
+
<br/><span class="description">Your Pretty Link Pro Username.</span>
|
20 |
+
</td>
|
21 |
+
</tr>
|
22 |
+
<tr class="form-field">
|
23 |
+
<td valign="top" width="15%"><?php _e("Pretty Link Pro Password:", $prlipro_password ); ?> </td>
|
24 |
+
<td width="85%">
|
25 |
+
<input type="password" name="<?php echo $prlipro_password; ?>" value="<?php echo $prlipro_password_val; ?>"/>
|
26 |
+
<br/><span class="description">Your Pretty Link Pro Password.</span>
|
27 |
+
</td>
|
28 |
+
</tr>
|
29 |
+
</table>
|
30 |
+
|
31 |
+
<p class="submit">
|
32 |
+
<input type="submit" name="Submit" value="<?php _e('Save', $prli_domain ) ?>" />
|
33 |
+
</p>
|
34 |
+
|
35 |
+
<?php if($prli_utils->pro_is_installed()) { ?>
|
36 |
+
<div><p><strong>The <?php echo $prli_utils->get_pro_version(); ?> Version of Pretty LInk Pro is Installed</strong></p><p><a href="<?php echo $this_uri; ?>&action=force-pro-reinstall" title="Re-Install">Re-Install</a> | <a href="<?php echo $this_uri; ?>&action=pro-uninstall" onclick="return confirm('Are you sure you want to Un-Install Pretty Link Pro? This will delete your pro username & password from your local database, remove all the pro software but will leave all your data intact incase you want to reinstall sometime :) ...');" title="Un-Install" >Un-Install</a></p><br/><p><strong>Edit/Update Your Profile:</strong><br/><span class="description">Use your account username and password to log in to your Account and Affiliate Control Panel</span></p><p><a href="http://prettylinkpro.com/amember/member.php">Account</a> | <a href="http://prettylinkpro.com/amember/aff_member.php">Affiliate Control Panel</a></div>
|
37 |
+
|
38 |
+
<?php } else { ?>
|
39 |
+
<a href="http://prettylinkpro.com">Upgrade to Pretty Link Pro</a>
|
40 |
+
<?php } ?>
|
41 |
+
|
42 |
+
</form>
|
43 |
+
</div>
|
classes/views/prli-tools/form.php
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="wrap">
|
2 |
+
<?php
|
3 |
+
require(PRLI_VIEWS_PATH.'/shared/nav.php');
|
4 |
+
?>
|
5 |
+
<h2><img src="<?php echo PRLI_URL.'/images/pretty-link-med.png'; ?>"/> Pretty Link: Tools</h2>
|
6 |
+
<h3>Bookmarklet: </h3>
|
7 |
+
<p><strong><a href="javascript:location.href='<?php echo PRLI_URL; ?>/prli-bookmarklet.php?k=<?php echo $prli_options->bookmarklet_auth; ?>&target_url='+location.href;">Get PrettyLink</a></strong><br/>
|
8 |
+
<span class="description">Just drag this "Get PrettyLink" link to your toolbar to install the bookmarklet. As you browse the web, you can just click this bookmarklet to create a pretty link from the current url you're looking at. <a href="http://blairwilliams.com/pretty-link-bookmarklet/">(more help)</a></span>
|
9 |
+
</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/link-table-nav.php
ADDED
@@ -0,0 +1,102 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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"<?php echo (isset($navstyle)?" style=\"$navstyle\"":''); ?>>
|
7 |
+
<?php do_action('prli-link-list-actions', $footer); ?>
|
8 |
+
<div class='tablenav-pages'><span class="displaying-num">Displaying <?php print "$page_first_record–$page_last_record of $record_count"; ?></span>
|
9 |
+
|
10 |
+
<?php
|
11 |
+
// Only show the prev page button if the current page is not the first page
|
12 |
+
if($current_page > 1)
|
13 |
+
{
|
14 |
+
?>
|
15 |
+
<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>
|
16 |
+
<?php
|
17 |
+
}
|
18 |
+
|
19 |
+
// First page is always displayed
|
20 |
+
if($current_page==1)
|
21 |
+
{
|
22 |
+
?>
|
23 |
+
<span class='page-numbers current'>1</span>
|
24 |
+
<?php
|
25 |
+
}
|
26 |
+
else
|
27 |
+
{
|
28 |
+
?>
|
29 |
+
<a class='page-numbers' href='?page=<?php print PRLI_PLUGIN_NAME; ?>/<?php print $controller_file . $page_params; ?>&paged=1'>1</a>
|
30 |
+
<?php
|
31 |
+
}
|
32 |
+
|
33 |
+
// If the current page is more than 2 spaces away from the first page then we put some dots in here
|
34 |
+
if($current_page >= 5)
|
35 |
+
{
|
36 |
+
?>
|
37 |
+
<span class='page-numbers dots'>...</span>
|
38 |
+
<?php
|
39 |
+
}
|
40 |
+
|
41 |
+
// display the current page icon and the 2 pages beneath and above it
|
42 |
+
$low_page = (($current_page >= 5)?($current_page-2):2);
|
43 |
+
$high_page = ((($current_page + 2) < ($page_count-1))?($current_page+2):($page_count-1));
|
44 |
+
for($i = $low_page; $i <= $high_page; $i++)
|
45 |
+
{
|
46 |
+
if($current_page==$i)
|
47 |
+
{
|
48 |
+
?>
|
49 |
+
<span class='page-numbers current'><?php print $i; ?></span>
|
50 |
+
<?php
|
51 |
+
}
|
52 |
+
else
|
53 |
+
{
|
54 |
+
?>
|
55 |
+
<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>
|
56 |
+
<?php
|
57 |
+
}
|
58 |
+
}
|
59 |
+
|
60 |
+
// If the current page is more than 2 away from the last page then show ellipsis
|
61 |
+
if($current_page < ($page_count - 3))
|
62 |
+
{
|
63 |
+
?>
|
64 |
+
<span class='page-numbers dots'>...</span>
|
65 |
+
<?php
|
66 |
+
}
|
67 |
+
|
68 |
+
// Display the last page icon
|
69 |
+
if($current_page == $page_count)
|
70 |
+
{
|
71 |
+
?>
|
72 |
+
<span class='page-numbers current'><?php print $page_count; ?></span>
|
73 |
+
<?php
|
74 |
+
}
|
75 |
+
else
|
76 |
+
{
|
77 |
+
?>
|
78 |
+
<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>
|
79 |
+
<?php
|
80 |
+
}
|
81 |
+
|
82 |
+
// Display the next page icon if there is a next page
|
83 |
+
if($current_page < $page_count)
|
84 |
+
{
|
85 |
+
?>
|
86 |
+
<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>
|
87 |
+
<?php
|
88 |
+
}
|
89 |
+
?>
|
90 |
+
</div>
|
91 |
+
</div>
|
92 |
+
<?php
|
93 |
+
}
|
94 |
+
else
|
95 |
+
{
|
96 |
+
?>
|
97 |
+
<div class="tablenav"<?php echo (isset($navstyle)?" style=\"$navstyle\"":''); ?>>
|
98 |
+
<?php do_action('prli-link-list-actions', $footer); ?>
|
99 |
+
</div>
|
100 |
+
<?php
|
101 |
+
}
|
102 |
+
?>
|
classes/views/shared/nav.php
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<p style="font-size: 14px; font-weight: bold; float: right; text-align: right; padding-top: 5px;"><span style="font-size: 12px;"><a href="http://blairwilliams.com/blog">Get the most from WordPress at BlairWilliams.com</a></span><br/><a href="http://blairwilliams.com/faq" target="_blank">Get Help</a> | <a href="http://blairwilliams.com/category/tutorial" target="_blank">Tutorials</a> | <a href="http://blairwilliams.com/don" target="_blank">Donate</a></p>
|
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"<?php echo (isset($navstyle)?" style=\"$navstyle\"":''); ?>>
|
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/arrow_down.png
ADDED
Binary file
|
images/arrow_up.png
ADDED
Binary file
|
images/bar_background.png
ADDED
Binary file
|
images/bar_map.png
ADDED
Binary file
|
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
|
images/browser/icab.png
ADDED
Binary file
|
images/browser/java.png
ADDED
Binary file
|
images/browser/jetbrains_omea.png
ADDED
Binary file
|
images/browser/kmeleon.png
ADDED
Binary file
|
images/browser/konqueror.png
ADDED
Binary file
|
images/browser/leechget.png
ADDED
Binary file
|
images/browser/lg.png
ADDED
Binary file
|
images/browser/lotusnotes.png
ADDED
Binary file
|
images/browser/lynx.png
ADDED
Binary file
|
images/browser/macweb.png
ADDED
Binary file
|
images/browser/mediaplayer.png
ADDED
Binary file
|
images/browser/motorola.png
ADDED
Binary file
|
images/browser/mozilla.png
ADDED
Binary file
|
images/browser/mplayer.png
ADDED
Binary file
|
images/browser/msie.png
ADDED
Binary file
|
images/browser/msie_large.png
ADDED
Binary file
|
images/browser/multizilla.png
ADDED
Binary file
|
images/browser/ncsa_mosaic.png
ADDED
Binary file
|
images/browser/neon.png
ADDED
Binary file
|
images/browser/netnewswire.png
ADDED
Binary file
|
images/browser/netpositive.png
ADDED
Binary file
|
images/browser/netscape.png
ADDED
Binary file
|
images/browser/netscape_large.png
ADDED
Binary file
|
images/browser/netshow.png
ADDED
Binary file
|
images/browser/newsfire.png
ADDED
Binary file
|
images/browser/newsgator.png
ADDED
Binary file
|
images/browser/newzcrawler.png
ADDED
Binary file
|
images/browser/nokia.png
ADDED
Binary file
|
images/browser/notavailable.png
ADDED
Binary file
|
images/browser/omniweb.png
ADDED
Binary file
|
images/browser/opera.png
ADDED
Binary file
|
images/browser/panasonic.png
ADDED
Binary file
|
images/browser/pdaphone.png
ADDED
Binary file
|
images/browser/philips.png
ADDED
Binary file
|
images/browser/phoenix.png
ADDED
Binary file
|
images/browser/pluck.png
ADDED
Binary file
|
images/browser/pulpfiction.png
ADDED
Binary file
|
images/browser/real.png
ADDED
Binary file
|
images/browser/rss.png
ADDED
Binary file
|
images/browser/rssbandit.png
ADDED
Binary file
|
images/browser/rssowl.png
ADDED
Binary file
|
images/browser/rssreader.png
ADDED
Binary file
|
images/browser/rssxpress.png
ADDED
Binary file
|
images/browser/safari.png
ADDED
Binary file
|
images/browser/sagem.png
ADDED
Binary file
|
images/browser/samsung.png
ADDED
Binary file
|
images/browser/sharp.png
ADDED
Binary file
|
images/browser/sharpreader.png
ADDED
Binary file
|
images/browser/shrook.png
ADDED
Binary file
|
images/browser/siemens.png
ADDED
Binary file
|
images/browser/sony.png
ADDED
Binary file
|
images/browser/staroffice.png
ADDED
Binary file
|
images/browser/subversion.png
ADDED
Binary file
|
images/browser/teleport.png
ADDED
Binary file
|
images/browser/trium.png
ADDED
Binary file
|
images/browser/unknown.png
ADDED
Binary file
|
images/browser/w3c.png
ADDED
Binary file
|
images/browser/webcopier.png
ADDED
Binary file
|
images/browser/webreaper.png
ADDED
Binary file
|
images/browser/webtv.png
ADDED
Binary file
|
images/browser/webzip.png
ADDED
Binary file
|
images/browser/winxbox.png
ADDED
Binary file
|
images/browser/wizz.png
ADDED
Binary file
|
images/co.mments.gif
ADDED
Binary file
|
images/delicious_32.png
ADDED
Binary file
|
images/digg_32.png
ADDED
Binary file
|
images/email_32.png
ADDED
Binary file
|
images/facebook.png
ADDED
Binary file
|
images/facebook_32.png
ADDED
Binary file
|
images/forward_params.png
ADDED
Binary file
|
images/linkedin_32.png
ADDED
Binary file
|
images/mixx_32.png
ADDED
Binary file
|
images/newsvine_32.png
ADDED
Binary file
|
images/nofollow.png
ADDED
Binary file
|
images/not_tracking.png
ADDED
Binary file
|
images/os/aix.png
ADDED
Binary file
|
images/os/amigaos.png
ADDED
Binary file
|
images/os/apple.png
ADDED
Binary file
|
images/os/atari.png
ADDED
Binary file
|
images/os/beos.png
ADDED
Binary file
|
images/os/bsd.png
ADDED
Binary file
|
images/os/bsdfreebsd.png
ADDED
Binary file
|
images/os/bsdi.png
ADDED
Binary file
|
images/os/bsdnetbsd.png
ADDED
Binary file
|
images/os/bsdopenbsd.png
ADDED
Binary file
|
images/os/commodore.png
ADDED
Binary file
|
images/os/cpm.png
ADDED
Binary file
|
images/os/debian.png
ADDED
Binary file
|
images/os/digital.png
ADDED
Binary file
|
images/os/dos.png
ADDED
Binary file
|
images/os/dreamcast.png
ADDED
Binary file
|
images/os/freebsd.png
ADDED
Binary file
|
images/os/gnu.png
ADDED
Binary file
|
images/os/hpux.png
ADDED
Binary file
|
images/os/ibm.png
ADDED
Binary file
|
images/os/imode.png
ADDED
Binary file
|
images/os/irix.png
ADDED
Binary file
|
images/os/java.png
ADDED
Binary file
|
images/os/kfreebsd.png
ADDED
Binary file
|
images/os/linux.png
ADDED
Binary file
|
images/os/linuxcentos.png
ADDED
Binary file
|
images/os/linuxdebian.png
ADDED
Binary file
|
images/os/linuxfedora.png
ADDED
Binary file
|
images/os/linuxgentoo.png
ADDED
Binary file
|
images/os/linuxmandr.png
ADDED
Binary file
|
images/os/linuxredhat.png
ADDED
Binary file
|
images/os/linuxsuse.png
ADDED
Binary file
|
images/os/linuxubuntu.png
ADDED
Binary file
|
images/os/mac.png
ADDED
Binary file
|
images/os/macintosh.png
ADDED
Binary file
|
images/os/macosx.png
ADDED
Binary file
|
images/os/netbsd.png
ADDED
Binary file
|
images/os/netware.png
ADDED
Binary file
|
images/os/next.png
ADDED
Binary file
|
images/os/openbsd.png
ADDED
Binary file
|
images/os/os2.png
ADDED
Binary file
|
images/os/osf.png
ADDED
Binary file
|
images/os/psp.png
ADDED
Binary file
|
images/os/qnx.png
ADDED
Binary file
|
images/os/riscos.png
ADDED
Binary file
|
images/os/sco.png
ADDED
Binary file
|
images/os/sunos.png
ADDED
Binary file
|
images/os/symbian.png
ADDED
Binary file
|
images/os/unix.png
ADDED
Binary file
|
images/os/unknown.png
ADDED
Binary file
|
images/os/vms.png
ADDED
Binary file
|
images/os/webtv.png
ADDED
Binary file
|
images/os/win.png
ADDED
Binary file
|
images/os/win16.png
ADDED
Binary file
|
images/os/win2000.png
ADDED
Binary file
|
images/os/win2003.png
ADDED
Binary file
|
images/os/win95.png
ADDED
Binary file
|
images/os/win98.png
ADDED
Binary file
|
images/os/wince.png
ADDED
Binary file
|
images/os/winlong.png
ADDED
Binary file
|
images/os/winme.png
ADDED
Binary file
|
images/os/winnt.png
ADDED
Binary file
|
images/os/winunknown.png
ADDED
Binary file
|
images/os/winxbox.png
ADDED
Binary file
|
images/os/winxp.png
ADDED
Binary file
|
images/pixel_track.png
ADDED
Binary file
|
images/pretty-link-48x48.png
ADDED
Binary file
|
images/pretty-link-add.png
ADDED
Binary file
|
images/pretty-link-med.png
ADDED
Binary file
|
images/pretty-link-small.png
ADDED
Binary file
|
images/prettylink_logo.jpg
ADDED
Binary file
|
images/prettylink_logo_med.jpg
ADDED
Binary file
|
images/prettylink_logo_small.jpg
ADDED
Binary file
|
images/reddit_32.png
ADDED
Binary file
|
images/stumbleupon_32.png
ADDED
Binary file
|
images/technorati_32.png
ADDED
Binary file
|
images/tracking.png
ADDED
Binary file
|
images/twitter.png
ADDED
Binary file
|
images/twitter_32.png
ADDED
Binary file
|
images/ultra-cloak.png
ADDED
Binary file
|
images/url_icon.gif
ADDED
Binary file
|
images/whatever.txt
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
wget http://speckyboy.com/wp-content/plugins/sociable/images/delicious_32.png
|
2 |
+
wget http://speckyboy.com/wp-content/plugins/sociable/images/stumbleupon_32.png
|
3 |
+
wget http://speckyboy.com/wp-content/plugins/sociable/images/digg_32.png
|
4 |
+
wget http://speckyboy.com/wp-content/plugins/sociable/images/twitter_32.png
|
5 |
+
wget http://speckyboy.com/wp-content/plugins/sociable/images/mixx_32.png
|
6 |
+
wget http://speckyboy.com/wp-content/plugins/sociable/images/technorati_32.png
|
7 |
+
wget http://speckyboy.com/wp-content/plugins/sociable/images/facebook_32.png
|
8 |
+
wget http://speckyboy.com/wp-content/plugins/sociable/images/newsvine_32.png
|
9 |
+
wget http://speckyboy.com/wp-content/plugins/sociable/images/reddit_32.png
|
10 |
+
wget http://speckyboy.com/wp-content/plugins/sociable/images/linkedin_32.png
|
11 |
+
wget http://speckyboy.com/wp-content/plugins/sociable/images/co.mments.gif
|
12 |
+
wget http://speckyboy.com/wp-content/plugins/sociable/images/yahoobuzz_32.png
|
13 |
+
wget http://speckyboy.com/wp-content/plugins/sociable/images/email_32.png
|
images/yahoobuzz_32.png
ADDED
Binary file
|
includes/jquery/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png
ADDED
Binary file
|
includes/jquery/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png
ADDED
Binary file
|
includes/jquery/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png
ADDED
Binary file
|
includes/jquery/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png
ADDED
Binary file
|
includes/jquery/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png
ADDED
Binary file
|
includes/jquery/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png
ADDED
Binary file
|
includes/jquery/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png
ADDED
Binary file
|
includes/jquery/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
ADDED
Binary file
|
includes/jquery/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
ADDED
Binary file
|
includes/jquery/css/ui-lightness/images/ui-icons_222222_256x240.png
ADDED
Binary file
|
includes/jquery/css/ui-lightness/images/ui-icons_228ef1_256x240.png
ADDED
Binary file
|
includes/jquery/css/ui-lightness/images/ui-icons_ef8c08_256x240.png
ADDED
Binary file
|
includes/jquery/css/ui-lightness/images/ui-icons_ffd27a_256x240.png
ADDED
Binary file
|
includes/jquery/css/ui-lightness/images/ui-icons_ffffff_256x240.png
ADDED
Binary file
|
includes/jquery/css/ui-lightness/jquery-ui-1.7.1.custom.css
ADDED
@@ -0,0 +1,404 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* jQuery UI CSS Framework
|
3 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
4 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
|
5 |
+
*/
|
6 |
+
|
7 |
+
/* Layout helpers
|
8 |
+
----------------------------------*/
|
9 |
+
.ui-helper-hidden { display: none; }
|
10 |
+
.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
|
11 |
+
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
|
12 |
+
.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
|
13 |
+
.ui-helper-clearfix { display: inline-block; }
|
14 |
+
/* required comment for clearfix to work in Opera \*/
|
15 |
+
* html .ui-helper-clearfix { height:1%; }
|
16 |
+
.ui-helper-clearfix { display:block; }
|
17 |
+
/* end clearfix */
|
18 |
+
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
|
19 |
+
|
20 |
+
|
21 |
+
/* Interaction Cues
|
22 |
+
----------------------------------*/
|
23 |
+
.ui-state-disabled { cursor: default !important; }
|
24 |
+
|
25 |
+
|
26 |
+
/* Icons
|
27 |
+
----------------------------------*/
|
28 |
+
|
29 |
+
/* states and images */
|
30 |
+
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
|
31 |
+
|
32 |
+
|
33 |
+
/* Misc visuals
|
34 |
+
----------------------------------*/
|
35 |
+
|
36 |
+
/* Overlays */
|
37 |
+
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
|
38 |
+
|
39 |
+
/*
|
40 |
+
* jQuery UI CSS Framework
|
41 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
42 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
|
43 |
+
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
|
44 |
+
*/
|
45 |
+
|
46 |
+
|
47 |
+
/* Component containers
|
48 |
+
----------------------------------*/
|
49 |
+
.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
|
50 |
+
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
|
51 |
+
.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; }
|
52 |
+
.ui-widget-content a { color: #333333; }
|
53 |
+
.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
|
54 |
+
.ui-widget-header a { color: #ffffff; }
|
55 |
+
|
56 |
+
/* Interaction states
|
57 |
+
----------------------------------*/
|
58 |
+
.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; outline: none; }
|
59 |
+
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; outline: none; }
|
60 |
+
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; outline: none; }
|
61 |
+
.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; outline: none; }
|
62 |
+
.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; outline: none; }
|
63 |
+
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; outline: none; text-decoration: none; }
|
64 |
+
|
65 |
+
/* Interaction Cues
|
66 |
+
----------------------------------*/
|
67 |
+
.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
|
68 |
+
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; }
|
69 |
+
.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; }
|
70 |
+
.ui-state-error a, .ui-widget-content .ui-state-error a { color: #ffffff; }
|
71 |
+
.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #ffffff; }
|
72 |
+
.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
|
73 |
+
.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; }
|
74 |
+
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
|
75 |
+
|
76 |
+
/* Icons
|
77 |
+
----------------------------------*/
|
78 |
+
|
79 |
+
/* states and images */
|
80 |
+
.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
|
81 |
+
.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
|
82 |
+
.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
|
83 |
+
.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); }
|
84 |
+
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
|
85 |
+
.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
|
86 |
+
.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); }
|
87 |
+
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); }
|
88 |
+
|
89 |
+
/* positioning */
|
90 |
+
.ui-icon-carat-1-n { background-position: 0 0; }
|
91 |
+
.ui-icon-carat-1-ne { background-position: -16px 0; }
|
92 |
+
.ui-icon-carat-1-e { background-position: -32px 0; }
|
93 |
+
.ui-icon-carat-1-se { background-position: -48px 0; }
|
94 |
+
.ui-icon-carat-1-s { background-position: -64px 0; }
|
95 |
+
.ui-icon-carat-1-sw { background-position: -80px 0; }
|
96 |
+
.ui-icon-carat-1-w { background-position: -96px 0; }
|
97 |
+
.ui-icon-carat-1-nw { background-position: -112px 0; }
|
98 |
+
.ui-icon-carat-2-n-s { background-position: -128px 0; }
|
99 |
+
.ui-icon-carat-2-e-w { background-position: -144px 0; }
|
100 |
+
.ui-icon-triangle-1-n { background-position: 0 -16px; }
|
101 |
+
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
|
102 |
+
.ui-icon-triangle-1-e { background-position: -32px -16px; }
|
103 |
+
.ui-icon-triangle-1-se { background-position: -48px -16px; }
|
104 |
+
.ui-icon-triangle-1-s { background-position: -64px -16px; }
|
105 |
+
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
|
106 |
+
.ui-icon-triangle-1-w { background-position: -96px -16px; }
|
107 |
+
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
|
108 |
+
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
|
109 |
+
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
|
110 |
+
.ui-icon-arrow-1-n { background-position: 0 -32px; }
|
111 |
+
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
|
112 |
+
.ui-icon-arrow-1-e { background-position: -32px -32px; }
|
113 |
+
.ui-icon-arrow-1-se { background-position: -48px -32px; }
|
114 |
+
.ui-icon-arrow-1-s { background-position: -64px -32px; }
|
115 |
+
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
|
116 |
+
.ui-icon-arrow-1-w { background-position: -96px -32px; }
|
117 |
+
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
|
118 |
+
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
|
119 |
+
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
|
120 |
+
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
|
121 |
+
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
|
122 |
+
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
|
123 |
+
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
|
124 |
+
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
|
125 |
+
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
|
126 |
+
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
|
127 |
+
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
|
128 |
+
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
|
129 |
+
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
|
130 |
+
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
|
131 |
+
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
|
132 |
+
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
|
133 |
+
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
|
134 |
+
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
|
135 |
+
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
|
136 |
+
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
|
137 |
+
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
|
138 |
+
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
|
139 |
+
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
|
140 |
+
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
|
141 |
+
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
|
142 |
+
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
|
143 |
+
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
|
144 |
+
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
|
145 |
+
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
|
146 |
+
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
|
147 |
+
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
|
148 |
+
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
|
149 |
+
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
|
150 |
+
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
|
151 |
+
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
|
152 |
+
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
|
153 |
+
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
|
154 |
+
.ui-icon-arrow-4 { background-position: 0 -80px; }
|
155 |
+
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
|
156 |
+
.ui-icon-extlink { background-position: -32px -80px; }
|
157 |
+
.ui-icon-newwin { background-position: -48px -80px; }
|
158 |
+
.ui-icon-refresh { background-position: -64px -80px; }
|
159 |
+
.ui-icon-shuffle { background-position: -80px -80px; }
|
160 |
+
.ui-icon-transfer-e-w { background-position: -96px -80px; }
|
161 |
+
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
|
162 |
+
.ui-icon-folder-collapsed { background-position: 0 -96px; }
|
163 |
+
.ui-icon-folder-open { background-position: -16px -96px; }
|
164 |
+
.ui-icon-document { background-position: -32px -96px; }
|
165 |
+
.ui-icon-document-b { background-position: -48px -96px; }
|
166 |
+
.ui-icon-note { background-position: -64px -96px; }
|
167 |
+
.ui-icon-mail-closed { background-position: -80px -96px; }
|
168 |
+
.ui-icon-mail-open { background-position: -96px -96px; }
|
169 |
+
.ui-icon-suitcase { background-position: -112px -96px; }
|
170 |
+
.ui-icon-comment { background-position: -128px -96px; }
|
171 |
+
.ui-icon-person { background-position: -144px -96px; }
|
172 |
+
.ui-icon-print { background-position: -160px -96px; }
|
173 |
+
.ui-icon-trash { background-position: -176px -96px; }
|
174 |
+
.ui-icon-locked { background-position: -192px -96px; }
|
175 |
+
.ui-icon-unlocked { background-position: -208px -96px; }
|
176 |
+
.ui-icon-bookmark { background-position: -224px -96px; }
|
177 |
+
.ui-icon-tag { background-position: -240px -96px; }
|
178 |
+
.ui-icon-home { background-position: 0 -112px; }
|
179 |
+
.ui-icon-flag { background-position: -16px -112px; }
|
180 |
+
.ui-icon-calendar { background-position: -32px -112px; }
|
181 |
+
.ui-icon-cart { background-position: -48px -112px; }
|
182 |
+
.ui-icon-pencil { background-position: -64px -112px; }
|
183 |
+
.ui-icon-clock { background-position: -80px -112px; }
|
184 |
+
.ui-icon-disk { background-position: -96px -112px; }
|
185 |
+
.ui-icon-calculator { background-position: -112px -112px; }
|
186 |
+
.ui-icon-zoomin { background-position: -128px -112px; }
|
187 |
+
.ui-icon-zoomout { background-position: -144px -112px; }
|
188 |
+
.ui-icon-search { background-position: -160px -112px; }
|
189 |
+
.ui-icon-wrench { background-position: -176px -112px; }
|
190 |
+
.ui-icon-gear { background-position: -192px -112px; }
|
191 |
+
.ui-icon-heart { background-position: -208px -112px; }
|
192 |
+
.ui-icon-star { background-position: -224px -112px; }
|
193 |
+
.ui-icon-link { background-position: -240px -112px; }
|
194 |
+
.ui-icon-cancel { background-position: 0 -128px; }
|
195 |
+
.ui-icon-plus { background-position: -16px -128px; }
|
196 |
+
.ui-icon-plusthick { background-position: -32px -128px; }
|
197 |
+
.ui-icon-minus { background-position: -48px -128px; }
|
198 |
+
.ui-icon-minusthick { background-position: -64px -128px; }
|
199 |
+
.ui-icon-close { background-position: -80px -128px; }
|
200 |
+
.ui-icon-closethick { background-position: -96px -128px; }
|
201 |
+
.ui-icon-key { background-position: -112px -128px; }
|
202 |
+
.ui-icon-lightbulb { background-position: -128px -128px; }
|
203 |
+
.ui-icon-scissors { background-position: -144px -128px; }
|
204 |
+
.ui-icon-clipboard { background-position: -160px -128px; }
|
205 |
+
.ui-icon-copy { background-position: -176px -128px; }
|
206 |
+
.ui-icon-contact { background-position: -192px -128px; }
|
207 |
+
.ui-icon-image { background-position: -208px -128px; }
|
208 |
+
.ui-icon-video { background-position: -224px -128px; }
|
209 |
+
.ui-icon-script { background-position: -240px -128px; }
|
210 |
+
.ui-icon-alert { background-position: 0 -144px; }
|
211 |
+
.ui-icon-info { background-position: -16px -144px; }
|
212 |
+
.ui-icon-notice { background-position: -32px -144px; }
|
213 |
+
.ui-icon-help { background-position: -48px -144px; }
|
214 |
+
.ui-icon-check { background-position: -64px -144px; }
|
215 |
+
.ui-icon-bullet { background-position: -80px -144px; }
|
216 |
+
.ui-icon-radio-off { background-position: -96px -144px; }
|
217 |
+
.ui-icon-radio-on { background-position: -112px -144px; }
|
218 |
+
.ui-icon-pin-w { background-position: -128px -144px; }
|
219 |
+
.ui-icon-pin-s { background-position: -144px -144px; }
|
220 |
+
.ui-icon-play { background-position: 0 -160px; }
|
221 |
+
.ui-icon-pause { background-position: -16px -160px; }
|
222 |
+
.ui-icon-seek-next { background-position: -32px -160px; }
|
223 |
+
.ui-icon-seek-prev { background-position: -48px -160px; }
|
224 |
+
.ui-icon-seek-end { background-position: -64px -160px; }
|
225 |
+
.ui-icon-seek-first { background-position: -80px -160px; }
|
226 |
+
.ui-icon-stop { background-position: -96px -160px; }
|
227 |
+
.ui-icon-eject { background-position: -112px -160px; }
|
228 |
+
.ui-icon-volume-off { background-position: -128px -160px; }
|
229 |
+
.ui-icon-volume-on { background-position: -144px -160px; }
|
230 |
+
.ui-icon-power { background-position: 0 -176px; }
|
231 |
+
.ui-icon-signal-diag { background-position: -16px -176px; }
|
232 |
+
.ui-icon-signal { background-position: -32px -176px; }
|
233 |
+
.ui-icon-battery-0 { background-position: -48px -176px; }
|
234 |
+
.ui-icon-battery-1 { background-position: -64px -176px; }
|
235 |
+
.ui-icon-battery-2 { background-position: -80px -176px; }
|
236 |
+
.ui-icon-battery-3 { background-position: -96px -176px; }
|
237 |
+
.ui-icon-circle-plus { background-position: 0 -192px; }
|
238 |
+
.ui-icon-circle-minus { background-position: -16px -192px; }
|
239 |
+
.ui-icon-circle-close { background-position: -32px -192px; }
|
240 |
+
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
|
241 |
+
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
|
242 |
+
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
|
243 |
+
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
|
244 |
+
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
|
245 |
+
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
|
246 |
+
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
|
247 |
+
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
|
248 |
+
.ui-icon-circle-zoomin { background-position: -176px -192px; }
|
249 |
+
.ui-icon-circle-zoomout { background-position: -192px -192px; }
|
250 |
+
.ui-icon-circle-check { background-position: -208px -192px; }
|
251 |
+
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
|
252 |
+
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
|
253 |
+
.ui-icon-circlesmall-close { background-position: -32px -208px; }
|
254 |
+
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
|
255 |
+
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
|
256 |
+
.ui-icon-squaresmall-close { background-position: -80px -208px; }
|
257 |
+
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
|
258 |
+
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
|
259 |
+
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
|
260 |
+
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
|
261 |
+
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
|
262 |
+
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
|
263 |
+
|
264 |
+
|
265 |
+
/* Misc visuals
|
266 |
+
----------------------------------*/
|
267 |
+
|
268 |
+
/* Corner radius */
|
269 |
+
.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; }
|
270 |
+
.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
|
271 |
+
.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
|
272 |
+
.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
|
273 |
+
.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
|
274 |
+
.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
|
275 |
+
.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
|
276 |
+
.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
|
277 |
+
.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; }
|
278 |
+
|
279 |
+
/* Overlays */
|
280 |
+
.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
|
281 |
+
.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; }/* Accordion
|
282 |
+
----------------------------------*/
|
283 |
+
.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
|
284 |
+
.ui-accordion .ui-accordion-li-fix { display: inline; }
|
285 |
+
.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
|
286 |
+
.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; }
|
287 |
+
.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
|
288 |
+
.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; }
|
289 |
+
.ui-accordion .ui-accordion-content-active { display: block; }/* Datepicker
|
290 |
+
----------------------------------*/
|
291 |
+
.ui-datepicker { width: 17em; padding: .2em .2em 0; }
|
292 |
+
.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
|
293 |
+
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
|
294 |
+
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
|
295 |
+
.ui-datepicker .ui-datepicker-prev { left:2px; }
|
296 |
+
.ui-datepicker .ui-datepicker-next { right:2px; }
|
297 |
+
.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
|
298 |
+
.ui-datepicker .ui-datepicker-next-hover { right:1px; }
|
299 |
+
.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
|
300 |
+
.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
|
301 |
+
.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; }
|
302 |
+
.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
|
303 |
+
.ui-datepicker select.ui-datepicker-month,
|
304 |
+
.ui-datepicker select.ui-datepicker-year { width: 49%;}
|
305 |
+
.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; }
|
306 |
+
.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
|
307 |
+
.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
|
308 |
+
.ui-datepicker td { border: 0; padding: 1px; }
|
309 |
+
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
|
310 |
+
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
|
311 |
+
.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
|
312 |
+
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
|
313 |
+
|
314 |
+
/* with multiple calendars */
|
315 |
+
.ui-datepicker.ui-datepicker-multi { width:auto; }
|
316 |
+
.ui-datepicker-multi .ui-datepicker-group { float:left; }
|
317 |
+
.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
|
318 |
+
.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
|
319 |
+
.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
|
320 |
+
.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
|
321 |
+
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
|
322 |
+
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
|
323 |
+
.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
|
324 |
+
.ui-datepicker-row-break { clear:both; width:100%; }
|
325 |
+
|
326 |
+
/* RTL support */
|
327 |
+
.ui-datepicker-rtl { direction: rtl; }
|
328 |
+
.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
|
329 |
+
.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
|
330 |
+
.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
|
331 |
+
.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
|
332 |
+
.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
|
333 |
+
.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
|
334 |
+
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
|
335 |
+
.ui-datepicker-rtl .ui-datepicker-group { float:right; }
|
336 |
+
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
|
337 |
+
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
|
338 |
+
|
339 |
+
/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
|
340 |
+
.ui-datepicker-cover {
|
341 |
+
display: none; /*sorry for IE5*/
|
342 |
+
display/**/: block; /*sorry for IE5*/
|
343 |
+
position: absolute; /*must have*/
|
344 |
+
z-index: -1; /*must have*/
|
345 |
+
filter: mask(); /*must have*/
|
346 |
+
top: -4px; /*must have*/
|
347 |
+
left: -4px; /*must have*/
|
348 |
+
width: 200px; /*must have*/
|
349 |
+
height: 200px; /*must have*/
|
350 |
+
}/* Dialog
|
351 |
+
----------------------------------*/
|
352 |
+
.ui-dialog { position: relative; padding: .2em; width: 300px; }
|
353 |
+
.ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative; }
|
354 |
+
.ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; }
|
355 |
+
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
|
356 |
+
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
|
357 |
+
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
|
358 |
+
.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
|
359 |
+
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
|
360 |
+
.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
|
361 |
+
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
|
362 |
+
.ui-draggable .ui-dialog-titlebar { cursor: move; }
|
363 |
+
/* Progressbar
|
364 |
+
----------------------------------*/
|
365 |
+
.ui-progressbar { height:2em; text-align: left; }
|
366 |
+
.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* Resizable
|
367 |
+
----------------------------------*/
|
368 |
+
.ui-resizable { position: relative;}
|
369 |
+
.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
|
370 |
+
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
|
371 |
+
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; }
|
372 |
+
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; }
|
373 |
+
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; }
|
374 |
+
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; }
|
375 |
+
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
|
376 |
+
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
|
377 |
+
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
|
378 |
+
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Slider
|
379 |
+
----------------------------------*/
|
380 |
+
.ui-slider { position: relative; text-align: left; }
|
381 |
+
.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
|
382 |
+
.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; }
|
383 |
+
|
384 |
+
.ui-slider-horizontal { height: .8em; }
|
385 |
+
.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
|
386 |
+
.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
|
387 |
+
.ui-slider-horizontal .ui-slider-range-min { left: 0; }
|
388 |
+
.ui-slider-horizontal .ui-slider-range-max { right: 0; }
|
389 |
+
|
390 |
+
.ui-slider-vertical { width: .8em; height: 100px; }
|
391 |
+
.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
|
392 |
+
.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
|
393 |
+
.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
|
394 |
+
.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs
|
395 |
+
----------------------------------*/
|
396 |
+
.ui-tabs { padding: .2em; zoom: 1; }
|
397 |
+
.ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; }
|
398 |
+
.ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; }
|
399 |
+
.ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; }
|
400 |
+
.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; }
|
401 |
+
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
|
402 |
+
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
|
403 |
+
.ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; }
|
404 |
+
.ui-tabs .ui-tabs-hide { display: none !important; }
|
includes/jquery/js/jquery-1.3.2.min.js
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* jQuery JavaScript Library v1.3.2
|
3 |
+
* http://jquery.com/
|
4 |
+
*
|
5 |
+
* Copyright (c) 2009 John Resig
|
6 |
+
* Dual licensed under the MIT and GPL licenses.
|
7 |
+
* http://docs.jquery.com/License
|
8 |
+
*
|
9 |
+
* Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
|
10 |
+
* Revision: 6246
|
11 |
+
*/
|
12 |
+
(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
|
13 |
+
/*
|
14 |
+
* Sizzle CSS Selector Engine - v0.9.3
|
15 |
+
* Copyright 2009, The Dojo Foundation
|
16 |
+
* Released under the MIT, BSD, and GPL Licenses.
|
17 |
+
* More information: http://sizzlejs.com/
|
18 |
+
*/
|
19 |
+
(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML=' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
|
includes/jquery/js/jquery-ui-1.7.1.custom.min.js
ADDED
@@ -0,0 +1,273 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* jQuery UI 1.7.1
|
3 |
+
*
|
4 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
5 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
6 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
7 |
+
*
|
8 |
+
* http://docs.jquery.com/UI
|
9 |
+
*/
|
10 |
+
* jQuery UI Draggable 1.7.1
|
11 |
+
*
|
12 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
13 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
14 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
15 |
+
*
|
16 |
+
* http://docs.jquery.com/UI/Draggables
|
17 |
+
*
|
18 |
+
* Depends:
|
19 |
+
* ui.core.js
|
20 |
+
*/
|
21 |
+
* jQuery UI Droppable 1.7.1
|
22 |
+
*
|
23 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
24 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
25 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
26 |
+
*
|
27 |
+
* http://docs.jquery.com/UI/Droppables
|
28 |
+
*
|
29 |
+
* Depends:
|
30 |
+
* ui.core.js
|
31 |
+
* ui.draggable.js
|
32 |
+
*/
|
33 |
+
* jQuery UI Resizable 1.7.1
|
34 |
+
*
|
35 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
36 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
37 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
38 |
+
*
|
39 |
+
* http://docs.jquery.com/UI/Resizables
|
40 |
+
*
|
41 |
+
* Depends:
|
42 |
+
* ui.core.js
|
43 |
+
*/
|
44 |
+
* jQuery UI Selectable 1.7.1
|
45 |
+
*
|
46 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
47 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
48 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
49 |
+
*
|
50 |
+
* http://docs.jquery.com/UI/Selectables
|
51 |
+
*
|
52 |
+
* Depends:
|
53 |
+
* ui.core.js
|
54 |
+
*/
|
55 |
+
* jQuery UI Sortable 1.7.1
|
56 |
+
*
|
57 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
58 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
59 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
60 |
+
*
|
61 |
+
* http://docs.jquery.com/UI/Sortables
|
62 |
+
*
|
63 |
+
* Depends:
|
64 |
+
* ui.core.js
|
65 |
+
*/
|
66 |
+
* jQuery UI Accordion 1.7.1
|
67 |
+
*
|
68 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
69 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
70 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
71 |
+
*
|
72 |
+
* http://docs.jquery.com/UI/Accordion
|
73 |
+
*
|
74 |
+
* Depends:
|
75 |
+
* ui.core.js
|
76 |
+
*/
|
77 |
+
* jQuery UI Dialog 1.7.1
|
78 |
+
*
|
79 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
80 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
81 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
82 |
+
*
|
83 |
+
* http://docs.jquery.com/UI/Dialog
|
84 |
+
*
|
85 |
+
* Depends:
|
86 |
+
* ui.core.js
|
87 |
+
* ui.draggable.js
|
88 |
+
* ui.resizable.js
|
89 |
+
*/
|
90 |
+
* jQuery UI Slider 1.7.1
|
91 |
+
*
|
92 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
93 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
94 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
95 |
+
*
|
96 |
+
* http://docs.jquery.com/UI/Slider
|
97 |
+
*
|
98 |
+
* Depends:
|
99 |
+
* ui.core.js
|
100 |
+
*/
|
101 |
+
* jQuery UI Tabs 1.7.1
|
102 |
+
*
|
103 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
104 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
105 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
106 |
+
*
|
107 |
+
* http://docs.jquery.com/UI/Tabs
|
108 |
+
*
|
109 |
+
* Depends:
|
110 |
+
* ui.core.js
|
111 |
+
*/
|
112 |
+
* jQuery UI Datepicker 1.7.1
|
113 |
+
*
|
114 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
115 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
116 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
117 |
+
*
|
118 |
+
* http://docs.jquery.com/UI/Datepicker
|
119 |
+
*
|
120 |
+
* Depends:
|
121 |
+
* ui.core.js
|
122 |
+
*/
|
123 |
+
* jQuery UI Progressbar 1.7.1
|
124 |
+
*
|
125 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
126 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
127 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
128 |
+
*
|
129 |
+
* http://docs.jquery.com/UI/Progressbar
|
130 |
+
*
|
131 |
+
* Depends:
|
132 |
+
* ui.core.js
|
133 |
+
*/
|
134 |
+
* jQuery UI Effects 1.7.1
|
135 |
+
*
|
136 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
137 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
138 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
139 |
+
*
|
140 |
+
* http://docs.jquery.com/UI/Effects/
|
141 |
+
*/
|
142 |
+
* jQuery UI Effects Blind 1.7.1
|
143 |
+
*
|
144 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
145 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
146 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
147 |
+
*
|
148 |
+
* http://docs.jquery.com/UI/Effects/Blind
|
149 |
+
*
|
150 |
+
* Depends:
|
151 |
+
* effects.core.js
|
152 |
+
*/
|
153 |
+
* jQuery UI Effects Bounce 1.7.1
|
154 |
+
*
|
155 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
156 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
157 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
158 |
+
*
|
159 |
+
* http://docs.jquery.com/UI/Effects/Bounce
|
160 |
+
*
|
161 |
+
* Depends:
|
162 |
+
* effects.core.js
|
163 |
+
*/
|
164 |
+
* jQuery UI Effects Clip 1.7.1
|
165 |
+
*
|
166 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
167 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
168 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
169 |
+
*
|
170 |
+
* http://docs.jquery.com/UI/Effects/Clip
|
171 |
+
*
|
172 |
+
* Depends:
|
173 |
+
* effects.core.js
|
174 |
+
*/
|
175 |
+
* jQuery UI Effects Drop 1.7.1
|
176 |
+
*
|
177 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
178 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
179 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
180 |
+
*
|
181 |
+
* http://docs.jquery.com/UI/Effects/Drop
|
182 |
+
*
|
183 |
+
* Depends:
|
184 |
+
* effects.core.js
|
185 |
+
*/
|
186 |
+
* jQuery UI Effects Explode 1.7.1
|
187 |
+
*
|
188 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
189 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
190 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
191 |
+
*
|
192 |
+
* http://docs.jquery.com/UI/Effects/Explode
|
193 |
+
*
|
194 |
+
* Depends:
|
195 |
+
* effects.core.js
|
196 |
+
*/
|
197 |
+
* jQuery UI Effects Fold 1.7.1
|
198 |
+
*
|
199 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
200 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
201 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
202 |
+
*
|
203 |
+
* http://docs.jquery.com/UI/Effects/Fold
|
204 |
+
*
|
205 |
+
* Depends:
|
206 |
+
* effects.core.js
|
207 |
+
*/
|
208 |
+
* jQuery UI Effects Highlight 1.7.1
|
209 |
+
*
|
210 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
211 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
212 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
213 |
+
*
|
214 |
+
* http://docs.jquery.com/UI/Effects/Highlight
|
215 |
+
*
|
216 |
+
* Depends:
|
217 |
+
* effects.core.js
|
218 |
+
*/
|
219 |
+
* jQuery UI Effects Pulsate 1.7.1
|
220 |
+
*
|
221 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
222 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
223 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
224 |
+
*
|
225 |
+
* http://docs.jquery.com/UI/Effects/Pulsate
|
226 |
+
*
|
227 |
+
* Depends:
|
228 |
+
* effects.core.js
|
229 |
+
*/
|
230 |
+
* jQuery UI Effects Scale 1.7.1
|
231 |
+
*
|
232 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
233 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
234 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
235 |
+
*
|
236 |
+
* http://docs.jquery.com/UI/Effects/Scale
|
237 |
+
*
|
238 |
+
* Depends:
|
239 |
+
* effects.core.js
|
240 |
+
*/
|
241 |
+
* jQuery UI Effects Shake 1.7.1
|
242 |
+
*
|
243 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
244 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
245 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
246 |
+
*
|
247 |
+
* http://docs.jquery.com/UI/Effects/Shake
|
248 |
+
*
|
249 |
+
* Depends:
|
250 |
+
* effects.core.js
|
251 |
+
*/
|
252 |
+
* jQuery UI Effects Slide 1.7.1
|
253 |
+
*
|
254 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
255 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
256 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
257 |
+
*
|
258 |
+
* http://docs.jquery.com/UI/Effects/Slide
|
259 |
+
*
|
260 |
+
* Depends:
|
261 |
+
* effects.core.js
|
262 |
+
*/
|
263 |
+
* jQuery UI Effects Transfer 1.7.1
|
264 |
+
*
|
265 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
266 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
267 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
268 |
+
*
|
269 |
+
* http://docs.jquery.com/UI/Effects/Transfer
|
270 |
+
*
|
271 |
+
* Depends:
|
272 |
+
* effects.core.js
|
273 |
+
*/
|
includes/php/php_browsecap.ini
ADDED
@@ -0,0 +1,16939 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|