array("ABeeZee","ABeeZee"), "Arvo-Italic" => array("Arvo:400italic","Arvo"), "Alegreya-Regular" => array("Alegreya","Alegreya"), "AlegreyaSans-Regular" => array("Alegreya+Sans","Alegreya Sans"), "AnonymousPro-Regular" => array("Anonymous+Pro","Anonymous Pro"), "ArchivoBlack-Regular" => array("Archivo+Black","Archivo Black"), "ArchivoNarrow-Italic" => array("Archivo+Narrow:400italic","Archivo Narrow"), "ArchivoNarrow-Regular" => array("Archivo+Narrow","Archivo Narrow"), "Arvo-Regular" => array("Arvo","Arvo"), "Bitter-Regular" => array("Bitter:400","Bitter"), "Chivo-Regular" => array("Chivo","Chivo"), "ContrailOne-Regular" => array("Contrail+One","Contrail One"), "CrimsonText-Italic" => array("Crimson+Text:400italic","Crimson Text"), "Domine-Regular" => array("Domine","Domine"), "Bitter-Bold" => array("Bitter:700","Bitter"), "FiraSans-Regular" => array("Fira+Sans","Fira Sans"), "Inconsolata-Regular" => array("Inconsolata","Inconsolata"), "JosefinSlab-Regular" => array("Josefin+Slab","Josefin Slab"), "Karla-Regular" => array("Karla","Karla"), "Lato-Regular" => array("Lato","Lato"), "Bitter-Italic" => array("Bitter:400italic","Bitter"), "LibreBaskerville-Regular" => array("Libre+Baskerville","Libre Baskerville"), ); public static $languageArray = null; // Default values protected $op = array( ANDROAPP_IMAGE_DIMENSION => 'preview', ANDROAPP_EXCERPT_PREFERENCE => 'excerpt', ANDROAPP_POST_CONTENT => 'postprocessed', ANDROAPP_ENABLE_WP_SUPER_CACHE => '0' ); protected $buildop = array( ANDROAPP_GOOGLE_APP_ID => '', ANDROAPP_GOOGLE_SENDER_ID => '', ANDROAPP_IOS_APP_ID => '' ); protected $postContentop = array( 'androapp_header_script' => '', 'androapp_before_post_content' => '', 'androapp_after_post_content' => '', ); protected $accountop = array( ANDROAPP_NOTIFICATION_TYPE_KEY => 'single' ); public function getInstallLink($slug){ $action = 'install-plugin'; return wp_nonce_url( add_query_arg( array( 'action' => $action, 'plugin' => $slug ), admin_url( 'update.php' ) ), $action.'_'.$slug ); } public function __construct(){ pw_mobile_app_settings::$languageArray = array("HOME"=> __("Home", 'androapp'), "SELECT" => __("Select...", 'androapp'), "SELECT_CATEGORY"=> __("Select Category", 'androapp'), "CANT_CONNECT"=> __("Can't Connect", 'androapp'), "RETRY"=> __("Tap to Retry", 'androapp'), "CONNECTION_TIMEOUT"=> __("Connection Timeout", 'androapp'), "UNKNOWN_ERROR"=> __("Unknown Error", 'androapp'), "LOADING"=> __("Loading...", 'androapp'), "SHARE_TITLE" => __("Hey, I found this interesting", 'androapp'), "NEW_POST"=> __("New Post", 'androapp'), "NEW_POSTS"=> __("new posts", 'androapp'), "YEAR"=> __("year", 'androapp'), "MONTH"=> __("month", 'androapp'), "DAY"=> __("day", 'androapp'), "HOUR"=> __("hour", 'androapp'), "MINUTE"=> __("minute", 'androapp'), "SECOND"=> __("second", 'androapp'), "YEARS"=> __("years", 'androapp'), "MONTHS"=> __("months", 'androapp'), "DAYS"=> __("days", 'androapp'), "HOURS"=> __("hours", 'androapp'), "MINUTES"=> __("minutes", 'androapp'), "SECONDS"=> __("seconds", 'androapp'), "AGO"=> __("ago", 'androapp'), "BY"=> __("by", 'androapp'), "IN"=> __("in", 'androapp'), "NO_COMMENTS"=> __("No comments yet, Be the first one to comment", 'androapp'), "COMMENTS_TITLE"=> __("COMMENTS", 'androapp'), "COMMENT_EMPTY"=> __("Comment field is Empty", 'androapp'), "PROVIDE_EMAIL"=> __("Please provide your name and email address", 'androapp'), "SENDING_COMMENT"=> __("Sending Comment...", 'androapp'), "AWAITING_MODERATION"=> __("Awaiting Moderation", 'androapp'), "TYPE_MESSAGE"=> __("Type Message", 'androapp'), "TYPE_REPLY_MESSAGE"=> __("Type Reply Message", 'androapp'), "COMMENT_SETTINGS"=> __("Comments Settings", 'androapp'), "NAME"=> __("Name", 'androapp'), "EMAIL"=> __("Email", 'androapp'), "EMAIL_EMPTY"=> __("Email can't be Empty", 'androapp'), "VALID_EMAIL"=> __("Please enter a valid email address", 'androapp'), "ATLEAST_THREE_CHARS"=> __("Please enter atleast 3 characters in name", 'androapp'), "VALID_NAME"=> __("Name can't be Empty", 'androapp'), "SUBMIT"=> __("Submit" ,'androapp'),"SEARCH_HINT" => __("Search Posts", 'androapp'), "EMPTY_SEARCH_RESULT" => __("Sorry, no content matched your criteria",'androapp') ,"OFFLINE_POSTS" => __("Saved Posts") ,"SAVE_FOR_OFFLINE" => __("Save Offline"), "REMOVE_FROM_OFFLINE" => __("Remove from Offline Save") , "wooseparator" => __("wooseparator",'androapp'), "PRODUCT_DESCRIPTION"=> __("Description", 'androapp'), "CART"=> __("Cart", 'androapp'), "CHECKOUT"=> __("Checkout", 'androapp'), "ADD_TO_CART_ERROR"=> __("Could not update cart !!", 'androapp'), "LOGIN"=> __("Login", 'androapp'), "USERNAME"=> __("Username", 'androapp'), "PASSWORD"=> __("Password", 'androapp'), "REPASSWORD"=> __("Re Type Password", 'androapp'), "CANT_BE_EMPTY"=> __("Can't be EMpty", 'androapp'), "SHIPPING_ADDRESS"=> __("Shipping Address", 'androapp'), "BILLING_ADDRESS"=> __("Billing Address", 'androapp'), "FIRST_NAME"=> __("First Name", 'androapp'), "LAST_NAME"=> __("Last Name", 'androapp'), "CITY"=> __("City", 'androapp'), "STATE"=> __("State", 'androapp'), "COUNTRY"=> __("Country", 'androapp'), "PINCODE"=> __("Pincode", 'androapp'), "ADDRESS1"=> __("Address 1", 'androapp'), "ADDRESS2"=> __("Address 2", 'androapp'), "PHONE"=> __("Phone", 'androapp'), "PASSWORDS_DONT_MATCH"=> __("Password do not match", 'androapp'), "ENTER_COUPON_CODE"=> __("Enter Coupon Code", 'androapp'), "APPLY_COUPON"=> __("Apply Coupon", 'androapp'), "SUBTOTAL"=> __("Subtotal", 'androapp'), "TAXES"=> __("Taxes", 'androapp'), "SHIPPING_AND_HANDLING"=> __("Shipping And Handling", 'androapp'), "TOTAL"=> __("Total", 'androapp'), "Discount"=> __("Discount", 'androapp'), "NEXT"=> __("Next", 'androapp'), "BACK"=> __("Back", 'androapp'), "ORDER_NOTE"=> __("Order Note", 'androapp'), "SHIPPING_METHOD"=> __("Shipping Method", 'androapp'), "ORDER_REVIEW"=> __("Order Review", 'androapp'), "ORDER_COMPLETE"=> __("Order Status", 'androapp'), "PAYMENT_METHOD"=> __("Payment Method", 'androapp'), "ORDER"=> __("Order", 'androapp'), "ORDER_STATUS"=> __("Order Status", 'androapp'), "LOGGED_OUT"=> __("You are now logged out", 'androapp'), "CART_EMPTY"=> __("Cart Empty", 'androapp'), "BROWSE_PRODUCTS"=> __("Browse Products", 'androapp'), "ADDED_TO_CART"=> __("Added to cart", 'androapp'), "COUPON"=> __("Coupon", 'androapp'), "APPLIED"=> __("Applied", 'androapp'), "MRP"=> __("MRP", 'androapp'), "BUY_NOW"=> __("BUY NOW", 'androapp'), "OUT_OF_STOCK"=> __("Out Of Stock", 'androapp'), "REGISTER" => __("Register", 'androapp'), "PRODUCT_ADD_TO_CART_ERROR" => __("Product can not be added to cart", 'androapp'), "COUPON_APPLY_ERROR" => __("Coupon can not be applied", 'androapp'), "VENDOR" => __("Vendor",'androapp'), "NOT_ENOUGH_STOCK" => __("Sorry, Not enough stock",'androapp'), "SAME_AS_BILLING_ADDRESS"=> __("Same as Billing Address",'androapp'), "UPDATE_QUANTITY"=> __("Update Quantity",'androapp'), "CART_UPDATED"=> __("Cart Updated",'androapp'), "QUANTITY_TEXT_VALIDATION"=> __("Please enter a number",'androapp') ); add_action('admin_init', array($this,'admin_init')); add_action('admin_menu', array($this, 'add_page')); add_action('admin_notices', array($this, 'my_plugin_admin_notices')); $this->scriptOptions = get_option($this->scripts_option); if((empty($this->scriptOptions['scripts']) || ($this->scriptOptions['count'] < 5))) { add_action( 'print_scripts_array', array($this, 'add_scripts'), 999); add_action('wp_print_scripts', array($this, 'add_late_scripts'), 999); $this->scriptOptions['count'] = $this->scriptOptions['count'] +1; } if(!get_option(PW_ANDROAPP_VERSION_KEY)) { //dont save any properties here as they are going to be set by activation hook update_option(PW_ANDROAPP_VERSION_KEY, $this->androappVersion); }else{ $oldVersion = get_option(PW_ANDROAPP_VERSION_KEY); if(!empty($oldVersion) && $oldVersion != $this->androappVersion ){ if( $oldVersion < 319){ $this->updateFor319(); } if( $oldVersion < 320){ $this->updateFor320(); } if( $oldVersion < 403){ $this->updateFor403(); } if( $oldVersion < 406){ $this->updateFor406(); } if( $oldVersion < 501){ $this->updateFor501(); } if( $oldVersion < 600){ $this->updateFor600(); } if( $oldVersion < 603){ $this->updateFor603(); } if( $oldVersion < 605){ $this->updateFor605(); } if( $oldVersion < 608){ $this->updateFor608(); } if( $oldVersion < 700){ $this->updateFor700(); } if( $oldVersion < 701){ $this->updateFor701(); } if( $this->androappVersion == 1000){ $this->updateFor605(); } update_option(PW_ANDROAPP_VERSION_KEY, $this->androappVersion); } } } function show_success_message($message) { ?>

buildop[ANDROAPP_HOST_NAME] = get_bloginfo('url');; $this->buildop[ANDROAPP_APP_NAME] = get_bloginfo('name'); $this->buildop[ANDROAPP_DEEP_LINKING] = "/"; $this->buildop[ANDROAPP_EMAIL] = get_option('admin_email'); $this->buildop[ANDROAPP_AUTHENTICATION_KEY] = $this->getToken(64); $this->buildop[ANDROAPP_THEME_NAME] = 'cardview'; $this->op[PWAPP_MENU] = $this->getFirstMenu(); $this->op[SLIDER_MENU] = $this->getFirstMenu(); $this->op[pw_mobile_app_settings::$androAppCss] = '#content-sidebar{ display:none; } #secondary { display:none !important; } .sidebar, .site-header, .footer-widgets { display:none; } #menu-header-menu{ display:none; }'; $this->op[pw_mobile_app_settings::$postProcessedCss] = 'androapp img{ max-width: 100%; height: auto; } iframe{ max-width: 100%; } figure { max-width: 100%; height: auto; } img{ max-width: 100% !important; height: auto; } div { max-width: 100% !important; } span { max-width:100%; overflow: auto; } audio { display:block; visibility:visible !important; } video{ width:100%; height:auto; } '; $this->op[pw_mobile_app_settings::$shareImagePreference] = 'first'; $this->op[pw_mobile_app_settings::$featuredImageShowHide] = 'show'; $this->op[pw_mobile_app_settings::$sharePreference] = 'EXCERPT'; $this->op[pw_mobile_app_settings::$shareTextWithImage] = 'TITLE'; $this->op[pw_mobile_app_settings::$shareSuffixText] = 'via'; $this->op[pw_mobile_app_settings::$shareSuffixLink] = 'POST'; $this->op[pw_mobile_app_settings::$shareImageWithCustomFunction] = '1'; if(get_option("comment_registration") == 1){ $this->op[pw_mobile_app_settings::$commentsProvider] = 'disabled'; }else{ $this->op[pw_mobile_app_settings::$commentsProvider] = 'wordpress'; } $this->op[pw_mobile_app_settings::$showCommentsCount] = '1'; $this->op[pw_mobile_app_settings::$enableOfflineSave] = '1'; if(is_plugin_active('woocommerce/woocommerce.php')){ $this->op[pw_mobile_app_settings::$homePageWidget] = 'products'; $this->op[pw_mobile_app_settings::$showCartIcon] = '1'; }else{ $this->op[pw_mobile_app_settings::$homePageWidget] = 'posts'; } $this->buildop[pw_mobile_app_settings::$tagTextColorKey] = "#ff808080"; $this->buildop[pw_mobile_app_settings::$tagBgColorKey] = "#E6E6E6"; $this->buildop[pw_mobile_app_settings::$feedBgColorKey] = "#FFFFFF"; $this->buildop[pw_mobile_app_settings::$feedTitleColorKey] = "#424242"; $this->buildop[pw_mobile_app_settings::$feedContentTextColorKey] = "#616161"; $this->buildop[pw_mobile_app_settings::$screenBgColorKey] = "#E6E6E6"; $this->buildop[pw_mobile_app_settings::$actionBarTitleColorKey] = "#FFFFFF"; $this->buildop[pw_mobile_app_settings::$actionBarBgColorKey] = "#F4832C"; $this->buildop[pw_mobile_app_settings::$authorTextColorKey] = "#477c29"; $this->buildop[pw_mobile_app_settings::$timeTextColorKey] = "#757575"; $this->buildop[pw_mobile_app_settings::$statusBarBgColorKey] = "#f45917"; } private function resetBuildOptions(){ $this->initProperties(); //not resetting icon $buildOptions = get_option($this->build_option_name); $this->buildop[ANDROAPP_LAUNCHER_ICON] = $buildOptions[ANDROAPP_LAUNCHER_ICON]; $this->buildop[ANDROAPP_SPLASH_IMAGE] = $buildOptions[ANDROAPP_SPLASH_IMAGE]; update_option($this->build_option_name, $this->buildop); } private function resetLanguageOptions(){ update_option($this->language_option_name, pw_mobile_app_settings::$languageArray); } public function installpwmobileapp() { $this->initProperties(); if(!get_option($this->option_name)) { add_option($this->option_name, $this->op); } if(!get_option($this->build_option_name)) { add_option($this->build_option_name, $this->buildop); } if(!get_option($this->account_tab_key)) { add_option($this->account_tab_key, $this->accountop); } if(!get_option($this->post_content_tab_key)) { add_option($this->post_content_tab_key, $this->postContentop); } if(!get_option($this->language_option_name)){ add_option($this->language_option_name, pw_mobile_app_settings::$languageArray); } if(!get_option($this->scripts_option)) { $scriptOptions = array(); $scriptOptions['count'] = 0; $scriptOptions['scripts'] = null; add_option($this->scripts_option, $scriptOptions); } $this->initiAndroAds(); $this->doCurlRequest($this->buildop[ANDROAPP_HOST_NAME], "INSTALL", $this->buildop[ANDROAPP_EMAIL]); } private function updateFor403(){ if(get_option($this->language_option_name)){ $languageOption = get_option($this->language_option_name); $languageOption['VENDOR'] = "Vendor"; update_option($this->language_option_name, $languageOption); } } private function updateFor406(){ if(get_option($this->language_option_name)){ $languageOption = get_option($this->language_option_name); $languageOption['SEARCH_HINT'] = "Search posts"; $languageOption['EMPTY_SEARCH_RESULT'] = "Sorry, no content matched your criteria"; update_option($this->language_option_name, $languageOption); } if(get_option($this->option_name)){ $op = get_option($this->option_name); $op[pw_mobile_app_settings::$postProcessedCss] .= 'img{ max-width: 100% !important; height: auto; } div { max-width: 100% !important; } '; update_option($this->option_name, $op); } } private function initiAndroAds(){ if(!get_option('androapp_ads')){ add_option('androapp_ads', array()); } $androAds = get_option('androapp_ads'); $androAds['androapp_header'] = ''; $androAds['top_ad'] = ""; $androAds['bottom_ad'] = "
Loading...
"; update_option('androapp_ads', $androAds); } private function updateFor700(){ if(get_option($this->option_name)){ $op = get_option($this->option_name); $op[pw_mobile_app_settings::$enableOfflineSave] = 1; update_option($this->option_name, $op); } if(get_option($this->language_option_name)){ $languageOption = get_option($this->language_option_name); $languageOption['SAVE_FOR_OFFLINE'] = "Save Offline"; $languageOption['REMOVE_FROM_OFFLINE'] = "Remove from Offline Save"; $languageOption['OFFLINE_POSTS'] = "Saved Posts"; update_option($this->language_option_name, $languageOption); } } private function updateFor608(){ if(get_option($this->option_name)){ $op = get_option($this->option_name); $op[pw_mobile_app_settings::$featuredImageShowHide] = 'show'; update_option($this->option_name, $op); } } private function updateFor701(){ { global $wpdb; $tablename = $wpdb->prefix."androapp_stats"; $sql = "alter table $tablename add column ios_bulk_sent int default 0"; $wpdb->query($sql); $sql = "alter table $tablename add column ios_sent int default 0"; $wpdb->query($sql); $sql = "alter table $tablename add column ios_eligible int default 0"; $wpdb->query($sql); $sql = "alter table $tablename add column ios_notRegistered int default 0"; $wpdb->query($sql); $tablename = $wpdb->prefix."pw_gcmusers"; $sql = "alter table $tablename add column device varchar(128) default 'android'"; $wpdb->query($sql); } } private function updateFor605(){ global $wpdb; { $tablename = $wpdb->prefix.pw_gcmusers; $sql = "alter table $tablename add column topics varchar(128)"; $wpdb->query($sql); } { $tablename = $wpdb->prefix."androapp_stats"; $sql = "alter table $tablename add column bulk_sent int default 0"; $wpdb->query($sql); } } private function updateFor603(){ $this->initiAndroAds(); if(!get_option($this->post_content_tab_key)) { add_option($this->post_content_tab_key, $this->postContentop); } $options = get_option($this->build_option_name); $clientId = $options[ANDROAPP_CLIENT_ID]; $res = file_get_contents($this->androAppHost.'/appCreator/info.php?clientId='.$clientId); $res = json_decode($res); if(isset($res->vt)){ $renewaldate = $res->vt; $options[ANDROAPP_RENEWAL_DATE] = strtotime($renewaldate); update_option($this->build_option_name, $options); } } private function updateFor600(){ $buildOption = get_option($this->build_option_name); $buildOption[ANDROAPP_DEEP_LINKING] = "/"; update_option($this->build_option_name, $buildOption); if(get_option($this->language_option_name)){ $languageOption = get_option($this->language_option_name); $languageOption['SAME_AS_BILLING_ADDRESS'] = "Same as Billing Address"; $languageOption['UPDATE_QUANTITY'] = "Cart Updated"; $languageOption['NOT_ENOUGH_STOCK'] = "Sorry, Not enough stock"; $languageOption['QUANTITY_TEXT_VALIDATION'] = "Please enter a number"; update_option($this->language_option_name, $languageOption); } } private function updateFor501(){ if(get_option($this->option_name)){ $op = get_option($this->option_name); $op[pw_mobile_app_settings::$postProcessedCss] .= 'audio { display:block; visibility:visible !important; } video{ width:100%; height:auto; } '; update_option($this->option_name, $op); } } private function updateFor320(){ if(get_option($this->language_option_name)){ $languageOption = get_option($this->language_option_name); $tmpArr = array(); $tmpArr = array_merge($tmpArr, pw_mobile_app_settings::$languageArray); $result = array_merge($tmpArr, $languageOption); update_option($this->language_option_name, $result); } } private function updateFor319(){ if(!get_option($this->language_option_name)){ add_option($this->language_option_name, pw_mobile_app_settings::$languageArray); } } public function doCurlRequest($host, $action, $email){ if(function_exists('curl_init')){ $url = $this->androAppHost."/appCreator/log.php?action=".$action."&email=".urlencode($email)."&host=".urlencode($host); $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($ch); curl_close($ch); //echo $output; } } public function clearAllOptions(){ delete_option($this->option_name); delete_option($this->build_option_name); delete_option($this->account_tab_key); delete_option($this->language_option_name); delete_option($this->get_started_option_name); delete_option($this->scripts_option); delete_option($this->post_content_tab_key); delete_option(PW_ANDROAPP_VERSION_KEY); } public function uninstall() { $options = get_option($this->build_option_name); $this->doCurlRequest($options[ANDROAPP_HOST_NAME], "UNINSTALL", $options[ANDROAPP_EMAIL]); $this->clearAllOptions(); } public function deactivate() { $options = get_option($this->build_option_name); $this->doCurlRequest($options[ANDROAPP_HOST_NAME], "DEACTIVATE", $options[ANDROAPP_EMAIL]); //$this->clearAllOptions(); } // White list our options using the Settings API public function admin_init() { $this->plugin_settings_tabs[$this->get_started_option_name] = __('Get Started','androapp'); register_setting($this->get_started_option_name, $this->get_started_option_name); add_settings_section( 'section_get_started', __('Welcome to AndroApp Native Android Mobile App','androapp'), array( &$this, 'options_do_getstarted' ), $this->get_started_option_name ); $this->plugin_settings_tabs[$this->build_option_name] = __('Look & Feel','androapp'); register_setting($this->build_option_name, $this->build_option_name); add_settings_section( 'section_build_settings', __('Look & Feel','androapp'), array( &$this, 'build_options_do_page_parent' ), $this->build_option_name ); $this->plugin_settings_tabs[$this->option_name] = __('Configure','androapp'); register_setting($this->option_name, $this->option_name); add_settings_section( 'section_app_settings', __(' dynamic settings for your app','androapp'), array( &$this, 'options_do_page' ), $this->option_name ); $this->plugin_settings_tabs[$this->post_content_tab_key] = __('Post Content','androapp'); register_setting($this->post_content_tab_key, $this->post_content_tab_key); add_settings_section( 'section_post_content_settings', __('Post Content','androapp'), array( &$this, 'post_content_do_page_parent' ), $this->post_content_tab_key ); $this->plugin_settings_tabs[$this->language_option_name] = __('Internationalization','androapp'); register_setting($this->language_option_name, $this->language_option_name); add_settings_section( 'section_language_settings', __(' Change texts for your app','androapp'), array( &$this, 'language_options_do_page_parent' ), $this->language_option_name ); $this->plugin_settings_tabs[$this->account_tab_key] = __('Account Settings','androapp'); register_setting($this->account_tab_key, $this->account_tab_key); add_settings_section( 'section_publish_settings', __('Account Settings','androapp'), array( &$this, 'accounts_do_page' ), $this->account_tab_key ); $this->plugin_settings_tabs[$this->ios_tab_key] = __('IOS Build','androapp'); register_setting($this->ios_tab_key, $this->ios_tab_key); add_settings_section( 'section_ios_build', __('IOS Build','androapp'), array( &$this, 'ios_do_page' ), $this->ios_tab_key ); $this->plugin_settings_tabs[$this->tools_tab_key] = __('Push Notifications','androapp'); register_setting($this->tools_tab_key, $this->tools_tab_key); add_settings_section( 'section_tools_settings', __('Push Notifications','androapp'), array( &$this, 'tools_do_page' ), $this->tools_tab_key ); } function add_page() { add_menu_page('AndroApp', 'AndroApp', 'manage_options', $this->plugin_options_key, array($this, 'plugin_options_page'), "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDIwMDEwOTA0Ly9FTiIKICJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy1TVkctMjAwMTA5MDQvRFREL3N2ZzEwLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4wIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiB3aWR0aD0iNDMyLjAwMDAwMHB0IiBoZWlnaHQ9IjQzMi4wMDAwMDBwdCIgdmlld0JveD0iMCAwIDQzMi4wMDAwMDAgNDMyLjAwMDAwMCIKIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiPgo8bWV0YWRhdGE+CkNyZWF0ZWQgYnkgcG90cmFjZSAxLjEwLCB3cml0dGVuIGJ5IFBldGVyIFNlbGluZ2VyIDIwMDEtMjAxMQo8L21ldGFkYXRhPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjAwMDAwMCw0MzIuMDAwMDAwKSBzY2FsZSgwLjEwMDAwMCwtMC4xMDAwMDApIgpmaWxsPSIjMDAwMDAwIiBzdHJva2U9Im5vbmUiPgo8cGF0aCBkPSJNMTQzMCA0MzAxIGMwIC0xMCAtNyAtMjQgLTE1IC0zMSAtMjUgLTIwIC0xNyAtNjIgMjEgLTEyMCA1NCAtODIKMTA0IC0xODAgOTggLTE5MyAtMiAtNyAtNDcgLTUyIC05OSAtMTAxIC01NiAtNTEgLTExNSAtMTE4IC0xNDIgLTE1OSAtNjkKLTEwNiAtMTQzIC0yNjAgLTE0MyAtMjk4IDAgLTExIC01IC0yOSAtMTEgLTQwIC02IC0xMSAtMTQgLTU3IC0xOSAtMTAyIC00Ci00NSAtMTMgLTgzIC0xOSAtODUgLTYgLTIgLTExIC0xNiAtMTEgLTMwIDAgLTE5IDMgLTIzIDkgLTEzIDEwIDE2IDMxIDYgMzEKLTE0IDAgLTEyIDE1NSAtMTQgMTAzOSAtMTQgbDEwMzkgMCAtMiA4MiBjLTQgODggLTE1IDE0NCAtNTEgMjQ3IC02NCAxODMKLTEzMCAyODYgLTI3NCA0MjggbC0xMDQgMTAyIDIzIDUwIGMxMyAyOCAzMiA1NyA0MiA2NyAxMCA5IDE4IDIyIDE4IDI5IDAgNwoxMSAzMCAyNSA1MCAyNiAzOCAzNCAxMDcgMTUgMTE5IC01IDMgLTEwIDE1IC0xMCAyNiAwIDI2IC0xNCAyNCAtMjkgLTMgLTIwCi0zOSAtMzYgLTY1IC00OCAtNzkgLTYgLTggLTI4IC00NSAtNDggLTg0IC0zOSAtNzMgLTcxIC0xMTUgLTg4IC0xMTUgLTYgMAotNDAgMTMgLTc2IDI5IC0xNjMgNzAgLTI2NiA5MiAtNDQxIDkyIC0xMjIgMCAtMjg5IC0yNCAtMzM1IC00OCAtMTEgLTYgLTMzCi0xNSAtNTAgLTIxIC0xNiAtNSAtNTQgLTIwIC04MyAtMzMgLTY3IC0yOSAtNzQgLTI1IC0xMzIgNzcgLTI1IDQzIC01NyA5OAotNzIgMTIxIC0xNiAyNCAtMjggNTIgLTI4IDYzIDAgMTEgLTcgMjAgLTE1IDIwIC04IDAgLTE1IC04IC0xNSAtMTl6IG00MTAKLTU0MiBjMzkgLTI5IDcwIC04NyA3MCAtMTMxIC0xIC03NCAtODEgLTE1NSAtMTU1IC0xNTcgLTE2IDAgLTQ4IDkgLTcwIDIyCi0xMjQgNzAgLTExMSAyMjMgMjUgMjg5IDI3IDE0IDk2IDEgMTMwIC0yM3ogbTc5MCA3IGM1MSAtMjcgOTAgLTg0IDkwIC0xMzIgMAotMzYgLTIyIC05NSAtNDIgLTExMSAtMzIgLTI2IC05MSAtNTMgLTExNiAtNTMgLTM4IDAgLTEwMiAzOSAtMTI5IDc5IC00MiA2MgotMjQgMTYxIDM1IDE5OSAxNSA5IDI5IDE5IDMyIDIzIDIwIDI1IDc4IDIzIDEzMCAtNXoiLz4KPHBhdGggZD0iTTU5MiAzMDUxIGMtNjQgLTIyIC0xMTQgLTY4IC0xNDcgLTEzNSBsLTI1IC01MCAwIC01ODcgMCAtNTg3IDMzCi02MiBjMjYgLTUwIDQ0IC02OSA5MSAtOTggNTEgLTMyIDY1IC0zNiAxMjUgLTM2IDQ4IDAgODAgNiAxMTMgMjEgNzUgMzYgMTMyCjEyMCAxMjIgMTc5IC0zIDIwIC0xIDI1IDUgMTUgMjggLTQzIDMxIDggMzEgNTcwIDAgNTU3IDAgNTcwIC0yMCA1ODYgLTExIDEwCi0yMCAyNyAtMjAgMzkgMCA0MiAtNTggMTA0IC0xMjYgMTM1IC03NCAzNCAtMTA4IDM1IC0xODIgMTB6Ii8+CjxwYXRoIGQ9Ik0zNTYyIDMwNTAgYy0zMCAtMTAgLTY5IC0zMyAtODkgLTUxIC03MiAtNzAgLTY4IC0yOCAtNzEgLTY5NyAtMgotMzg4IDEgLTYxNiA3IC02NDAgMTQgLTQ5IDcyIC0xMTcgMTI1IC0xNDQgNTggLTMxIDE2MCAtMjkgMjIyIDIgNjUgMzQgMTI0CjExMSAxMjUgMTY0IDEgMzUgMCAxMDcwIC0xIDExOTYgMCA0MCAtNiA1MiAtNDIgOTMgLTc2IDgzIC0xNzUgMTExIC0yNzYgNzd6Ii8+CjxwYXRoIGQ9Ik0xMDg5IDI5MjcgYy02IC0xMiAtMiAtMTk3MCA0IC0xOTc0IDQgLTIgMTAgMyAxNCAxMiA1IDE2IDcgMTYgMTUgMQo3IC0xMyAyNyAtMTYgMTA2IC0xNiA1MyAwIDEwNCAtNSAxMTIgLTEwIDEzIC04IDE2IC02NCAyMCAtMzY3IDQgLTI4OCA3IC0zNTQKMTcgLTMzOCAxMSAxNyAxMiAxMiAxMyAtMzggMCAtNTMgMyAtNjEgNDAgLTEwMSAyNCAtMjYgNTkgLTUwIDg4IC02MSAyNiAtMTAKNTEgLTIyIDU3IC0yNiAxNiAtMTUgNjQgLTEwIDEwNSAxMSAyMiAxMSA0NiAyMCA1NSAyMCAxOCAwIDczIDUyIDEwMSA5NSAxOAoyNyAxOSA1NyAyMiA0MDcgbDMgMzc4IDI5IDE1IGMyMyAxMiA3NiAxNSAyNzIgMTUgMTM1IDAgMjUwIC00IDI1OCAtMTAgMTMgLTgKMTUgLTYyIDE4IC0zNjIgMiAtMTk0IDcgLTM1NyAxMSAtMzYzIDUgLTUgMTEgLTIzIDE1IC00MCA5IC0zNSA5MSAtMTM1IDExMgotMTM1IDggMCAzNCAtOSA1NiAtMjAgNTQgLTI2IDc2IC0yNSAxNDIgNSAzMCAxNCA1OCAyNSA2MyAyNSAxNSAwIDYzIDU5IDgzCjEwMiAxOCA0MCAyMCA2NyAyMCA0MDAgMCAzMTAgMiAzNTkgMTYgMzcyIDIxIDIyIDQzIDI2IDE1NCAyOSBsOTUgMiA1IDk3MyBjMwo1MzUgMSA5ODAgLTMgOTg4IC03IDEyIC0xNTMgMTQgLTEwNjMgMTQgLTU4MCAwIC0xMDU0IC0yIC0xMDU1IC0zeiBtMTYwNQotNDE4IGM1MCAtNDMgMTI0IC0xNDQgMTUzIC0yMDcgMjAgLTQzIDI0IC02NCAyMCAtMTEwIC02IC02NiAtMjIgLTE0MyAtMzYKLTE2OSAtNSAtMTAgLTE5IC00NyAtMzEgLTgzIC0xMSAtMzYgLTI0IC03NCAtMjkgLTg1IC0xMyAtMzEgLTMyIC04NyAtNDMKLTEyNSAtNSAtMTkgLTE0IC0zOSAtMTkgLTQ1IC01IC01IC05IC0xOCAtOSAtMjggMCAtMTAgLTYgLTMzIC0xMyAtNTAgLTE4Ci00MSAtMzcgLTk0IC00NyAtMTMyIC0yMCAtNzAgLTQ1IC0xMzIgLTY3IC0xNjggLTQwIC02NCAtMTc1IC0xMTQgLTE4OSAtNjkKLTMgOSAtMTIgMjkgLTIwIDQ0IC04IDE0IC0xNCAzNyAtMTQgNTAgMCAxMiAtNyAzMiAtMTUgNDIgLTggMTEgLTE1IDI5IC0xNQo0MCAwIDEyIC03IDMwIC0xNSA0MCAtOCAxMSAtMTUgMjggLTE1IDM4IDAgMTAgLTQgMjYgLTEwIDM2IC0xMiAyMSAtNDAgOTgKLTQ3IDEzMiAtMyAxNCAtMTAgMzAgLTE0IDM2IC01IDYgLTE2IDM1IC0yNSA2MyAtMTcgNTkgLTMwIDY1IC0zNyAxOSAtMyAtMTgKLTIxIC03OCAtNDIgLTEzMyAtMjAgLTU1IC00MCAtMTEzIC00NSAtMTMwIC0xMSAtNDAgLTMwIC05MyAtNDYgLTEzMyAtOCAtMTgKLTE0IC00MCAtMTQgLTUwIDAgLTkgLTcgLTMwIC0xNSAtNDYgLTggLTE1IC0xNSAtMzcgLTE1IC00NyAwIC00NiAtNjMgLTQ0Ci0xNDcgNCAtMzEgMTggLTgzIDEwMSAtODMgMTMyIDAgNyAtNyAyNiAtMTUgNDEgLTggMTYgLTE1IDM3IC0xNSA0NiAwIDkgLTQKMTkgLTkgMjMgLTUgMyAtMTIgMTkgLTE2IDM2IC00IDE3IC0xMyA0MiAtMjEgNTcgLTggMTUgLTE0IDM1IC0xNCA0NCAwIDkgLTQKMTkgLTkgMjMgLTUgMyAtMTMgMjAgLTE3IDM4IC0zIDE3IC0xMiA0NSAtMTkgNjIgLTE0IDMyIC0zOSA5OCAtNjAgMTU1IC03IDE5Ci0yMCA1NCAtMjkgNzggLTkgMjMgLTIzIDYxIC0zMiA4NSAtOSAyMyAtMjIgNTYgLTI5IDcyIC0yOCA2MiAtMjggMTAxIDAgMTU4CjE1IDMwIDM3IDY2IDQ5IDgyIGwyMiAyOCAxMzUgLTIgYzExMSAtMSAxMzYgLTUgMTQ3IC0xOCAyOCAtMzggNyAtNjQgLTU3IC03MQotNTcgLTUgLTYzIC0xNyAtMzYgLTY4IDggLTE2IDE1IC0zOCAxNSAtNTAgMCAtMTEgNCAtMjQgOSAtMzAgNSAtNSAxNCAtMjUgMTkKLTQ0IDYgLTE5IDE2IC01MSAyMyAtNzAgNiAtMTkgMTcgLTUxIDI0IC03MCA3IC0xOSAxOCAtNTEgMjQgLTcwIDcgLTE5IDE2Ci00OCAyMSAtNjUgMTAgLTM3IDI5IC04OSA0NyAtMTMyIDcgLTE3IDEzIC0zOCAxMyAtNDYgMCAtOCA3IC0yOCAxNSAtNDMgOAotMTYgMTUgLTQxIDE1IC01NiAwIC0xNiA0IC0yOCA4IC0yOCAxMSAwIDMyIDQ1IDMyIDY4IDAgOSA3IDMwIDE1IDQ2IDggMTUgMTUKMzcgMTUgNDggMCAxMSA1IDI5IDEyIDQxIDYgMTIgMTUgMzUgMTkgNTIgNCAxNiAxOSA2MyAzNCAxMDQgMTUgNDEgMjUgODMgMjIKOTUgLTUgMjIgLTI0IDc2IC0zOCAxMTEgLTE2IDM4IC00MCAxMTAgLTQ4IDE0MSAtMTIgNDcgLTE5IDU0IC01MiA1NCAtNDkgMAotODkgMjYgLTg5IDU5IDAgMTkgNyAzMSAyMyAzNyAxMyA2IDExNyA4IDI1NyA0IGwyMzUgLTUgMCAtNDAgYzAgLTQyIC00IC00NQotNzcgLTYwIC0yOSAtNiAtMjkgLTQgMyAtODAgMTIgLTI3IDY4IC0xOTMgNzkgLTIzMCA0IC0xNiAxOCAtNTcgMzAgLTkwIDExCi0zMyAyNSAtNzMgMzAgLTkwIDEwIC0zOCAyOSAtOTEgNDcgLTEzMiA3IC0xNyAxMyAtMzYgMTMgLTQyIDAgLTcgNyAtMjggMTYKLTQ5IGwxNiAtMzcgMTMgNTAgYzEyIDQ4IDI0IDg5IDYwIDIwNSAzOCAxMjcgNDYgMTkxIDM0IDI2NSAtOCA0OCAtMjAgODEgLTM4CjEwNSAtMTEwIDE0NCAtMTIxIDI4MSAtMjkgMzUyIDM0IDI2IDYzIDIyIDEwMiAtMTN6IG00NDUgLTU2MSBjMCAtNzEgLTMgLTg3Ci0xMCAtNjggLTE0IDM0IC04IDE2MCA3IDE2MCAyIDAgNCAtNDIgMyAtOTJ6Ii8+CjwvZz4KPC9zdmc+Cg=="); add_submenu_page( $this->plugin_options_key, 'Look & Feel', __('Look & Feel','androapp'), 'manage_options', $this->plugin_options_key.'&tab=pw-mobile-build-options', array($this, 'plugin_options_page')); add_submenu_page( $this->plugin_options_key, 'Configure', __('Configure','androapp'), 'manage_options', $this->plugin_options_key.'&tab=pw-mobile-app', array($this, 'plugin_options_page')); add_submenu_page( $this->plugin_options_key, 'Internationalization', __('Internationalization','androapp'), 'manage_options', $this->plugin_options_key.'&tab=pw-mobile-app-language', array($this, 'plugin_options_page')); add_submenu_page( $this->plugin_options_key, 'Account Settings', __('Account Settings','androapp'), 'manage_options', $this->plugin_options_key.'&tab=androapp_account_settings', array($this, 'plugin_options_page')); add_submenu_page( $this->plugin_options_key, 'Push Notifications', __('Push Notifications','androapp'), 'manage_options', $this->plugin_options_key.'&tab=androapp_tools_tab', array($this, 'plugin_options_page')); add_submenu_page( $this->plugin_options_key, 'IOS Build', __('IOS Build','androapp'), 'manage_options', $this->plugin_options_key.'&tab=ios_build_settings', array($this, 'plugin_options_page')); } /* * Renders our tabs in the plugin options page, * walks through the object's tabs array and prints * them one by one. Provides the heading for the * plugin_options_page method. */ function plugin_options_tabs() { if(!current_user_can('manage_options')){ print "Sorry, you don't have sufficient priviledges"; exit; } $current_tab = isset( $_GET['tab'] ) ? sanitize_text_field($_GET['tab']) : $this->get_started_option_name; screen_icon(); echo ''; } function add_scripts($todo) { //echo "

Add Scripts

"; //print_r($todo); if(is_single()){ $this->process_scripts($todo); } return $todo; } function add_late_scripts() { global $wp_scripts; if(is_single()){ $this->process_scripts($wp_scripts->queue); } } function process_scripts($scriptsHandle){ global $wp_scripts; $options = get_option($this->scripts_option); $scripts = $options ['scripts']; //print_r($scripts); if(empty($scripts)){ $scripts = array(); } $scripts = $scripts + $this->process_scripts_inner($scriptsHandle); $options['scripts'] = $scripts; $options['count'] = $this->scriptOptions['count']; update_option($this->scripts_option, $options); } function process_scripts_inner($scriptsHandle){ global $wp_scripts; $scripts = array(); foreach( $scriptsHandle as $handle ) : //echo $handle."
"; if(!empty($wp_scripts->registered[$handle]->src)) { $scripts[$handle] = convertToFullUrl($wp_scripts->registered[$handle]->src); }else{ $deps = $wp_scripts->registered[$handle]->deps; $scripts = $scripts + $this->process_scripts_inner($deps); } endforeach; return $scripts; } function clearScripts(){ $this->scriptOptions['scripts'] = null; $this->scriptOptions['count'] = 0; update_option($this->scripts_option, $this->scriptOptions); header("Location: ?page=pw_mobile_app_options"); } function renderForm($tab, $functionname){ ?>
$functionname(); }else{ do_settings_sections( $tab ); } ?>
get_started_option_name; if(isset($_GET['clear_scripts_list'])){ $this->clearScripts(); } ?>
plugin_options_tabs(); if($tab == 'androapp_getstarted' || $tab == $this->build_option_name || $tab == $this->language_option_name || $tab == 'androapp_tools_tab' || $tab == 'androapp_post_content_tab'){ do_settings_sections( $tab ); } else { $this->renderForm($tab, ""); } ?>
androAppHost.'/appCreator/info.php?clientId='.$clientId); $res = json_decode($res); if(isset($res->vt)){ $renewaldate = $res->vt; $options[ANDROAPP_RENEWAL_DATE] = strtotime($renewaldate); $renewaldate = date("d-m-Y", $options[ANDROAPP_RENEWAL_DATE]); update_option($this->build_option_name, $options); } } _e('You need to submit your app to Google App Store such that your readers can install your mobile app.','androapp'); ?>


  1. '. __('Google play developer console','androapp').''; printf( /* translators: %s: Google Play developer console link */ __('Create a new account on %s and submit your app yourself. You need to pay one time fee of $25. Generally it takes around 48 hours (after the payment) for new accounts to get approved.', 'androapp'), $googleConsoleLink); ?>

    While uploading your apk to google play store remember to not sign up for App Signing as we are taking care of that for you: click here for more info.


    1. '. __('click here','androapp').''; printf( /* translators: %s: click here */ __('payment of $10 for our efforts, %s to make the payment','androapp'), $payumoneyLink); ?>
    contact@androapp.mobi'); ?>

https://play.google.com/store/apps/details?id=".$options[ANDROAPP_PACKAGE_NAME].""; echo '

'. printf( /* translators: %s: apk link on play store */ __('After you submit your app to Google Play Store, this will be the link to your app %s', 'androapp'), $applinktext).'

'; } ?>

here'; printf( /* translators: %s: here (with payment link) */ __('AndroApp is completely free for the first month, after that you can purchase annual subscription from %s. Mention your email id and site link in shipping address. We will activate your annual subscription.', 'androapp'), $purchaseLink); ?>

".__('Your Renewal date: ','androapp')."".$renewaldate; echo "

"; } printf( /* translators: %s: our email */ __('Please get in touch with us @ %s for any more clarifications.','androapp'), 'contact@androapp.mobi'); ?>

$post_id, "title" => $post_title, "excerpt" =>$excerpt, "postImage" => $postimage, "link" => $postlink, "cache" => $cache, "postType" => $postType, "notification_type" => $notification_type), $google_api_key, $isBulkSend); } function post_content_do_page_parent(){ $this->renderForm($this->post_content_tab_key ,'post_content_do_page'); } function post_content_do_page(){ include("androapp_postcontent.php"); } function tools_do_page() { include("androapp_tools.php"); } function ios_do_page(){ include("ios_build.php"); } function accounts_do_page() { $options = get_option($this->account_tab_key); ?>

Google API Key: '.__('Click here','androapp').''; printf( /* translators: %s: Click here */ __('We use Firebase cloud messaging API\'s for push notifications, %s to see the instructions to create a Firebase API project', 'androapp'), $androAppGcmLink);?>

" value="" /> ".__('Please install curl for push notifications to work.','androapp')."

"; } ?>
:

" value="" />
:
For Android App: " value="" />
Create one more Firebase app for IOS in same project, click here for instructions.
For IOS App: " value="" />

: Do not send Push Notification checkbox.
Set the default value for that checkbox here (if checked, push notification will not be sent by default)','androapp');?>
" value="1" />

Bulk Send: We introduced bulk notification send from 6.05, by default it is enabled. it is recommended, but does not give detailed info on successful sent count.
You can disable it to get the correct count, but not recommended for performance reasons.
" value="1" />Disable Bulk Send

Notification Cache: When a push notification is received by end user, by default we cache the post data on phone, so that even if user is offline, when he clicks on the notification, post can be opened(for post content type: preprocessed/postprocessed).
But, this might slow down your server, So if your server is not able to handle the load, you can disable the cache.
By disabling the cache, post data will be fetched only when user clicks on the notification.
" value="yes" />Disable Notification Cache

: '.__('Click here','androapp').''; printf( /* translators: %s: Click here */ __('To know pageviews, exceptions, number of shares, comments from the app, %s to create a google analytics account.' ,'androapp'), $androappAnalyticsLink); ?>

For Android App:" value="" />
For IOS App:" value="" />

Admob'; $mopubLink = 'Mopub'; $appNextLink = 'Appnext'; printf( /* translators: %1$s: Admob, %2$s: Mopub and %3$s:Appnext */ __('We are using top performing mobile ad network AdMob by Google, Mopub and AppNext. Please create publishers account on %1$s, %2$s and %3$s and enter ad id\'s here.', 'androapp'), $admobLink, $mopubLink, $appNextLink); ?>
'.__('Click here','androapp').''; printf( /* translators: %s: Click here */ __('You can use various ad providers using mopub on the fly, %s to read more about Ad guidelines and help in setting up the ads on your AndroApp)', 'androapp'), $androappAdGuideLink); ?>
: Mopub " value="" />
Admob " value="" />
AppNext " value="" />
Show Only On " value="1" />List Screen " value="1" />Single Post/Page Screen
: Mopub " value="" />
Admob " value="" />
AppNext " value="" />

. (for list view)
Show Only On " value="1" />List Screen " value="1" />Single Post/Page Screen
: Mopub " value="" />
Admob " value="" />
AppNext " value="" />
Show Only On " value="1" />List Screen " value="1" />Single Post/Page Screen
: : " value="" />
: " value="" /> ()
: " value="" /> ( mopub, appnext and than Admob)
.
()
: '. __('Google Adsense policy','androapp').''; printf( /* translators: %s: Google Adsense Policy */ __('%s does not allow to use adsense units in mobile app, select this checkbox if you want to strip adsense code from mobile app pages. (works only when post content type is pre processed or post processed)', 'androapp'), $googleAdsensePolicyLink); ?>
" value="1" />

✓"; } function isTimeZoneError(){ try{ $this->androapp_json_get_timezone(); return false; }catch(Exception $e){ return true; } return false; } function isAndroAppHtAccessRulesPresent(){ $home_path = trailingslashit( get_home_path() ); $rules = implode( "\n", extract_from_markers( $home_path.'.htaccess', 'AndroApp' ) ); return !empty($rules); } function androapp_update_htaccess() { $home_path = trailingslashit( get_home_path() ); $wprules = implode( "\n", extract_from_markers( $home_path.'.htaccess', 'WordPress' ) ); $rules = "\n"; $rules .= "RewriteEngine On\n"; $rules .= "RewriteBase /\n"; $rules .= "RewriteRule ^wp-json/(.*)/$ /?json_route=/$1 [NC,L,QSA]\n"; $rules .= "RewriteRule ^wp-json/(.*)$ /?json_route=/$1 [NC,L,QSA]\n"; $rules .= ""; // remove original WP rules so SuperCache rules go on top if($this->wpsc_remove_marker( $home_path.'.htaccess', 'WordPress' )){ $res = insert_with_markers( $home_path.'.htaccess', 'AndroApp', explode( "\n", $rules )); $res = $res & insert_with_markers( $home_path.'.htaccess', 'WordPress', explode( "\n", $wprules )); if($res) { return true; } else { return false; } }else{ return false; } } //from wp super cache function wpsc_remove_marker( $filename, $marker ) { if (!file_exists( $filename ) || $this->is_writeable_ACLSafe( $filename ) ) { if (!file_exists( $filename ) ) { return ''; } else { $markerdata = explode( "\n", implode( '', file( $filename ) ) ); } $f = fopen( $filename, 'w' ); $foundit = false; if ( $markerdata ) { $state = true; foreach ( $markerdata as $n => $markerline ) { if (strpos($markerline, '# BEGIN ' . $marker) !== false) $state = false; if ( $state ) { if ( $n + 1 < count( $markerdata ) ) fwrite( $f, "{$markerline}\n" ); else fwrite( $f, "{$markerline}" ); } if (strpos($markerline, '# END ' . $marker) !== false) { $state = true; } } } return true; } else { return false; } } // from legolas558 d0t users dot sf dot net at http://www.php.net/is_writable function is_writeable_ACLSafe($path) { // PHP's is_writable does not work with Win32 NTFS if ($path{strlen($path)-1}=='/') // recursively return a temporary file path return $this->is_writeable_ACLSafe($path.uniqid(mt_rand()).'.tmp'); else if (is_dir($path)) return $this->is_writeable_ACLSafe($path.'/'.uniqid(mt_rand()).'.tmp'); // check tmp file for read/write capabilities $rm = file_exists($path); $f = @fopen($path, 'a'); if ($f===false) return false; fclose($f); if (!$rm) unlink($path); return true; } function isShowHtAccessRules($permalink_structure){ return empty($permalink_structure) && !$this->isAndroAppHtAccessRulesPresent(); } function options_do_getstarted(){ $lookAndFeel = ''. __('Look & Feel','androapp').''; $configure = ''. __('Configure','androapp').''; $internalization = ''. __('Internationalization','androapp').''; $sectionTobeOpened = -1; $stepOneCompleted = false; $updateHtaccessFailed = false; if(isset($_POST['updatehtaccess']) && $_POST['updatehtaccess'] == "1"){ $updateHtaccessFailed = !$this->androapp_update_htaccess(); } $permalink_structure = get_option('permalink_structure'); if(is_plugin_active('json-rest-api/plugin.php') && !$this->isTimeZoneError() && !$this->isShowHtAccessRules($permalink_structure)){ $stepOneCompleted = true; }else{ $sectionTobeOpened = 0; } global $options ; $options = get_option($this->build_option_name); $stepTwoCompleted = false; if(!empty($options[ANDROAPP_CLIENT_ID])){ $stepTwoCompleted = true; }else{ if($sectionTobeOpened == -1){ $sectionTobeOpened = 1; } } $stepThreeCompleted = false; if(!empty($options[ANDROAPP_LAUNCHER_ICON])){ $stepThreeCompleted = true; } else{ if($sectionTobeOpened == -1){ $sectionTobeOpened = 2; } } $accountOptions = get_option($this->account_tab_key); $stepFourCompleted = false; if(!empty($accountOptions[ANDROAPP_GOOGLE_SENDER_ID])){ $stepFourCompleted = true; }else{ if($sectionTobeOpened == -1){ $sectionTobeOpened = 3; } } if($sectionTobeOpened == -1){ $sectionTobeOpened = 4; } ?>

isTimeZoneError()) { ?>

' .__('click here', 'androapp').''; printf( /* translators: %s: click here */ __( 'WP REST API does not work correctly for your current timezone, %s to change it and come back.', 'androapp' ), $optionsLink ); ?>

(

isShowHtAccessRules($permalink_structure)){ $home_path = trailingslashit( get_home_path() ); ?>

'.__('Permalink link structure from here','androapp').'
'; printf( /* translators: %s: Permanent link structure from here */ __( 'WP REST API plugin does not work as expected in default link structure, if possible change your %s OR add this on top of your .htaccess file' ,'androapp'), $$linkOpen); ?>

# BEGIN AndroApp
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-json/(.*)/$ /?json_route=/$1 [NC,L,QSA]
RewriteRule ^wp-json/(.*)$ /?json_route=/$1 [NC,L,QSA]
</IfModule>
# END AndroApp

". __('We could not modify your .htaccess file, please check the file permission.' , 'androapp') ."


"; } ?>

'; echo ''; echo '
'; wp_nonce_field('updatehtaccess'); echo ""; } else{ $json_installurl = $this->getInstallLink('json-rest-api'); ?>

'.__('Click here','androapp').''; $jsonPluginUrl = ' WP REST API (WP API)'; printf( /* translators: %1$s: Click here and %2$s: WP REST API (WP API) */ __('Your mobile app will use json calls to get the data from your site, for that you have to enable WP REST API plugin. This plugin is maintained by wordpress core team and will soon be included in the wordpress core, till then

%1$s to install %2$s plugin.

', 'androapp') , $jsonUrl, $jsonPluginUrl); ?>

version 1'; $jsonv2 = 'version 2'; printf( /* translators: %$1s: version 1 and %2$s: version 2 */ __('There are two versions of WP REST API, you need to install the %1s and not %2s.', 'androapp'), $jsonv1, $jsonv2); ?>

2print_checkMark();}?>

renderForm('androapp_getstarted' ,'render_invisibleForm'); }else{ ?>

In case you did not receive any mail, Don\'t worry, just drop an email to us @ %s, we will be happy to help you.', 'androapp'), 'contact@androapp.mobi'); ?>

3print_checkMark();}?>


'; printf( /* translators: %s: Configure */ __('Go to %s tab to change dynamic settings, like Menu Items, Comments Settings, Image Preview options, Share Text options etc. These settings can be changed anytime, you don\'t really need to publish a new build everytime, just restart your app and browse, you will see the changes.', 'androapp'), $configure); echo '

'; printf( /* translators: %s: Internalization */ __('Go to %s tab to change the texts used in app, you can use this section to change the texts to your own language, OR to change the default values to suit your website.', 'androapp'), $internalization); ?>

4print_checkMark();}?>

'. __('Account Settings','androapp').''; if($stepFourCompleted){ ?>

  1. Google Cloud Messaging for Android api key and project number for Push Notifications to work.', 'androapp');?>

5

Step 4, Go to %s section to create the new apk for your mobile app.', 'androapp'), $lookAndFeel); ?>
publish_do_page($options); ?>

account_tab_key); $tagTextColor = $options[pw_mobile_app_settings::$tagTextColorKey]; $tagBgColor = $options[pw_mobile_app_settings::$tagBgColorKey]; $feedBgColor = $options[pw_mobile_app_settings::$feedBgColorKey]; $feedTitleColor = $options[pw_mobile_app_settings::$feedTitleColorKey]; $feedContentTextColor = $options[pw_mobile_app_settings::$feedContentTextColorKey]; $screenBgColor = $options[pw_mobile_app_settings::$screenBgColorKey]; $actionBarTitleColor = $options[pw_mobile_app_settings::$actionBarTitleColorKey]; $actionBarBgColor = $options[pw_mobile_app_settings::$actionBarBgColorKey]; ?> " value=""/> " value="" /> " type="color" value="" /> " type="color" value="" /> " type="color" value="" /> " type="color" value="" /> " type="color" value="" /> " type="color" value="" /> " type="color" value="" /> " type="color" value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="getstarted" />
resetBuildOptions(); } $this->renderForm($this->build_option_name ,'build_options_do_page'); ?>

Restore default settings

build_option_name); $accountOptions = get_option($this->account_tab_key); $tagTextColor = $options[pw_mobile_app_settings::$tagTextColorKey]; $tagBgColor = $options[pw_mobile_app_settings::$tagBgColorKey]; $feedBgColor = $options[pw_mobile_app_settings::$feedBgColorKey]; $feedTitleColor = $options[pw_mobile_app_settings::$feedTitleColorKey]; $feedContentTextColor = $options[pw_mobile_app_settings::$feedContentTextColorKey]; $screenBgColor = $options[pw_mobile_app_settings::$screenBgColorKey]; $actionBarTitleColor = $options[pw_mobile_app_settings::$actionBarTitleColorKey]; $actionBarBgColor = $options[pw_mobile_app_settings::$actionBarBgColorKey]; $statusBarBgColor = $options[pw_mobile_app_settings::$statusBarBgColorKey]; if(empty($statusBarBgColor)){ $statusBarBgColor = "#f45917"; } $authorTextColor = $options[pw_mobile_app_settings::$authorTextColorKey]; $timeTextColor = $options[pw_mobile_app_settings::$timeTextColorKey]; $args = array( 'posts_per_page' => 5, 'offset' => 0, 'category' => '', 'category_name' => '', 'orderby' => 'post_date', 'order' => 'DESC', 'include' => '', 'exclude' => '', 'meta_key' => '', 'meta_value' => '', 'post_type' => 'post', 'post_mime_type' => '', 'post_parent' => '', 'post_status' => 'publish', 'suppress_filters' => false ); $postslist = get_posts( $args ); ?>
Theme
: : " type="color" value="" onChange="document.getElementById('statusBar').style.background = this.value;" />
: " type="color" value="" onChange="document.getElementById('actionBar').style.background = this.value;" />
: " type="color" value="" onChange="document.getElementById('actionBarTitle').style.color = this.value; document.getElementById('statusBarTitle').style.color = this.value;" />
: " type="color" value="" onChange="document.getElementById('androScreen').style.background = this.value;" />
: " type="color" value="" onChange="changeTextColor('androPostTitle', this.value);" />
: " type="color" value="" onChange="changeTextColor('androPostContent', this.value);" />
: " type="color" value="" onChange="changeBgColor('androFeed', this.value);" />
: " type="color" value="" onChange="changeTextColor('tagTitle', this.value);" />
: " type="color" value="" onChange="changeBgColor('tagTitle', this.value);" />
: " type="color" value="" onChange="changeTextColor('authorTitle', this.value);" />
: " type="color" value="" onChange="changeTextColor('timeTitle', this.value);" />
* :
" value="" onChange="document.getElementById('actionBarTitle').innerHTML=this.value;"; />
*:
" value="" />
*:
Font:


:-
*

X
* :


" value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="getyourapp" />
html preview, It is recommended to test it on device directly.', 'androapp');?>
post_content); //if(!empty($firstImage)) { ?>
"; }else{ echo ' '; } ?>
".$post->post_title."";?>
post_content))), 0, 115); ?>
ID); if($category[0]){ echo $category[0]->cat_name; } ?>
post_author ); echo $author; ?>

*

Email:

" value="" />

'. __('Terms & Conditions','androapp').''; printf( /* translators: %s: Terms & Conditions */ __('By clicking on the below button you agree to our %s.','androapp'), $termAndConditions); ?>

">
Adding javascripts will slow down post detail screen , Ideally you don't need to add any javascripts, add them only if you know what you are acheiving by that

Select JS files you want to include $src) { ?>
Handle Script src Action
Add>>
No enqueued files detected.

Please try visiting a few pages on your site and then refresh this page.

You should clear this list once in a while to get rid of files that are no longer being used as this is not done automatically.


Selected Scripts
Clear Script File List

Define custom css here for postprocessed content type
resetLanguageOptions(); } $this->renderForm($this->language_option_name ,'language_options_do_page'); ?>

Restore default settings

language_option_name); ?>

Add your text in corresponding textbox

$value) { if($key == "wooseparator"){ ?>
Text Title Your Value Default Value
Below options are specific to woocommerce, most probably you dont need to change them if you are not using woocommerce plugin
Text Title Your Value Default Value
" value="" />

option_name); $scriptOptions = $this->scriptOptions; ?>

$action, 'plugin' => $slug ), admin_url( 'update.php' ) ), $action.'_'.$slug ); ?>
Select Menu:

Drawer Menu (left menu):
*We have added menu icons support from 10.00 version
to change default icons - Install Menu Icons plugin and follow this post.

Slider Menu (top menu) (since app version 11.00)


:

" value="1" /> (if checked, will not try to fetch the first image from the post content, will use only featured image)



" value="full" />
" value="preview" />
" value="noimage" />


:

" value="excerpt" />
$action, 'plugin' => $slug ), admin_url( 'update.php' ) ), $action.'_'.$slug );?> " value="seo_meta_desc" /> Wordpress SEO plugin'; printf( /* translators: %s: Wordpress SEO Plugin */ __('SEO Meta Description( install and Activate %s )','androapp'), $wpseoLink ); ?>
" value="none" />


:

" value="preprocessed" onChange="onPostContentTypeChange();" />
" value="postprocessed" onChange="onPostContentTypeChange();" />
render_scripts($scriptOptions['scripts'] , $options[pw_mobile_app_settings::$selectedScripts], $options[ANDROAPP_POST_CONTENT], $options[pw_mobile_app_settings::$postProcessedCss]); ?> " value="loadurl" onChange="onPostContentTypeChange();" />
">
if(function_exists('isAndroAppRequest') && isAndroAppRequest()){
//Code to be called for AndroApp Requests(mobile app)
}
if(!function_exists('isAndroAppRequest') || !isAndroAppRequest()){
//Code to be called for regular requests
}
" value="loadimages" onChange="onPostContentTypeChange();" /> Slide Show (it will open all the images in the post as slide show)
       Select Failover Post Type - when no images in the post
       " value="preprocessed" /> Pre processed " value="postprocessed" /> Post processed " value="loadurl" /> Load from Url
: Fill in the comma separated post/page ids to override default post content type selected above.

use Load from url for below post/page ids
" value="" />
use Pre Processed for below post/page ids
" value="" />
use Post Processed for below post/page ids
" value="" />
use Slideshow for below post/page ids
" value="" />


: Parallax Effect for Featured Image
" value="show" /> " value="hide" />
applicable from app version 6.0.9 onwards.

if you don't want featured image on post detail page, then disable parallax effect and hide featured image using css as described in below article.

Few of the elements on post detail page can be controlled by pure css, check out this post for details.
: " value="first" />
" value="noimage" />
Share Text:




: " value="" />
:
" value="" />
function getShareText($post, $link){
	return " ". via ".$link;
}
					
" value="1" />


: You have to disable debugging option and display comments at the end option from Debug tab of WP Super Cache Settings page.
also uncheck Don’t cache pages with GET parameters. (?x=y at the end of a url) option


', 'androapp'); ?> " value="1" />
: " value="wordpress" /> " value="facebook" /> Facebook " value="disabled" />
()
" value="1" /> (shows wordpress comment counts)
:
()
" value="1" />
: " value="posts" />
" value="pages" />
" value="products" />
" value="single" /> " value="" /> ()
: " value="1" />
Offline Save option will be visible only if post content type is preprocessed OR postprocessed
Also, images and javascripts will be saved as per the space available, it might get deleted after saving more posts or depedning on the space available on the device.
: When user clicks on the image(which is not inside 'a' tag), it will pop up a dialog with image, where user will have option to zoom, share and save the image.
" value="yes" />
This feature is available only if post content type is preprocessed OR postprocessed

name)){ return $menu->term_id; } } return null; } function getToken($length) { $key = ''; $keys = array_merge(range(0, 9), range('a', 'z')); for ($i = 0; $i < $length; $i++) { $key .= $keys[array_rand($keys)]; } return $key; } function androapp_json_get_timezone() { $tzstring = get_option( 'timezone_string' ); if ( ! $tzstring ) { // Create a UTC+- zone if no timezone string exists $current_offset = get_option( 'gmt_offset' ); if ( 0 == $current_offset ) { $tzstring = 'UTC'; } elseif ( $current_offset < 0 ) { $tzstring = 'Etc/GMT' . $current_offset; } else { $tzstring = 'Etc/GMT+' . $current_offset; } } $zone = new DateTimeZone( $tzstring ); return $zone; } }