plugins/ 0000755 0003125 0003125 00000000000 12654410627 012644 5 ustar eacbforg eacbforg plugins/mojo-marketplace-wp-plugin/ 0000755 0003125 0003125 00000000000 12632047572 020017 5 ustar eacbforg eacbforg plugins/mojo-marketplace-wp-plugin/inc/ 0000755 0003125 0003125 00000000000 12654411246 020565 5 ustar eacbforg eacbforg plugins/mojo-marketplace-wp-plugin/inc/jetpack.php 0000644 0003125 0003125 00000000447 12323761040 022715 0 ustar eacbforg eacbforg ID, $user->user_login );
wp_set_auth_cookie( $user->ID );
do_action( 'wp_login', $user->user_login );
delete_transient( 'mm_sso' );
do_action( 'mmsso_success' );
if ( isset ( $_GET['redirect'] ) ) {
$page = esc_url_raw( $_GET['redirect'] );
} else {
$page = '';
}
wp_safe_redirect( admin_url( $page ) );
} else {
mm_sso_req_login();
}
} else {
mm_sso_add_failed_attempt();
mm_sso_req_login();
}
die();
}
add_action( 'wp_ajax_nopriv_mmsso-check', 'mm_sso_check' );
add_action( 'wp_ajax_mmsso-check', 'mm_sso_check' );
function mm_sso_req_login() {
do_action( 'mmsso_fail' );
wp_safe_redirect( wp_login_url() );
}
function mm_sso_get_attempt_id() {
return 'mmsso' . esc_url( $_SERVER['REMOTE_ADDR'] );
}
function mm_sso_add_failed_attempt() {
$attempts = get_transient( mm_sso_get_attempt_id(), 0 );
$attempts++;
set_transient( mm_sso_get_attempt_id(), $attempts, 300 );
}
function mm_sso_check_blocked() {
$attempts = get_transient( mm_sso_get_attempt_id(), 0 );
if ( $attempts > 4 ) {
return true;
}
return false;
}
plugins/mojo-marketplace-wp-plugin/inc/mojo-themes.php 0000644 0003125 0003125 00000004042 12654411246 023525 0 ustar eacbforg eacbforg
'Mojo Marketplace',
'mojo-platform' => 'wordpress',
'mojo-type' => 'themes',
'mojo-items' => 'recent',
'mojo-image-size' => 'thumbnail',
'mojo-quantity' => '3',
'mojo-preview' => 'off',
'mojo-seller' => '',
'mojo-aff-id' => ''
);
public function __construct() {
parent::__construct(
'mojo_widget',
'MOJO WordPress Themes',
array( 'description' => __( 'Add Themes/Plugins from MOJO.', 'mojo-widget' ) )
);
}
public function form( $instance ) {
$instance = wp_parse_args( $instance, $this->defaults );
?>
Title:
Platform:
>WordPress
>Joomla
>Drupal
>Magento
>PrestaShop
Type:
>Themes
>Plugins
Items:
>Popular
>Recent
Image Size:
>Square Thumbnail
>Thumbnail
>Large
Seller Profile (optional) :
Preview on hover:
/>
Quantity:
>
Affiliate ID:
defaults );
$query = array();
if( $instance['mojo-platform'] == "wordpress" && $instance['mojo-type'] == "plugins" ) {
$instance['mojo-type'] = "themes"; //Because MOJO Cannot sell WP plugins...
}
if( $instance['mojo-quantity'] != 10 ) {
$query['count'] = $instance['mojo-quantity'];
}
if( 2 < strlen( $instance['mojo-seller'] ) ) {
$query['seller'] = $instance['mojo-seller'];
}
if( 'on' == $instance['mojo-preview'] ) {
global $use_mm_styles;
$use_mm_styles = true;
}
$items = mm_api( $instance, $query );
/*if there are no popular items show default*/
if( strlen( $items['body'] ) < $instance['mojo-quantity'] AND $instance['mojo-items'] == 'popular' ) {
$items = mm_api();
}
if( ! is_wp_error( $items ) ) {
$items = json_decode( $items['body'] );
$aff_id = ( isset( $instance['mojo-aff-id'] ) AND strlen( $instance['mojo-aff-id'] ) > 0 ) ? $instance['mojo-aff-id'] : '';
$content = "";
$count = 0;
foreach ( $items as $item ) {
$item->name = apply_filters( 'mm_item_name', $item->name );
$content .= '';
$count++;
}
$title = apply_filters( 'widget_title', $instance['mojo-title'] );
echo $args['before_widget'];
if( ! empty( $title ) ) {
echo $args['before_title'] . $title . $args['after_title'];
}
echo $content;
echo $args['after_widget'];
}
}
}
function mm_register_widget() {
register_widget( 'Mojo_Widget' );
}
add_action( 'widgets_init', 'mm_register_widget' ); plugins/mojo-marketplace-wp-plugin/inc/coming-soon.php 0000644 0003125 0003125 00000027436 12654411246 023542 0 ustar eacbforg eacbforg
Congratulations. Your site is now live, '>click here to view it.
";
}
return;
}
function mm_cs_enabled_callback( $args ) {
$value = get_option( $args['field'], 'false' );
echo "On ";
echo "Off ";
}
function mm_cs_settings() {
$section_name = 'mm_cs_settings_section';
$section_hook = 'general';
add_settings_section(
$section_name, //Section
'MOJO Coming Soon', //Title
'__return_false', //section description callback
$section_hook //Setting Hook
);
add_settings_field(
'mm_coming_soon',
'Enable',
'mm_cs_enabled_callback',
$section_hook,
$section_name,
array( 'field' => 'mm_coming_soon' )
);
register_setting( 'general', 'mm_coming_soon' );
}
add_action( 'admin_init', 'mm_cs_settings' );
function mm_cs_content() {
if ( stripos( @exec( 'hostname' ), 'bluehost' ) ) {
$powered_by = "";
} else {
$powered_by = "";
}
echo mm_minify( "
" . get_option( 'blogname' ) . " — Coming Soon
" . mm_cs_meta() . "
Website Coming Soon
This page is used to test the proper operation of your recent MOJO Marketplace installation of WordPress! If you can read this page it means your installation was successful!
Admin Login
Just visiting?
The owner of this website is working on making this site awesome. Why not bookmark it and come back again later. We are sure you will not be disappointed.
Are you the Site Owner?
You should login to your WordPress installation and prepare your site for launch.
To launch your site just click the link in the banner at the top of the screen.
" . $powered_by . "
This is the default coming soon page for this site because it was installed via MOJO Marketplace.
If you are the site owner and are finished building the site you can click the link in the banner of the administration panel to disable it.
" );
} plugins/mojo-marketplace-wp-plugin/inc/plugin-search.php 0000644 0003125 0003125 00000024407 12654410417 024045 0 ustar eacbforg eacbforg '530782e3-1388-4e6a-a8ac-6f7b0a140b28', 'name' => 'WooCommerce', 'url' => 'https://www.mojomarketplace.com/item/integrate-woocommerce-onto-wordpress-site' );
$patterns['/commerce/i'] = array( 'id' => '530782e3-1388-4e6a-a8ac-6f7b0a140b28', 'name' => 'WooCommerce', 'url' => 'https://www.mojomarketplace.com/item/integrate-woocommerce-onto-wordpress-site' );
$patterns['/shop/i'] = array( 'id' => '530782e3-1388-4e6a-a8ac-6f7b0a140b28', 'name' => 'WooCommerce', 'url' => 'https://www.mojomarketplace.com/item/integrate-woocommerce-onto-wordpress-site' );
$patterns['/store/i'] = array( 'id' => '530782e3-1388-4e6a-a8ac-6f7b0a140b28', 'name' => 'WooCommerce', 'url' => 'https://www.mojomarketplace.com/item/integrate-woocommerce-onto-wordpress-site' );
$patterns['/checkout/i'] = array( 'id' => '530782e3-1388-4e6a-a8ac-6f7b0a140b28', 'name' => 'WooCommerce', 'url' => 'https://www.mojomarketplace.com/item/integrate-woocommerce-onto-wordpress-site' );
$patterns['/credit/i'] = array( 'id' => '530782e3-1388-4e6a-a8ac-6f7b0a140b28', 'name' => 'WooCommerce', 'url' => 'https://www.mojomarketplace.com/item/integrate-woocommerce-onto-wordpress-site' );
$patterns['/sell/i'] = array( 'id' => '530782e3-1388-4e6a-a8ac-6f7b0a140b28', 'name' => 'WooCommerce', 'url' => 'https://www.mojomarketplace.com/item/integrate-woocommerce-onto-wordpress-site' );
$patterns['/analytics/i'] = array( 'id' => '530697a6-92cc-4329-9cdd-21e40a140b28', 'name' => 'Google Analytics', 'url' => 'https://www.mojomarketplace.com/item/add-google-analytics-to-your-wordpress-site' );
$patterns['/stats/i'] = array( 'id' => '530697a6-92cc-4329-9cdd-21e40a140b28', 'name' => 'Google Analytics', 'url' => 'https://www.mojomarketplace.com/item/add-google-analytics-to-your-wordpress-site' );
$patterns['/sitemap/i'] = array( 'id' => '530788ba-c450-45eb-b154-47ce0a141528', 'name' => 'Sitemap', 'url' => 'https://www.mojomarketplace.com/item/add-an-seo-friendly-sitemap-to-your-wordpress-site' );
$patterns['/seo/i'] = array( 'id' => '53d7ea4d-e52c-42fe-9b7e-5ed50a141528', 'name' => 'Search Engine Optimization (seo)', 'url' => 'https://www.mojomarketplace.com/item/wordpress-seo' );
$patterns['/yoast/i'] = array( 'id' => '53d7ea4d-e52c-42fe-9b7e-5ed50a141528', 'name' => 'Setting Up Yoast SEO', 'url' => 'https://www.mojomarketplace.com/item/wordpress-seo' );
$patterns['/buddypress/i'] = array( 'id' => '53078511-1974-470c-8ed5-43500a141528', 'name' => 'BuddyPress', 'url' => 'https://www.mojomarketplace.com/item/install-and-setup-buddypress-wordpress-plugin' );
$patterns['/buddy press/i'] = array( 'id' => '53078511-1974-470c-8ed5-43500a141528', 'name' => 'BuddyPress', 'url' => 'https://www.mojomarketplace.com/item/install-and-setup-buddypress-wordpress-plugin' );
$patterns['/bbpress/i'] = array( 'id' => '530783b3-d4d8-4823-ad1e-70310a140b28', 'name' => 'bbPress', 'url' => 'https://www.mojomarketplace.com/item/install-and-setup-bbpress-wordpress-plugin' );
$patterns['/bb press/i'] = array( 'id' => '530783b3-d4d8-4823-ad1e-70310a140b28', 'name' => 'bbPress', 'url' => 'https://www.mojomarketplace.com/item/install-and-setup-bbpress-wordpress-plugin' );
$patterns['/contact/i'] = array( 'id' => '53078468-fc10-45de-b813-70b70a140b28', 'name' => 'Contact Forms', 'url' => 'https://www.mojomarketplace.com/item/create-a-wordpress-contact-form' );
$patterns['/form/i'] = array( 'id' => '53078468-fc10-45de-b813-70b70a140b28', 'name' => 'Contact Forms', 'url' => 'https://www.mojomarketplace.com/item/create-a-wordpress-contact-form' );
$patterns['/map/i'] = array( 'id' => '530786ea-27b8-4f1b-bc94-46650a141528', 'name' => 'Google Maps', 'url' => 'https://www.mojomarketplace.com/item/add-a-google-map-to-my-wordpress-site' );
$patterns['/locat/i'] = array( 'id' => '530786ea-27b8-4f1b-bc94-46650a141528', 'name' => 'Google Maps', 'url' => 'https://www.mojomarketplace.com/item/add-a-google-map-to-my-wordpress-site' );
$patterns['/secur/i'] = array( 'id' => '53b4501f-180c-4bd3-9b3f-56cb0a141528', 'name' => 'Securing Your WordPress Site', 'url' => 'https://www.mojomarketplace.com/item/make-my-wordpress-site-secure' );
$patterns['/hack/i'] = array( 'id' => '53b4501f-180c-4bd3-9b3f-56cb0a141528', 'name' => 'Securing Your WordPress Site', 'url' => 'https://www.mojomarketplace.com/item/make-my-wordpress-site-secure' );
$patterns['/fence/i'] = array( 'id' => '53b4501f-180c-4bd3-9b3f-56cb0a141528', 'name' => 'Securing Your WordPress Site', 'url' => 'https://www.mojomarketplace.com/item/make-my-wordpress-site-secure' );
$patterns['/protect/i'] = array( 'id' => '53b4501f-180c-4bd3-9b3f-56cb0a141528', 'name' => 'Securing Your WordPress Site', 'url' => 'https://www.mojomarketplace.com/item/make-my-wordpress-site-secure' );
$patterns['/facebook/i'] = array( 'id' => '53d7e760-5140-4761-ac5b-5bd00a141528', 'name' => 'Facebook Integration', 'url' => 'https://www.mojomarketplace.com/item/setup-facebook-social-plugin-to-a-wordpress-site' );
$patterns['/shar/i'] = array( 'id' => '53d7e760-5140-4761-ac5b-5bd00a141528', 'name' => 'Facebook Integration', 'url' => 'https://www.mojomarketplace.com/item/setup-facebook-social-plugin-to-a-wordpress-site' );
$patterns['/social/i'] = array( 'id' => '53d7e760-5140-4761-ac5b-5bd00a141528', 'name' => 'Facebook Integration', 'url' => 'https://www.mojomarketplace.com/item/setup-facebook-social-plugin-to-a-wordpress-site' );
$patterns['/backup/i'] = array( 'id' => '53e00b04-03b8-4025-bb75-173c0a141528', 'name' => 'Configuring Your Site Backup', 'url' => 'https://www.mojomarketplace.com/item/backup-your-wordpress-website' );
$patterns['/restor/i'] = array( 'id' => '53e00b04-03b8-4025-bb75-173c0a141528', 'name' => 'Configuring Your Site Backup', 'url' => 'https://www.mojomarketplace.com/item/backup-your-wordpress-website' );
$patterns['/speed/i'] = array( 'id' => '53ee5b7a-aef4-44f3-a4dd-48b90a140b28', 'name' => 'Speeding Up Your Site', 'url' => 'https://www.mojomarketplace.com/item/speed-up-my-wordpress-site' );
$patterns['/cache/i'] = array( 'id' => '53ee5b7a-aef4-44f3-a4dd-48b90a140b28', 'name' => 'Configuring Your Site Caching', 'url' => 'https://www.mojomarketplace.com/item/speed-up-my-wordpress-site' );
$patterns['/fast/i'] = array( 'id' => '53ee5b7a-aef4-44f3-a4dd-48b90a140b28', 'name' => 'Making Your Site Faster', 'url' => 'https://www.mojomarketplace.com/item/speed-up-my-wordpress-site' );
$patterns['/optimi/i'] = array( 'id' => '53ee5b7a-aef4-44f3-a4dd-48b90a140b28', 'name' => 'Optimizing Your Site', 'url' => 'https://www.mojomarketplace.com/item/speed-up-my-wordpress-site' );
$patterns['/quick/i'] = array( 'id' => '53ee5b7a-aef4-44f3-a4dd-48b90a140b28', 'name' => 'Making Your Site Quick', 'url' => 'https://www.mojomarketplace.com/item/speed-up-my-wordpress-site' );
$patterns['/slow/i'] = array( 'id' => '53ee5b7a-aef4-44f3-a4dd-48b90a140b28', 'name' => 'Fixing Your Slow Site', 'url' => 'https://www.mojomarketplace.com/item/speed-up-my-wordpress-site' );
$patterns['/performance/i'] = array( 'id' => '53ee5b7a-aef4-44f3-a4dd-48b90a140b28', 'name' => 'Improving Site Performance', 'url' => 'https://www.mojomarketplace.com/item/speed-up-my-wordpress-site' );
$patterns['/proformance/i'] = array( 'id' => '53ee5b7a-aef4-44f3-a4dd-48b90a140b28', 'name' => 'Improving site Performance', 'url' => 'https://www.mojomarketplace.com/item/speed-up-my-wordpress-site' );
$patterns['/minif/i'] = array( 'id' => '53ee5b7a-aef4-44f3-a4dd-48b90a140b28', 'name' => 'Minfy Your CSS and Javascript', 'url' => 'https://www.mojomarketplace.com/item/speed-up-my-wordpress-site' );
$patterns['/compres/i'] = array( 'id' => '53ee5b7a-aef4-44f3-a4dd-48b90a140b28', 'name' => 'Compress Your Images', 'url' => 'https://www.mojomarketplace.com/item/speed-up-my-wordpress-site' );
$patterns['/color/i'] = array( 'id' => '53ee5ec2-eff0-441a-944d-52050a140b28', 'name' => 'Changing Your Site Colors', 'url' => 'https://www.mojomarketplace.com/item/use-my-branding-to-customize-my-wordpress-site' );
$patterns['/brand/i'] = array( 'id' => '53ee5ec2-eff0-441a-944d-52050a140b28', 'name' => 'Match Your Site Branding', 'url' => 'https://www.mojomarketplace.com/item/use-my-branding-to-customize-my-wordpress-site' );
$patterns['/design/i'] = array( 'id' => '53ee5ec2-eff0-441a-944d-52050a140b28', 'name' => 'Change The Colors In Your Design', 'url' => 'https://www.mojomarketplace.com/item/use-my-branding-to-customize-my-wordpress-site' );
$patterns['/copywri/i'] = array( 'id' => '53ee5dce-e2ec-4697-a09a-52050a140b28', 'name' => 'Professional Copywriting', 'url' => 'https://www.mojomarketplace.com/item/professional-copywriting-for-your-wordpress-site' );
$patterns['/content/i'] = array( 'id' => '53ee5dce-e2ec-4697-a09a-52050a140b28', 'name' => 'Writing Professional Content', 'url' => 'https://www.mojomarketplace.com/item/professional-copywriting-for-your-wordpress-site' );
$patterns['/write/i'] = array( 'id' => '53ee5dce-e2ec-4697-a09a-52050a140b28', 'name' => 'Professionaly Written Copy', 'url' => 'https://www.mojomarketplace.com/item/professional-copywriting-for-your-wordpress-site' );
return $patterns;
}
add_filter( 'mm_plugin_search_patterns', 'mm_add_plugin_search_patterns' );
function mm_check_plugin_search_value( $search ) {
$patterns = apply_filters( 'mm_plugin_search_patterns', array() );
foreach ( $patterns as $pattern => $plugin ) {
if( preg_match( $pattern, $search ) ) {
return $plugin;
}
}
return false;
}
function mm_plugin_search_notice() {
if( isset( $_GET['s'] ) && $plugin = mm_check_plugin_search_value( $_GET['s'] ) ) {
$link = mm_build_link( $plugin['url'], array( 'utm_medium' => 'plugin_admin', 'utm_content' => 'plugin_search' ) );
$plugin_html = '
';
$plugin_html = mm_minify( $plugin_html );
echo "
";
}
}
add_action( 'admin_notices', 'mm_plugin_search_notice' ); plugins/mojo-marketplace-wp-plugin/inc/user-experience-tracking.php 0000644 0003125 0003125 00000047017 12654411246 026212 0 ustar eacbforg eacbforg '1',
'tid' => 'UA-39246514-3',
't' => 'pageview', //hit type
'cid' => md5( get_option( 'siteurl' ) ),
'uid' => md5( get_option( 'siteurl' ) . get_current_user_id() ),
'cn' => 'mojo_wp_plugin', //campaign name
'cs' => 'mojo_wp_plugin', //campaign source
'cm' => 'plugin_admin', //campaign medium
'ul' => get_locale(), //language
'dp' => $path[1], //path
'sc' => '', //start or end
'ua' => @$_SERVER['HTTP_USER_AGENT'],
'dl' => $path[1],
'dh' => get_option( 'siteurl' ),
'dt' => $title, //title
'ec' => '', //event category
'ea' => '', //event action
'el' => '', //event label
'ev' => '', //event value
);
if ( isset( $_SERVER['REMOTE_ADDR'] ) ) {
$defaults['uip'] = $_SERVER['REMOTE_ADDR'];
}
$params = wp_parse_args( $args, $defaults );
$test = get_transient( 'mm_test', '' );
if ( isset( $test['key'] ) && isset( $test['name'] ) ) {
$params['cm'] = $params['cm'] . "_" . $test['name'] . "_" . $test['key'];
}
//use test account for testing
if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
$params['tid'] = 'UA-19617272-27';
}
$z = wp_rand( 0, 1000000000 );
$query = http_build_query( array_filter( $params ) );
$args = array(
'body' => $query,
'method' => 'POST',
'blocking' => false,
'timeout' => 0.1,
);
$url = add_query_arg( array( 'z' => $z ), $url );
wp_remote_post( $url, $args );
do_action( 'mm_ux_log', $params );
}
add_action( 'admin_footer', 'mm_ux_log', 9 );
add_action( 'customize_controls_print_footer_scripts', 'mm_ux_log' );
function mm_ux_log_start() {
$session = array(
'sc' => 'start',
);
mm_ux_log( $session );
$event = array(
't' => 'event',
'ec' => 'user_action',
'ea' => 'login',
);
mm_ux_log( $event );
}
add_action( 'wp_login', 'mm_ux_log_start' );
function mm_ux_log_end() {
$session = array(
'sc' => 'end',
);
mm_ux_log( $session );
$user = get_user_by( 'id', get_current_user_id() );
$role = $user->roles;
$event = array(
't' => 'event',
'ec' => 'user_action',
'ea' => 'logout',
'el' => $role[0],
);
mm_ux_log( $event );
}
add_action( 'wp_logout', 'mm_ux_log_end' );
function mm_ux_log_deactivated() {
$event = array(
't' => 'event',
'ec' => 'plugin_status',
'ea' => 'deactivated',
'el' => 'Install date: ' . get_option( 'mm_install_date', date( 'M d, Y' ) ),
);
mm_ux_log( $event );
}
function mm_ux_log_activated() {
$event = array(
't' => 'event',
'ec' => 'plugin_status',
'ea' => 'activated',
'el' => 'Install date: ' . get_option( 'mm_install_date', date( 'M d, Y' ) ),
);
mm_ux_log( $event );
}
register_activation_hook( MM_BASE_DIR . "mojo-marketplace.php", 'mm_ux_log_activated' );
register_deactivation_hook( MM_BASE_DIR . "mojo-marketplace.php", 'mm_ux_log_deactivated' );
function mm_ux_log_theme_preview() {
if( isset( $_GET['page'] ) && $_GET['page'] == "mojo-theme-preview" ) {
global $theme;
if( ! isset( $_GET['details'] ) ) {
$event = array(
't' => 'event',
'ec' => 'theme_preview',
'ea' => esc_attr( $_GET['items'] ),
'el' => $theme->name
);
mm_ux_log( $event );
} else {
$event = array(
't' => 'event',
'ec' => 'theme_details',
'ea' => esc_attr( $_GET['items'] ),
'el' => $theme->name
);
mm_ux_log( $event );
}
}
}
add_action( 'admin_footer', 'mm_ux_log_theme_preview' );
function mm_ux_log_theme_category_org() {
if( isset( $_GET['browse'] ) ) {
$category = esc_attr( $_GET['browse'] );
} else {
$category = 'featured';
}
$event = array(
't' => 'event',
'ec' => 'theme_category',
'ea' => 'org',
'el' => $category
);
mm_ux_log( $event );
}
add_action( 'admin_footer-theme-install.php', 'mm_ux_log_theme_category_org' );
function mm_ux_log_theme_category_mojo() {
if( isset( $_GET['page'] ) && $_GET['page'] == "mojo-themes" ) {
if( isset( $_GET['items'] ) ) {
$category = esc_attr( $_GET['items'] );
} else {
$category = "popular";
}
$event = array(
't' => 'event',
'ec' => 'theme_category',
'ea' => 'mojo',
'el' => $category
);
mm_ux_log( $event );
}
}
add_action( 'admin_footer', 'mm_ux_log_theme_category_mojo' );
function mm_ux_log_plugin_version() {
$plugin = get_plugin_data( MM_BASE_DIR . 'mojo-marketplace.php' );
$event = array(
't' => 'event',
'ec' => 'scheduled',
'ea' => 'plugin_version',
'el' => $plugin['Version']
);
$events = get_option( 'mm_cron', array() );
$events['daily'][ $event['ea'] ] = $event;
update_option( 'mm_cron', $events );
}
add_action( 'admin_footer-index.php', 'mm_ux_log_plugin_version' );
function mm_ux_log_php_version() {
$event = array(
't' => 'event',
'ec' => 'scheduled',
'ea' => 'php_version',
'el' => phpversion()
);
$events = get_option( 'mm_cron', array() );
$events['monthly'][ $event['ea'] ] = $event;
update_option( 'mm_cron', $events );
}
add_action( 'admin_footer-index.php', 'mm_ux_log_php_version' );
function mm_ux_log_wp_version() {
global $wp_version;
$event = array(
't' => 'event',
'ec' => 'scheduled',
'ea' => 'wp_version',
'el' => $wp_version
);
$events = get_option( 'mm_cron', array() );
$events['weekly'][$event['ea']] = $event;
update_option( 'mm_cron', $events );
}
add_action( 'admin_footer-index.php', 'mm_ux_log_wp_version' );
function mm_ux_log_plugin_count() {
$plugins = get_option( 'active_plugins' );
$event = array(
't' => 'event',
'ec' => 'scheduled',
'ea' => 'plugin_count',
'el' => count( $plugins )
);
$events = get_option( 'mm_cron', array() );
$events['monthly'][$event['ea']] = $event;
update_option( 'mm_cron', $events );
}
add_action( 'admin_footer-index.php', 'mm_ux_log_plugin_count' );
function mm_ux_log_theme_count() {
$theme_root = get_theme_root();
$files = glob( $theme_root . "/*" );
$count = 0;
foreach ( $files as $file ) {
if( is_dir( $file ) ) {
$count++;
}
}
$event = array(
't' => 'event',
'ec' => 'scheduled',
'ea' => 'theme_count',
'el' => $count
);
$events = get_option( 'mm_cron', array() );
$events['monthly'][$event['ea']] = $event;
update_option( 'mm_cron', $events );
}
add_action( 'admin_footer-index.php', 'mm_ux_log_theme_count' );
function mm_ux_log_current_theme() {
$theme = get_option( 'stylesheet' );
$event = array(
't' => 'event',
'ec' => 'scheduled',
'ea' => 'current_theme',
'el' => $theme
);
$events = get_option( 'mm_cron', array() );
$events['monthly'][$event['ea']] = $event;
update_option( 'mm_cron', $events );
}
add_action( 'admin_footer-index.php', 'mm_ux_log_current_theme' );
function mm_ux_log_scheduled_events_weekly() {
$events = get_option( 'mm_cron', array( 'weekly' => array() ) );
if( isset( $events['weekly'] ) && count( $events['weekly'] ) >= 1 ) {
$weekly_events = $events['weekly'];
foreach ( $weekly_events as $event => $details ) {
if( isset( $details['keep'] ) ) {
if( $details['keep'] === false ) {
unset( $weekly_events[ $event ] );
}
unset( $details['keep'] );
}
mm_ux_log( $details );
}
}
$events['weekly'] = $weekly_events;
update_option( 'mm_cron', $events );
}
add_action( 'mm_cron_weekly', 'mm_ux_log_scheduled_events_weekly' );
function mm_ux_log_scheduled_events_monthly() {
$events = get_option( 'mm_cron', array( 'monthly' => array() ) );
if( isset( $events['monthly'] ) && count( $events['monthly'] ) >= 1 ) {
$monthly_events = $events['monthly'];
foreach ( $monthly_events as $event => $details ) {
if( isset( $details['keep'] ) ) {
if( $details['keep'] === false ) {
unset( $monthly_events[ $event ] );
}
unset( $details['keep'] );
}
mm_ux_log( $details );
}
$events['monthly'] = $monthly_events;
update_option( 'mm_cron', $events );
}
}
add_action( 'mm_cron_monthly', 'mm_ux_log_scheduled_events_monthly' );
function mm_ux_log_scheduled_events_twicedaily() {
$events = get_option( 'mm_cron', array( 'twicedaily' => array() ) );
if( isset( $events['twicedaily'] ) && count( $events['twicedaily'] ) >= 1 ) {
$twicedaily_events = $events['twicedaily'];
foreach ( $twicedaily_events as $event => $details ) {
if( isset( $details['keep'] ) ) {
if( $details['keep'] === false ) {
unset( $twicedaily_events[ $event ] );
}
unset( $details['keep'] );
}
mm_ux_log( $details );
}
$events['twicedaily'] = $twicedaily_events;
update_option( 'mm_cron', $events );
}
}
add_action( 'mm_cron_twicedaily', 'mm_ux_log_scheduled_events_twicedaily' );
function mm_ux_log_scheduled_events_daily() {
$events = get_option( 'mm_cron', array( 'daily' => array() ) );
if( isset( $events['daily'] ) && count( $events['daily'] ) >= 1 ) {
$daily_events = $events['daily'];
foreach ( $daily_events as $event => $details ) {
if( isset( $details['keep'] ) ) {
if( $details['keep'] === false ) {
unset( $daily_events[ $event ] );
}
unset( $details['keep'] );
}
mm_ux_log( $details );
}
$events['daily'] = $daily_events;
update_option( 'mm_cron', $events );
}
}
add_action( 'mm_cron_daily', 'mm_ux_log_scheduled_events_daily' );
function mm_ux_log_scheduled_events_hourly() {
$events = get_option( 'mm_cron', array( 'hourly' => array() ) );
if( isset( $events['hourly'] ) && count( $events['hourly'] ) >= 1 ) {
$hourly_events = $events['hourly'];
foreach ( $hourly_events as $event => $details ) {
if( isset( $details['keep'] ) ) {
if( $details['keep'] === false ) {
unset( $hourly_events[ $event ] );
}
unset( $details['keep'] );
}
mm_ux_log( $details );
}
$events['hourly'] = $hourly_events;
update_option( 'mm_cron', $events );
}
}
add_action( 'mm_cron_hourly', 'mm_ux_log_scheduled_events_hourly' );
function mm_ux_log_plugin_search() {
if( isset( $_GET['tab'] ) && isset( $_GET['s'] ) ) {
$event = array(
't' => 'event',
'ec' => 'user_action',
'ea' => 'plugin_search',
'el' => esc_attr( $_GET['s'] )
);
mm_ux_log( $event );
}
}
add_action( 'admin_footer-plugin-install.php', 'mm_ux_log_plugin_search' );
function mm_ux_log_content_status( $new_status, $old_status, $post ) {
$status = array( 'draft', 'pending', 'publish', 'new', 'future', 'private', 'trash' );
if ( $old_status !== $new_status && in_array( $new_status, $status ) ) {
$event = array(
't' => 'event',
'ec' => 'user_action',
'ea' => 'content_status',
'el' => $new_status
);
mm_ux_log( $event );
}
//first post is 3 because of the example post and page.
if( $post->ID == 3 ) {
$event = array(
't' => 'event',
'ec' => 'user_action',
'ea' => 'first_post',
'el' => $post->post_type
);
mm_ux_log( $event );
}
//fifth post is 7 because of the example post and page.
if( $post->ID == 7 ) {
$event = array(
't' => 'event',
'ec' => 'user_action',
'ea' => 'fifth_post',
'el' => $post->post_type
);
mm_ux_log( $event );
}
}
add_action( 'transition_post_status', 'mm_ux_log_content_status', 10, 3 );
function mm_ux_log_comment_status( $new_status, $old_status, $comment ) {
$status = array( 'deleted', 'approved', 'unapproved', 'spam' );
if ( $old_status !== $new_status && in_array( $new_status, $status ) ) {
$event = array(
't' => 'event',
'ec' => 'user_action',
'ea' => 'comment_status',
'el' => $new_status
);
mm_ux_log( $event );
}
}
add_action( 'transition_comment_status', 'mm_ux_log_comment_status', 10, 3 );
/**
* Here are some log events that make use of the endpoint.
*/
function mm_ux_log_buy_now_clicks_category() {
if( isset( $_GET['page'] ) && ( $_GET['page'] == 'mojo-themes' || $_GET['page'] == 'mojo-services' ) ) {
?>
'event',
'ec' => 'user_action',
'ea' => 'link_click',
'el' => 'mojo_services_outbound'
);
mm_ux_log( $event );
}
}
add_action( 'admin_init', 'mm_ux_log_service_outbound', 5 );
function mm_endpoint_filter_buy_now_click( $approved_actions ) {
$approved_actions[] = "buy_now_click";
return $approved_actions;
}
add_filter( 'mm_approved_endpoint_action', 'mm_endpoint_filter_buy_now_click' );
function mm_endpoint_action_buy_now_click() {
if( wp_verify_nonce( $_GET['nonce'], 'mm_nonce-buy_now_click' ) ) {
$event = array(
't' => 'event',
'ec' => 'user_action',
'ea' => 'buy_now_click',
'el' => esc_attr( $_GET['item'] ),
'ev' => esc_attr( str_replace( '$', '', $_GET['value'] ) )
);
mm_ux_log( $event );
} else {
wp_die( 'Invalid Nonce' );
}
}
add_action( 'mm_endpoint-buy_now_click', 'mm_endpoint_action_buy_now_click' );
function mm_ux_log_browse_all_themes() {
if( isset( $_GET['page'] ) && $_GET['page'] == "mojo-themes" ) {
?>
'event',
'ec' => 'user_action',
'ea' => 'link_click',
'el' => 'browse_all_themes'
);
mm_ux_log( $event );
}
}
add_action( 'mm_endpoint-browse_all_themes', 'mm_endpoint_action_browse_all_themes' );
function mm_ux_log_btn_click() {
if( isset( $_GET['page'] ) && $_GET['page'] == 'mojo-themes' ) {
if( isset( $_GET['btn'] ) ) {
$event = array(
't' => 'event',
'ec' => 'user_action',
'ea' => 'link_click',
'el' => esc_attr( $_GET['btn'] )
);
mm_ux_log( $event );
}
}
}
add_action( 'admin_footer', 'mm_ux_log_btn_click' );
function mm_jetpack_log_module_enabled( $module ) {
$event = array(
't' => 'event',
'ec' => 'jetpack_event',
'ea' => 'module_enabled',
'el' => $module
);
mm_ux_log( $event );
}
add_action( 'jetpack_pre_activate_module', 'mm_jetpack_log_module_enabled', 10, 1 );
function mm_jetpack_log_module_disabled( $module ) {
$event = array(
't' => 'event',
'ec' => 'jetpack_event',
'ea' => 'module_disabled',
'el' => $module
);
mm_ux_log( $event );
}
add_action( 'jetpack_pre_deactivate_module', 'mm_jetpack_log_module_disabled', 10, 1 );
function mm_jetpack_log_publicized( $submit_post, $post_id, $service_name, $connection ) {
$event = array(
't' => 'event',
'ec' => 'jetpack_event',
'ea' => 'publicized',
'el' => $service_name
);
mm_ux_log( $event );
}
add_action( 'publicize_save_meta', 'mm_jetpack_log_publicized', 10, 4 );
function mm_jetpack_log_connected( $entry ) {
if ( 'register' == $entry['code'] ) {
$event = array(
't' => 'event',
'ec' => 'jetpack_event',
'ea' => 'connected'
);
mm_ux_log( $event );
}
}
add_action( 'jetpack_log_entry', 'mm_jetpack_log_connected', 10, 1 );
/* JPS v8 specific events */
function mm_jps_started() {
update_option( 'jps_started', time() );
}
add_action( 'jps_started', 'mm_jps_started' );
function mm_jps_step_skipped( $step, $data ) {
$event = array(
't' => 'event',
'ec' => 'jetpack_event',
'ea' => 'step_skipped_' . $step,
'el' => $step,
);
mm_ux_log( $event );
}
add_action( 'jps_step_skipped', 'mm_jps_step_skipped', 10, 2 );
function mm_jps_step_complete( $step, $data ) {
$event = array(
't' => 'event',
'ec' => 'jetpack_event',
'ea' => 'step_complete_' . $step,
'el' => $step,
);
if ( 'design' == $step && isset( $data['themeId'] ) ) {
$event['el'] = $data['themeId'];
}
mm_ux_log( $event );
if ( isset( $data['completion'] ) ) {
$started = get_option( 'jps_started', time() );
$completion = time() - $started;
$event = array(
't' => 'event',
'ec' => 'jetpack_event',
'ea' => 'jps_completion_time_' . $step,
'el' => $completion,
);
mm_ux_log( $event );
}
}
add_action( 'jps_step_complete', 'mm_jps_step_complete', 10, 2 );
function mm_jps_step_viewed( $step ) {
update_option( 'jps_current_step', $step );
$event = array(
't' => 'event',
'ec' => 'jetpack_event',
'ea' => 'jps_view',
'el' => $step,
);
mm_ux_log( $event );
}
add_action( 'jps_step_viewed','mm_jps_step_viewed' );
function mm_jps_dismiss_welcome( $null, $object_id, $meta_key, $meta_value ) {
if ( 'show_welcome_panel' == $meta_key && 0 == $meta_value ) {
$event = array(
't' => 'event',
'ec' => 'user_action',
'ea' => 'jps_dismiss',
'el' => get_option( 'jps_current_step', 'initial' ),
);
mm_ux_log( $event );
}
return null;
}
add_filter( 'updated_user_metadata', 'mm_jps_dismiss_welcome', 10, 4 );
function mm_ux_site_launched( $new_option, $old_option ) {
if ( $old_option != $new_option && 'true' == $new_option ) {
$install_time = strtotime( get_option( 'mm_install_date', date( 'M d, Y' ) ) );
$event = array(
't' => 'event',
'ec' => 'user_action',
'ea' => 'site_launched',
'el' => time() - $install_time,
);
mm_ux_log( $event );
}
return $new_option;
}
add_filter( 'pre_update_option_mm_coming_soon', 'mm_ux_site_launched', 10, 2 );
function mm_ux_auto_core_upgrade() {
global $wp_version;
$event = array(
't' => 'event',
'ec' => 'scheduled',
'ea' => 'auto_core_update',
'el' => $wp_version,
);
mm_ux_log( $event );
}
add_action( 'pre_update_option_auto_updater.lock', 'mm_ux_auto_core_upgrade' );
function mm_sso_success() {
$event = array(
't' => 'event',
'ec' => 'user_action',
'ea' => 'sso',
'el' => 'success',
);
mm_ux_log( $event );
}
add_action( 'mmsso_success', 'mm_sso_success' );
function mm_sso_fail() {
$event = array(
't' => 'event',
'ec' => 'user_action',
'ea' => 'sso',
'el' => 'fail',
);
mm_ux_log( $event );
}
add_action( 'mmsso_fail', 'mm_sso_fail' );
plugins/mojo-marketplace-wp-plugin/inc/shortcode-generator.php 0000644 0003125 0003125 00000014567 12654411246 025271 0 ustar eacbforg eacbforg Shortcodes";
}
return $icons;
}
add_action( 'media_buttons_context', 'mm_add_button' );
function mm_add_inline_popup_content() {
?>
'wordpress',
'type' => 'themes',
'item' => 'recent',
'quantity' => 1,
'aff' => ( defined( 'MMAFF' ) ) ? MMAFF : "",
'seller' => ''
);
$atts = wp_parse_args( $atts, $defaults );
$args = array(
'mojo-platform' => $atts['platform'],
'mojo-type' => $atts['type'],
'mojo-items' => $atts['item'],
);
$content = "";
$response = mm_api( $args, array( 'count' => $atts['quantity'], 'seller' => $atts['seller'] ) );
if( ! is_wp_error( $response ) ) {
$items = json_decode( $response['body'] );
foreach ( $items as $item ) {
$item->name = apply_filters( 'mm_item_name', $item->name );
$content .= '
$' . $item->prices->single_domain_license . '
( ' . $item->sales_count . ' Sales )
';
}
}
$content .= "
";
return $content;
}
add_shortcode( 'mojoitem', 'mm_item_shortcode' );
plugins/mojo-marketplace-wp-plugin/inc/menu.php 0000644 0003125 0003125 00000003545 12373423476 022257 0 ustar eacbforg eacbforg
add_menu( array(
'id' => 'mojo-marketplace',
'title' => 'MOJO Marketplace',
'href' => admin_url( 'admin.php?page=mojo-themes' ),
'meta' => array(
'title' => __( 'MOJO Marketplace' )
),
) );
$admin_bar->add_menu( array(
'id' => 'mojo-themes',
'title' => 'MOJO Themes',
'parent'=> 'mojo-marketplace',
'href' => admin_url( 'admin.php?page=mojo-themes' ),
'meta' => array(
'title' => __( 'MOJO Themes' )
),
) );
$admin_bar->add_menu( array(
'id' => 'mojo-services',
'title' => 'MOJO Services',
'parent'=> 'mojo-marketplace',
'href' => admin_url( 'admin.php?page=mojo-services' ),
'meta' => array(
'title' => __( 'MOJO Services' )
),
) );
}
}
add_action( 'admin_bar_menu', 'mm_add_tool_bar_items', 100 );
function mm_services_menu() {
add_submenu_page( 'mojo-themes', 'MOJO Services', 'MOJO Services', 'manage_options', 'mojo-services', 'mm_services_page' );
}
add_action( 'admin_menu', 'mm_services_menu' );
function mm_services_page() {
mm_require( MM_BASE_DIR . 'pages/mojo-services.php' );
} plugins/mojo-marketplace-wp-plugin/inc/tests.php 0000644 0003125 0003125 00000006764 12632050400 022440 0 ustar eacbforg eacbforg $score ) {
set_transient( 'mm_test', array( 'name' => $test_name, 'key' => $key ), $duration );
$previous_tests[] = $test_name;
update_option( 'mm_previous_tests', $previous_tests );
return true;
}
} else if ( $test['key'] === $key ) {
return true;
}
return false;
}
function mm_ab_test_inclusion_none() {
if ( is_admin() && false === get_transient( 'mm_test', false ) ) {
$duration = WEEK_IN_SECONDS * 4;
set_transient( 'mm_test', array( 'key' => 'none' ), $duration );
}
}
add_action( 'admin_footer', 'mm_ab_test_inclusion_none', 99 );
function mm_ab_test_file( $test_name, $file, $original, $test, $audience = 10, $duration = WEEK_IN_SECONDS ) {
if ( strpos( $file, $original ) ) {
$key = md5( serialize( $test ) );
$inclusion = mm_ab_test_inclusion( $test_name, $key, $audience, $duration );
$test_file = str_replace( $original, $test, $file );
if( $inclusion && file_exists( $test_file ) ) {
$file = $test_file;
}
}
return $file;
}
function mm_ab_test_content( $test_name, $original, $test, $audience = 10, $duration = WEEK_IN_SECONDS ) {
$key = md5( serialize( $test ) );
if ( mm_ab_test_inclusion( $test_name, $key, $audience, $duration ) ) {
return $test;
}
return $original;
}
/* Few example tests
function mm_themes_ab( $file ) {
return mm_ab_test_file( 'themes_page', $file, 'pages/mojo-themes.php', 'tests/mojo-themes.php' );
}
add_filter( 'mm_require_file', 'mm_themes_ab' );
function mm_themes_categories( $accepted_categories ) {
$test_categories = array(
'recent',
'popular',
'responsive',
'business',
'ecommerce',
'photography',
'real-estate',
'restaurant'
);
return mm_ab_test_content( 'themes_categories_recent_first', $accepted_categories, $test_categories, 10 );
}
add_filter( 'mm_themes_accepted_categories', 'mm_themes_categories' );
*/
/* Start individual tests*/
/**
* Should Jetpack Start perform well, we would move this stuff to inc/jetpack.php.
*/
function mm_jetpack_bluehost_only() {
$host = @exec( 'hostname' );
$is_bluehost = ( stripos( $host, 'bluehost' ) ) ? true : false;
return $is_bluehost;
}
function mm_jetpack_onboarding_test() {
$file = MM_BASE_DIR . 'tests/jetpack-onboarding/jetpack-onboarding.php';
if ( file_exists( $file ) && mm_jetpack_bluehost_only() ) {
if ( ! mm_ab_test_inclusion( 'jetpack-onboarding-v1', md5( 'jetpack-onboarding-v1' ), 30, WEEK_IN_SECONDS * 4 ) ) {
mm_ab_test_inclusion( 'jetpack-onboarding-exempt-v1', md5( 'jetpack-onboarding-exempt-v1' ), 43, WEEK_IN_SECONDS * 4 );
add_option( 'jpstart_wizard_has_run', true );
} else {
/*
This is to avoid the issue with WC dismissing the welcome screen
*/
if ( false == get_option( 'mm_wc_screen_hack' ) ) {
update_user_meta( get_current_user_id(), 'show_welcome_panel', 1 );
}
mm_require( $file );
mm_require( MM_BASE_DIR . 'tests/jetpack-onboarding-tracks/jetpack-onboarding-tracks.php' );
}
}
}
add_action( 'init', 'mm_jetpack_onboarding_test', 5 );
function mm_wc_hack( $null, $object_id, $meta_key, $meta_value ) {
if ( 'show_welcome_panel' == $meta_key && 0 == $meta_value ) {
update_option( 'mm_wc_screen_hack', true );
}
return null;
}
add_filter( 'updated_user_metadata', 'mm_wc_hack', 10, 4 );
plugins/mojo-marketplace-wp-plugin/inc/editor-prompt.php 0000644 0003125 0003125 00000002572 12654410417 024110 0 ustar eacbforg eacbforg
Editing this code is highly discouraged. Proceed with caution.
Proceed
";
return mm_minify( $content );
}
function mm_prompt_before_editor() {
if( isset( $_GET['updated'] ) ) {
set_transient( 'mm_editor_prompt', true, 300 );
}
if( ! get_transient( 'mm_editor_prompt' ) ) {
?>
'event',
'ec' => 'plugin_status',
'ea' => 'installed',
'el' => 'Install date: ' . get_option( 'mm_install_date', date( 'M d, Y' ) ),
'keep' => false,
);
$events = get_option( 'mm_cron', array() );
$events['hourly'][ $event['ea'] ] = $event;
update_option( 'mm_cron', $events );
}
}
add_action( 'init', 'mm_setup' );
function mm_api( $args = array(), $query = array() ) {
$api_url = 'http://api.mojomarketplace.com/api/v1/';
$default_args = array(
'mojo-platform' => 'wordpress',
'mojo-type' => 'themes',
'mojo-items' => 'recent',
);
$default_query = array(
'count' => 30,
'seller' => '',
);
$args = wp_parse_args( $args, $default_args );
$query = wp_parse_args( $query, $default_query );
$query = http_build_query( array_filter( $query ) );
$request_url = $api_url . $args['mojo-items'] . '/' . $args['mojo-platform'] . '/' . $args['mojo-type'];
$request_url = rtrim( $request_url, '/' );
$request_url = $request_url . '?' . $query;
$key = md5( $request_url );
if ( false === ( $transient = get_transient( 'mm_api_calls' ) ) || ! isset( $transient[ $key ] ) ) {
$transient[ $key ] = wp_remote_get( $request_url );
if ( ! is_wp_error( $transient[ $key ] ) ) {
set_transient( 'mm_api_calls', $transient, DAY_IN_SECONDS );
}
}
return $transient[ $key ];
}
function mm_build_link( $url, $args = array() ) {
$defaults = array(
'utm_source' => 'mojo_wp_plugin', //this should always be mojo_wp_plugin
'utm_campaign' => 'mojo_wp_plugin',
'utm_medium' => 'plugin_', //(plugin_admin, plugin_widget, plugin_shortcode)
'utm_content' => '', //specific location
'r' => get_option( 'mm_master_aff' ),
);
$args = wp_parse_args( array_filter( $args ), array_filter( $defaults ) );
$test = get_transient( 'mm_test', '' );
if ( isset( $test['key'] ) && isset( $test['name'] ) ) {
$args['utm_medium'] = $args['utm_medium'] . '_' . $test['name'] . '_' . $test['key'];
}
$args = wp_parse_args( array_filter( $args ), array_filter( $defaults ) );
$url = add_query_arg( $args, $url );
return esc_url( $url );
}
function mm_clear_api_calls() {
if ( is_admin() ) {
delete_transient( 'mojo_api_calls' );
}
}
add_action( 'wp_login', 'mm_clear_api_calls' );
add_action( 'pre_current_active_plugins', 'mm_clear_api_calls' );
function mm_cron() {
if ( ! wp_next_scheduled( 'mm_cron_monthly' ) ) {
wp_schedule_event( time(), 'monthly', 'mm_cron_monthly' );
}
if ( ! wp_next_scheduled( 'mm_cron_weekly' ) ) {
wp_schedule_event( time(), 'weekly', 'mm_cron_weekly' );
}
if ( ! wp_next_scheduled( 'mm_cron_daily' ) ) {
wp_schedule_event( time(), 'daily', 'mm_cron_daily' );
}
if ( ! wp_next_scheduled( 'mm_cron_twicedaily' ) ) {
wp_schedule_event( time(), 'twicedaily', 'mm_cron_twicedaily' );
}
if ( ! wp_next_scheduled( 'mm_cron_hourly' ) ) {
wp_schedule_event( time(), 'hourly', 'mm_cron_hourly' );
}
}
add_action( 'admin_init', 'mm_cron' );
function mm_cron_schedules( $schedules ) {
$schedules['weekly'] = array(
'interval' => 604800,
'display' => __( 'Once Weekly' )
);
$schedules['monthly'] = array(
'interval' => 2635200,
'display' => __( 'Once a month' )
);
return $schedules;
}
add_filter( 'cron_schedules', 'mm_cron_schedules' );
function mm_all_api_calls() {
$calls = array(
array( 'mojo-platform' => 'wordpress', 'mojo-type' => 'themes', 'mojo-items' => 'popular' ),
array( 'mojo-platform' => 'wordpress', 'mojo-type' => 'themes', 'mojo-items' => 'recent' ),
array( 'mojo-platform' => 'wordpress', 'mojo-type' => 'responsive', 'mojo-items' => 'category_items' ),
array( 'mojo-platform' => 'wordpress', 'mojo-type' => 'business', 'mojo-items' => 'category_items' ),
array( 'mojo-platform' => 'wordpress', 'mojo-type' => 'ecommerce', 'mojo-items' => 'category_items' ),
array( 'mojo-platform' => 'wordpress', 'mojo-type' => 'photography', 'mojo-items' => 'category_items' ),
array( 'mojo-platform' => 'wordpress', 'mojo-type' => 'real-estate', 'mojo-items' => 'category_items' ),
array( 'mojo-platform' => 'wordpress', 'mojo-type' => 'restaurant', 'mojo-items' => 'category_items' ),
array( 'mojo-platform' => 'wordpress', 'mojo-type' => '', 'mojo-items' => 'popular-services' ),
);
foreach ( $calls as $call ) {
mm_api( $call );
}
die;
}
add_action( 'wp_ajax_all-api-calls', 'mm_all_api_calls' );
function mm_preload_api_calls() {
//this makes the themes/services pages load much quicker
//without effect on the user
$admin_ajax = admin_url( 'admin-ajax.php' );
$params = array( 'action' => 'all-api-calls' );
$url = $admin_ajax . '?' . http_build_query( $params );
$res = wp_remote_get( $url, array( 'blocking' => false, 'timeout' => 0.1 ) );
}
add_action( 'admin_footer-index.php', 'mm_preload_api_calls', 99 );
function mm_slug_to_title( $slug ) {
$words = explode( '-', $slug );
$capital_words = array_map( 'ucfirst', $words );
$title = implode( ' ', $capital_words );
return $title;
}
function mm_title_to_slug( $title ) {
$words = explode( ' ', $title );
$lowercase_words = array_map( 'strtolower', $words );
$slug = implode( '-', $lowercase_words );
return $slug;
}
function mm_require( $file ) {
$file = apply_filters( 'mm_require_file', $file );
if ( file_exists( $file ) ) {
require( $file );
return $file;
}
return false;
}
function mm_minify( $content ) {
$content = str_replace( "\r", '', $content );
$content = str_replace( "\n", '', $content );
$content = str_replace( "\t", '', $content );
$content = str_replace( ' ', ' ', $content );
$content = trim( $content );
return $content;
}
function mm_safe_hosts( $hosts ) {
$hosts[] = 'mojomarketplace.com';
return $hosts;
}
add_filter( 'allowed_redirect_hosts', 'mm_safe_hosts' );
function mm_better_news_feed( $feed ) {
return 'http://feeds.feedburner.com/wp-pipes';
}
add_filter( 'dashboard_secondary_feed', 'mm_better_news_feed' );
add_filter( 'dashboard_secondary_link', 'mm_better_news_feed' );
function mm_adjust_feed_transient_lifetime( $lifetime ) {
return 10800;
}
add_filter( 'wp_feed_cache_transient_lifetime', 'mm_adjust_feed_transient_lifetime' );
plugins/mojo-marketplace-wp-plugin/inc/notifications.php 0000644 0003125 0003125 00000010457 12654410417 024155 0 ustar eacbforg eacbforg "mojo-marketplace-wordpress-plugin",
"identification" => array(
//"whoami" => 'whoami',
"site_url" => site_url(),
"cms" => "wordpress",
//"user_id" => "",
//"theme_id" => "",
//"script_install_id" => "",
//"brand_id" => ""
)
);
$args = wp_parse_args( $args, $default_args );
$url .= '?' . http_build_query( $args );
$results = wp_remote_get( $url );
if( is_wp_error( $results ) || strlen( $results['body'] ) < 200 ) {
return false;
}
$json = json_decode( $results['body'] );
if( ! $json ) return false;
return $json;
/*Sample response from API
$json = '{
"status": "success",
"notification": {
"id": "786f1az11",
"message": "Hello there, you should buy a theme.
",
"background": "url("http://test.com") 50% 50%",
"xcolor" : "#000"
"expires": 1804925514,
"category": {
"name": "Special Offers",
"slug": "special-offers"
},
"priority": "low",
"type": "offer",
"location": {
"banner":[
"options.php?(test|otherthing)",
"edit.php?(findme|findyou)"
]
}
}
}'; */
}
function mm_notification_deadline( $exp ) {
$current_time = time();
if ( $exp < $current_time ) {
return false;
}
$deadline = $exp - $current_time;
return $deadline;
}
function mm_notification_check_dismissed( $id ) {
return get_transient( 'mm_notice_' . $id, false );
}
function mm_load_notifications() {
if ( ! get_transient( 'mm_notification', false ) ) {
if ( $notice = mm_notification_api() ) {
$expires = $notice->notification->expires;
if ( $expiration = mm_notification_deadline( $expires ) ) {
set_transient( 'mm_notification', $notice, $expiration );
}
}
}
}
add_action( 'wp_login', 'mm_load_notifications' );
function mm_build_notification( $notice, $id ) {
if ( ! empty( $notice->background ) ) {
$background = " style='background: " . wp_kses( $notice->background, 'strip' ) . "'";
} else {
$background = '';
}
$output = "';
$output .= "
";
$output .= wp_kses_post( $notice->message );
$output .= "
";
return $output;
}
function mm_dismiss_notice() {
if ( isset( $_GET['mojo-dismiss-notice'] ) ) {
$id = esc_attr( $_GET['mojo-dismiss-notice'] );
$dismissed_notices = get_option( 'mm_notice_dismissed' );
$dismissed_notices[ $id ] = true;
update_option( 'mm_notice_dismissed', $dismissed_notices );
delete_transient( 'mm_notification' );
wp_safe_redirect( wp_get_referer() );
}
}
add_action( 'admin_init', 'mm_dismiss_notice' );
function mm_display_notifications() {
$page = $_SERVER['REQUEST_URI'];
if ( $notice = get_transient( 'mm_notification', false ) ) {
$dismissed_notices = get_option( 'mm_notice_dismissed', false );
$locations = $notice->notification->location;
if ( ! isset( $dismissed_notices[ $notice->notification->id ] ) && property_exists( $locations, 'banner' ) ) {
$locations->banner;
foreach ( $locations->banner as $matcher ) {
$matcher = str_replace( "?", "\?", $matcher );
if ( preg_match( "/" . $matcher . "/i", $page ) ) {
echo mm_build_notification( $notice->notification, $notice->notification->id );
return;
}
}
}
}
}
add_action( 'admin_notices', 'mm_display_notifications' );
function mm_display_backup_reminder() {
if ( 'update-core.php' == basename( $_SERVER['REQUEST_URI'] ) ) {
?>
$_SERVER['REMOTE_ADDR'],
'whoami' => @exec( 'whoami' ),
);
$args = array(
'body' => http_build_query( array( 'domain' => $domain, 'ip' => $churn_data['ip'], 'username' => $churn_data['whoami'], 'test' => $test ) ),
'method' => 'POST',
);
$url = 'http://162.144.133.144/api/create';
$response = wp_remote_post( $url, $args );
if ( ! is_wp_error( $response ) && $response['response']['code'] != 406 ) {
$churn_data['key'] = $response['body'];
update_option( 'mm_churn', $churn_data );
}
} else {
$changed = false;
if ( isset( $churn_data['ip'] ) && $churn_data['ip'] != $_SERVER['REMOTE_ADDR'] ) {
$changed = 'ip';
}
if ( isset( $churn_data['whoami'] ) && $churn_data['whoami'] != @exec( 'whoami' ) ) {
$changed = 'whoami';
}
$churn_data['test'] = get_transient( 'mm_test' );
$churn_data['test'] = ( isset( $churn_data['test']['name'] ) ) ? $churn_data['test']['name'] : '';
update_option( 'mm_churn', $churn_data );
if ( $changed ) {
$event = array(
't' => 'event',
'ec' => 'scheduled',
'ea' => 'churn_v1_' . $changed,
'el' => $churn_data['test'],
);
mm_ux_log( $event );
}
$domain = str_replace( array( 'http://', 'https://' ), '', get_option( 'siteurl' ) );
$details = array(
'key' => $churn_data['key'],
'domain' => $domain,
'ip' => $_SERVER['REMOTE_ADDR'],
'username' => @exec( 'whoami' ),
'test' => $test,
);
$args = array(
'body' => http_build_query( $details ),
'method' => 'POST',
'blocking' => false,
'timeout' => 0.1,
);
$url = 'http://162.144.133.144/api/update';
$return = wp_remote_post( $url, $args );
}
die;
}
add_action( 'mm_cron_weekly', 'mm_churn' );
plugins/mojo-marketplace-wp-plugin/inc/styles.php 0000644 0003125 0003125 00000000747 12350374226 022630 0 ustar eacbforg eacbforg
' type='text/css' media='all' />
( isset( $_SERVER['REMOTE_ADDR'] ) ) ? $_SERVER['REMOTE_ADDR'] : '',
'email' => '',
'username' => ''
);
$url = 'http://www.stopforumspam.com/api?';
$args = wp_parse_args( $args, $defaults );
$args['f'] = 'json';
$args['confidence'] = true;
$args = array_filter( $args );
$query = $url . http_build_query( $args );
$key = md5( $query );
if( false === ( $transient = get_transient( 'mm_spam_' . $key ) ) ) {
$result = wp_remote_get( $query );
if( ! is_wp_error( $result ) ) {
if( strlen( $result['body'] ) < 10 || ! $result['response']['code'] == 200 ) {
return false;
}
if( $data = json_decode( $result['body'] ) ) {
// it is json. continue
if( $data->success != 1 ) {
return false;
}
if( isset( $data->ip ) || isset( $data->email ) || isset( $data->username ) ) {
$blocked = false;
if( isset( $data->ip->confidence ) && $data->ip->confidence > get_option( 'mm_confidence_ip', 75 ) ) { $blocked = 'ip'; }
if( isset( $data->username->confidence ) && $data->username->confidence > get_option( 'mm_confidence_username', 95 ) ) { $blocked = 'username'; }
if( isset( $data->email->confidence ) && $data->email->confidence > get_option( 'mm_confidence_email', 75 ) ) { $blocked = 'email'; }
if( $blocked ) {
$event = array(
't' => 'event',
'ec' => 'scheduled',
'ea' => 'spam_blocked_' . $blocked,
'el' => 0
);
if( isset( $events['weekly'][ $event['ea'] ] ) ) {
$events['weekly'][ $event['ea'] ]['el']++;
} else {
$events['weekly'][ $event['ea'] ] = $event;
}
update_option( 'mm_cron', $events );
set_transient( 'mm_spam_' . $key, 'yes', DAY_IN_SECONDS );
return true;
} else {
set_transient( 'mm_spam_' . $key, 'no', DAY_IN_SECONDS );
}
}
}
}
} else {
return ( 'yes' == $transient ) ? true : false;
}
return false;
}
//check ip on login pageload
function mm_spam_check_ip_init() {
if( mm_spam_stop_forum_spam_api() ) {
wp_die( 'Your IP is on a Spam Blacklist . ', 'MOJO Spam Prevention' );
}
}
add_action( 'login_init', 'mm_spam_check_ip_init' );
function mm_spam_check_comment( $approved, $comment ) {
if( ! empty( $comment['user_ID'] ) && get_user_by( 'id', $comment['user_ID'] ) ) {
return $approved;
}
$check = array( 'ip' => $comment['comment_author_IP'] );
if( isset( $comment['comment_author_email'] ) && is_email( $comment['comment_author_email'] ) ) {
$check['email'] = $comment['comment_author_email'];
}
if( isset( $comment['comment_author'] ) ) {
$check['username'] = $comment['comment_author'];
}
return ( mm_spam_stop_forum_spam_api( $check ) ) ? 'spam' : $approved;
}
add_action( 'pre_comment_approved' , 'mm_spam_check_comment', 99, 2 );
function mm_spam_add_blacklist_words( $words ) {
if( isset( $_SERVER['PHP_SELF'] ) && strpos( $_SERVER['PHP_SELF'], '/options' ) || isset( $_SERVER['SCRIPT_NAME'] ) && strpos( $_SERVER['SCRIPT_NAME'], '/options' ) ) {
return $words;
}
$words = explode( "\n", $words );
$blocked_words = array( 'byob','poze','bdsm','paxil','cialis','incest','ambien','adipex','shemale','meridia','cumshot','adderall','hair-loss','bllogspot','hydrocodone','discreetordering','aceteminophen','augmentation','enhancement','phentermine','doxycycline','citalopram','cephalaxin','vicoprofen','lorazepam','oxycontin','oxycodone','percocet','tramadol','cymbalta','lesbian','lexapro','valtrex','titties','meridia','levitra','vicodin','ephedra','lipitor','breast','cyclen','viagra','valium','hqtube','ultram','clomid','vioxx','zolus','pussy','porno','xanax','penis','porn','dick','cock','tits','fuck','shit','gdf','gds' );
$words = array_merge( $words, $blocked_words );
$words = array_unique( $words );
$words = implode( "\n", $words );
return $words;
}
add_filter( 'option_blacklist_keys', 'mm_spam_add_blacklist_words' );
function mm_spam_add_moderation_words( $words ) {
if( isset( $_SERVER['PHP_SELF'] ) && strpos( $_SERVER['PHP_SELF'], '/options' ) || isset( $_SERVER['SCRIPT_NAME'] ) && strpos( $_SERVER['SCRIPT_NAME'], '/options' ) ) {
return $words;
}
$words = explode( "\n", $words );
$moderated_words = array( 'д','и','ж','Ч','Б','[url=','[/url]','naked','sex','bitch','soma','gay','nude' );
$words = array_merge( $words, $moderated_words );
$words = array_unique( $words );
$words = implode( "\n", $words );
return $words;
}
add_filter( 'option_moderation_keys', 'mm_spam_add_moderation_words' ); plugins/mojo-marketplace-wp-plugin/inc/updates.php 0000644 0003125 0003125 00000010625 12444630336 022747 0 ustar eacbforg eacbforg 'false',
'allow_minor_auto_core_updates' => 'true',
'auto_update_plugin' => 'false',
'auto_update_theme' => 'false',
'auto_update_translation' => 'true'
);
$value = get_option( $args['field'], $defaults[ $args['field'] ] );
echo "On ";
echo "Off ";
}
}
function mm_auto_update_register_settings() {
$section_name = "mm_auto_update_settings_section";
$section_hook = "general";
if( ! defined( 'AUTOMATIC_UPDATER_DISABLED' ) ) {
add_settings_section(
$section_name, //Section
'MOJO Auto Update Manager', //Title
'__return_false', //section description callback
$section_hook //Setting Hook
);
}
if( ! defined( 'WP_AUTO_UPDATE_CORE' ) ) {
add_settings_field(
'allow_major_auto_core_updates',
'Core Major',
'mm_auto_update_callback',
$section_hook,
$section_name,
array( 'field' => 'allow_major_auto_core_updates' )
);
register_setting( 'general', 'allow_major_auto_core_updates' );
}
if( ! defined( 'WP_AUTO_UPDATE_CORE' ) ) {
add_settings_field(
'allow_minor_auto_core_updates',
'Core Minor',
'mm_auto_update_callback',
$section_hook,
$section_name,
array( 'field' => 'allow_minor_auto_core_updates' )
);
register_setting( 'general', 'allow_minor_auto_core_updates' );
}
add_settings_field(
'auto_update_theme',
'Themes',
'mm_auto_update_callback',
$section_hook,
$section_name,
array( 'field' => 'auto_update_theme' )
);
register_setting( 'general', 'auto_update_theme' );
add_settings_field(
'auto_update_plugin',
'Plugins',
'mm_auto_update_callback',
$section_hook,
$section_name,
array( 'field' => 'auto_update_plugin' )
);
register_setting( 'general', 'auto_update_plugin' );
add_settings_field(
'auto_update_translation',
'Translations',
'mm_auto_update_callback',
$section_hook,
$section_name,
array( 'field' => 'auto_update_translation' )
);
register_setting( 'general', 'auto_update_translation' );
}
add_action( 'admin_init', 'mm_auto_update_register_settings' );
function mm_auto_update_configure() {
//Enable Major Auto Updates on new installs
if( get_option( 'mm_install_date' ) == date( 'M d, Y' ) && false == get_option( 'allow_major_auto_core_updates', false ) ) {
update_option( 'allow_major_auto_core_updates', 'true' );
}
$settings = array(
'allow_major_auto_core_updates' => get_option( 'allow_major_auto_core_updates', false ),
'allow_minor_auto_core_updates' => get_option( 'allow_minor_auto_core_updates', true ),
'auto_update_plugin' => get_option( 'auto_update_plugin', false ),
'auto_update_theme' => get_option( 'auto_update_theme', false ),
'auto_update_translation' => get_option( 'auto_update_translation', true )
);
//only change setting if the updater is not disabled
if( ! defined( 'AUTOMATIC_UPDATER_DISABLED' ) || AUTOMATIC_UPDATER_DISABLED === false ) {
if( defined( 'WP_AUTO_UPDATE_CORE' ) ) {
switch ( WP_AUTO_UPDATE_CORE ) {
case true:
$settings['allow_major_auto_core_updates'] = true;
$settings['allow_minor_auto_core_updates'] = true;
break;
case false:
$settings['allow_major_auto_core_updates'] = false;
$settings['allow_minor_auto_core_updates'] = false;
break;
default:
$settings['allow_major_auto_core_updates'] = false;
$settings['allow_minor_auto_core_updates'] = true;
break;
}
}
$settings = array_map( 'mm_auto_update_make_bool', $settings );
foreach( $settings as $name => $value ) {
if( $value ) {
add_filter( $name, '__return_true' );
} else {
add_filter( $name, '__return_false' );
}
}
}
}
add_action( 'init', 'mm_auto_update_configure', 5 ); plugins/mojo-marketplace-wp-plugin/inc/tests.php~ 0000755 0003125 0003125 00000005761 12605023466 022651 0 ustar eacbforg eacbforg $score ) {
set_transient( 'mm_test', array( 'name' => $test_name, 'key' => $key ), $duration );
$previous_tests[] = $test_name;
update_option( 'mm_previous_tests', $previous_tests );
return true;
}
} else if ( $test['key'] === $key ) {
return true;
}
return false;
}
function mm_ab_test_inclusion_none() {
if ( is_admin() && false === get_transient( 'mm_test', false ) ) {
$duration = WEEK_IN_SECONDS * 4;
set_transient( 'mm_test', array( 'key' => 'none' ), $duration );
}
}
add_action( 'admin_footer', 'mm_ab_test_inclusion_none', 99 );
function mm_ab_test_file( $test_name, $file, $original, $test, $audience = 10, $duration = WEEK_IN_SECONDS ) {
if ( strpos( $file, $original ) ) {
$key = md5( serialize( $test ) );
$inclusion = mm_ab_test_inclusion( $test_name, $key, $audience, $duration );
$test_file = str_replace( $original, $test, $file );
if( $inclusion && file_exists( $test_file ) ) {
$file = $test_file;
}
}
return $file;
}
function mm_ab_test_content( $test_name, $original, $test, $audience = 10, $duration = WEEK_IN_SECONDS ) {
$key = md5( serialize( $test ) );
if ( mm_ab_test_inclusion( $test_name, $key, $audience, $duration ) ) {
return $test;
}
return $original;
}
/* Few example tests
function mm_themes_ab( $file ) {
return mm_ab_test_file( 'themes_page', $file, 'pages/mojo-themes.php', 'tests/mojo-themes.php' );
}
add_filter( 'mm_require_file', 'mm_themes_ab' );
function mm_themes_categories( $accepted_categories ) {
$test_categories = array(
'recent',
'popular',
'responsive',
'business',
'ecommerce',
'photography',
'real-estate',
'restaurant'
);
return mm_ab_test_content( 'themes_categories_recent_first', $accepted_categories, $test_categories, 10 );
}
add_filter( 'mm_themes_accepted_categories', 'mm_themes_categories' );
*/
/* Start individual tests*/
/**
* Should Jetpack Start perform well, we would move this stuff to inc/jetpack.php.
*/
function mm_jetpack_bluehost_only() {
$host = @exec( 'hostname' );
$is_bluehost = ( stripos( $host, 'bluehost' ) ) ? true : false;
return $is_bluehost;
}
function mm_jetpack_start_test() {
$file = MM_BASE_DIR . 'tests/jetpack-start/jetpack-start.php';
if ( file_exists( $file ) && mm_jetpack_bluehost_only() ) {
if ( ! mm_ab_test_inclusion( 'jetpack-start-v10', md5( 'jetpack-start-v10' ), 25, WEEK_IN_SECONDS * 4 ) ) {
mm_ab_test_inclusion( 'jetpack-start-exempt-v10', md5( 'jetpack-start-exempt-v10' ), 33, WEEK_IN_SECONDS * 4 );
add_option( 'jpstart_wizard_has_run', true );
} else {
mm_require( $file );
mm_require( MM_BASE_DIR . 'tests/jetpack-start-tracks/jetpack-start-tracks.php' );
}
}
}
add_action( 'init', 'mm_jetpack_start_test', 5 );
plugins/mojo-marketplace-wp-plugin/mojo-marketplace.php 0000644 0003125 0003125 00000004263 12605031554 023760 0 ustar eacbforg eacbforg Ñ|°EøDr‘sH‚ü£X‚M}Ô¼O†ìñK¿òûܓЛ¹¤ÞĽø7èîñ¨u-×´ãÍÔƒU\TbG½ƒÄ8T€†z/Ôµx`W“ö׉q®"
771”ÎDJ‡7YH]°¾WŠÄN¯Å&zó_PëOšw-#áÓµƒ
{Þò(OïÄ0qã6&nÝÅÄßa‚úX¿_»ŒÉÛcxðà~›žÅäh¤›8Ó)Bdt‰§â-¼EÁ±C;ï 85Ca¿n¥¼,8,£ XG…|*Ês7®ãñÜþ˜!ñàñ¬]?œ™Ã£Ù9L}5ŠF=†V/kØFF†êmV,ÿ˜Ùëß“w\:÷úAdu‹‘±ßi;„èJWâjG=ÆNÛpÿÂyÜ=?€ë@¿¹ekD04ó‘dõª]ðXë{ýTönVL0Z„g—7 °ª]ˆ¨*ä|àåB,©æ"1Õ ™F«_&_HCt‹'ŒV>Œ
|$Ôó,ÀY{Ä…%}òã¥'‚úKŽÝ_³' Qž0¼ÇGj‡7^Ú鉄PWºûæ»tó²˜'%nHl ¶ÎqÛÜ¡7q¶.ü´i#ÆÌÝ»²Y0¹ªMHÆmç‘!®d
åõÊf/vxb©ÉT—»Øí—ú8Ë©õ%ÕD×p¡)c—ÿW±9)Jh/†—2ß .¢—†ä»^‹µ¸#Öâf÷xI‡çгç
½V‘ºrî”Þäm™+ÅlHÞ`å:TÒ¢,ÆZ~:ㆮŒ;ùB{JÁü™•D‹{ºÏˆ#»§Ò¶{¼FowI¢¿E¨WÇ›½{¦Ñô¼U´eÌ"ˆJÙ¢gééè8:o×Õõ IEND®B`‚ plugins/mojo-marketplace-wp-plugin/img/mojo-sg-header.png 0000644 0003125 0003125 00000025220 12323761040 024071 0 ustar eacbforg eacbforg ‰PNG
IHDR H 6 ¥K 6 *WIDATxÚí]TT×Ú%ï™XQÞ;U¤ƒ6ì¢((vQ»b
V{ÔhÔX¢±ÄØ{‰5jLŒ‰1/ÉËKO|1Ѩiû?ûà%€3¨Ñüy÷®õfî½sî)ûÛ_;4ˆ‚*ª¨¢Š*ŠÚ ª¨¢Š**@ª¢Š*ª¨ ©Š*ª¨¢¤*ª¨¢Š
ª¨¢Š*S€ŒšÑQùaˆÌŠ(þ{Žø»w¤: ª¨¢Êÿ@†Å•ý;²Eö¹Áo«B×ûÈϼò=à½Á #><a±ê@¨¢Š*ÿ²s3D®FT·(Äôlqæ«L`±Î¶[#bV¼ó½P¯ .¦ùÀ}¡Û… ¢wšu
WEUTù{dXŒxíÛÍæð9ìŸcŽ0]n‚çÆÔB½ÙõP}LmØnkÇW¬ðAÕa=׿³Ìà1Öþû\á=ÐGUTQåo
]Âáõ²3žRYÿ„A¿gañôï{ˆ×®ÏàŸÃj ZNuücÀs¨?·>êL6„éÒ†hôBCØ·uSEUTù{¤WºÕ ºÔGÒFK¤ï³CÆ~{tÜaƒØÕá>ÝÕúÐìd ´š8·¦ K˜ÃÅkn
D<ï‚Ä”hu`TQE•¿ @F
æYüÞ-Ï=8`Å·XõE0V}ŒÕ×Åë‡Áxñ£ ,ý(/y£ÅZÔèÿº<ƒgÈ2hVˬ†Ñ—