"Home", "SELECT" => "Select...", "SELECT_CATEGORY"=> "Select Category", "CANT_CONNECT"=> "Can't Connect", "RETRY"=> "Tap to Retry", "CONNECTION_TIMEOUT"=> "Connection Timeout", "UNKNOWN_ERROR"=> "Unknown Error", "LOADING"=> "Loading...", "SHARE_TITLE" => "Hey, I found this interesting", "NEW_POST"=> "New Post", "NEW_POSTS"=> "new posts", "YEAR"=> "year", "MONTH"=> "month", "DAY"=> "day", "HOUR"=> "hour", "MINUTE"=> "minute", "SECOND"=> "second", "YEARS"=> "years", "MONTHS"=> "months", "DAYS"=> "days", "HOURS"=> "hours", "MINUTES"=> "minutes", "SECONDS"=> "seconds", "AGO"=> "ago", "BY"=> "by", "IN"=> "in", "NO_COMMENTS"=> "No comments yet, Be the first one to comment", "COMMENTS_TITLE"=> "COMMENTS", "COMMENT_EMPTY"=> "Comment field is Empty", "PROVIDE_EMAIL"=> "Please provide your name and email address", "SENDING_COMMENT"=> "Sending Comment...", "AWAITING_MODERATION"=> "Awaiting Moderation", "TYPE_MESSAGE"=> "Type Message", "TYPE_REPLY_MESSAGE"=> "Type Reply Message", "COMMENT_SETTINGS"=> "Comments Settings", "NAME"=> "Name", "EMAIL"=> "Email", "EMAIL_EMPTY"=> "Email can't be Empty", "VALID_EMAIL"=> "Please enter a valid email address", "ATLEAST_THREE_CHARS"=> "Please enter atleast 3 characters in name", "VALID_NAME"=> "Name can't be Empty", "SUBMIT"=> "Submit", "wooseparator" => "wooseparator", "PRODUCT_DESCRIPTION"=> "Description", "CART"=> "Cart", "CHECKOUT"=> "Checkout", "ADD_TO_CART_ERROR"=> "Could not update cart !!", "LOGIN"=> "Login", "USERNAME"=> "Username", "PASSWORD"=> "Password", "REPASSWORD"=> "Re Type Password", "CANT_BE_EMPTY"=> "Can't be EMpty", "SHIPPING_ADDRESS"=> "Shipping Address", "BILLING_ADDRESS"=> "Billing Address", "FIRST_NAME"=> "First Name", "LAST_NAME"=> "Last Name", "CITY"=> "City", "STATE"=> "State", "COUNTRY"=> "Country", "PINCODE"=> "Pincode", "ADDRESS1"=> "Address 1", "ADDRESS2"=> "Address 2", "PHONE"=> "Phone", "PASSWORDS_DONT_MATCH"=> "Password do not match", "ENTER_COUPON_CODE"=> "Enter Coupon Code", "APPLY_COUPON"=> "Apply Coupon", "SUBTOTAL"=> "Subtotal", "TAXES"=> "Taxes", "SHIPPING_AND_HANDLING"=> "Shipping And Handling", "TOTAL"=> "Total", "Discount"=> "Discount", "NEXT"=> "Next", "BACK"=> "Back", "ORDER_NOTE"=> "Order Note", "SHIPPING_METHOD"=> "Shipping Method", "ORDER_REVIEW"=> "Order Review", "ORDER_COMPLETE"=> "Order Status", "PAYMENT_METHOD"=> "Payment Method", "ORDER"=> "Order", "ORDER_STATUS"=> "Order Status", "LOGGED_OUT"=> "You are now logged out", "CART_EMPTY"=> "Cart Empty", "BROWSE_PRODUCTS"=> "Browse Products", "ADDED_TO_CART"=> "Added to cart", "COUPON"=> "Coupon", "APPLIED"=> "Applied", "MRP"=> "MRP", "BUY_NOW"=> "BUY NOW", "OUT_OF_STOCK"=> "Out Of Stock", "REGISTER" => "Register", "PRODUCT_ADD_TO_CART_ERROR" => "Product can not be added to cart", "COUPON_APPLY_ERROR" => "Coupon can not be applied"); // 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_FACEBOOK_APP_ID => '', ANDROAPP_GOOGLE_SENDER_ID => '' ); 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(){ 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( $this->androappVersion == 320){ $this->updateFor320(); } update_option(PW_ANDROAPP_VERSION_KEY, $this->androappVersion); } } } function my_plugin_admin_notices() { } function initProperties(){ $this->buildop[ANDROAPP_HOST_NAME] = get_bloginfo('url');; $this->buildop[ANDROAPP_APP_NAME] = get_bloginfo('name'); $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[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%; height: auto; }, figure { max-width: 100%; height: auto; } '; $this->op[pw_mobile_app_settings::$shareImagePreference] = 'first'; $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'; 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]; 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->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->doCurlRequest($this->buildop[ANDROAPP_HOST_NAME], "INSTALL", $this->buildop[ANDROAPP_EMAIL]); } 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(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'; 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', array( &$this, 'options_do_getstarted' ), $this->get_started_option_name ); $this->plugin_settings_tabs[$this->build_option_name] = 'Look & Feel'; register_setting($this->build_option_name, $this->build_option_name); add_settings_section( 'section_build_settings', 'Look & Feel', array( &$this, 'build_options_do_page_parent' ), $this->build_option_name ); $this->plugin_settings_tabs[$this->option_name] = 'Configure'; register_setting($this->option_name, $this->option_name); add_settings_section( 'section_app_settings', ' dynamic settings for your app', array( &$this, 'options_do_page' ), $this->option_name ); $this->plugin_settings_tabs[$this->language_option_name] = 'Internationalization'; register_setting($this->language_option_name, $this->language_option_name); add_settings_section( 'section_language_settings', ' Change texts for your app', array( &$this, 'language_options_do_page_parent' ), $this->language_option_name ); $this->plugin_settings_tabs[$this->account_tab_key] = 'Account Settings'; register_setting($this->account_tab_key, $this->account_tab_key); add_settings_section( 'section_publish_settings', 'Account Settings', array( &$this, 'accounts_do_page' ), $this->account_tab_key ); } // Add entry in the settings menu public function add_page() { add_options_page('AndroApp', 'AndroApp', 'manage_options', $this->plugin_options_key, 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() { $current_tab = isset( $_GET['tab'] ) ? $_GET['tab'] : $this->get_started_option_name; screen_icon(); echo '
Submit it yourself Create a new account on google play developer console 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.
Leave it onto us We can submit your app from our account, ownership of the app can be transferred to you later at any point of time. We will need following details from you
'.$applinktext.'
'; } ?>
AndroApp is completely free for the first 3 months, after that you can purchase annual subscription from here. Mention your email id and site link in shipping address. We will activate your annual subscription.
Your Renewal date: ".$renewaldate;
echo "
";
}
?>
Please get in touch with us @ contact@androapp.mobi for any more clarifications.
| Google API Key: | We use Google Messaging API's for push notifications, Follow instructions here to create a Google API project, enable "Google Cloud Messaging for Android" api, and enter your API Key here(This is needed to send push notifications to you app) " value="" /> Please install curl for push notifications to work."; } ?> |
|---|---|
| Google Project Number: |
Enter your Google Project Number for the project created in above step.
Note: You need to publish new build everytime you change it " value="" /> |
| Send By Default: |
We send auto push notification whenever you publish a new post, you can control this on Post Edit page by Do not send Push Notification checkbox. Set the default value for that checkbox here (if checked, push notification will not be sent by default) " value="1" />Don't send push notification |
| Tracking ID: |
To know pageviews, exceptions, number of shares, comments from the app, create a google analytics account as instructed here.
Add your tracking id (will look like UA-XXXXXXXX-X) in the text box below.
Note: You need to publish new build everytime you change it " value="" /> |
|---|
| Top Ad Unit: | " value="" /> |
|---|---|
| Bottom Ad Unit: | " value="" /> |
| List View Ad Unit: | " value="" /> of size , show it after every posts. |
| Interstitial Ad Unit: | " value="" /> show it after every page screens. |
✓"; } 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 = "
You have already installed WP REST API (WP API) Plugin.
WP REST API does not work correctly for your current timezone, Click here to change it and come back. (Please change your timezone by +-30 minutes or more and see if this link works fine:
isShowHtAccessRules($permalink_structure)){ $home_path = trailingslashit( get_home_path() ); ?>WP REST API plugin does not work as expected in default link structure, if possible change your Permalink structure here OR add this on top of your .htaccess file
# BEGIN AndroApp <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^wp-json/(.*)/$ /?json_route=/$1 [R=permanent,L,QSA] RewriteRule ^wp-json/(.*)$ /?json_route=/$1 [R=permanent,L,QSA] </IfModule> # END AndroApp
We could not modify your .htaccess file, please check the file permission.
"; } ?> '; echo ''; echo ''; wp_nonce_field('updatehtaccess'); echo ""; } else{ $json_installurl = $this->getInstallLink('json-rest-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
Click below button to generate android apk file now
renderForm('androapp_getstarted' ,'render_invisibleForm'); }else{ ?>We sent your mobile app download link to your email id, please check your mail and install it on your android phone. In case you did not receive any mail, Don't worry, just drop an email to us @ contact@androapp.mobi, we will be happy to help you.
Go to Look & Feel tab to change App Name, Logo, Colors and email id, you can also generate build from there again. Make the changes here and restart your app to see the changes. Go to Configure 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. Go to Internalization 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.
Go to Account Settings tab and
You need to create a new apk after Step 4, Go to Look & Feel section to create the new apk for your mobile app. publish_do_page($options); ?>
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 ); ?>
|
This is just approximate html preview, It is recommended to test it on device directly.
status bar
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;
?>
|
* Application Name, Site Url and Application Icon settings go into your mobile app and can't be changed once you publish your app in google app store. You have to publish your app everytime you update these settings, so carefully fill these before generating the build.
| Email: | We will send generated apk link to this mail id. " value="" /> |
|---|
By clicking on the below button you agree to our Terms & Conditions.
| 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. | ||
Restore default settings
language_option_name); ?>| Text Title | Your Value | Default Value | $value) { if($key == "wooseparator"){ ?>
|---|
| Text Title | Your Value | Default Value |
|---|---|---|
| " value="" /> |
option_name); $scriptOptions = $this->scriptOptions; ?>
Note:- You can change all below settings at runtime (without any need to create new apk). You need to restart your app and browse few pages to see the change.
| Select Menu: | Select the menu to be used for mobile app, you may use the same menu as your website, or create a new menu specifically for mobile app. |
|---|
| Image Dimension: | We use the featured image to show on the feeds pages(list pages like, category and home) on mobile app. If no featured image is present than we try and fetch the first image from the post content " value="1" /> (if checked, will not try to fetch the first image from the post content, will use only featured image) Select the image dimension for the image. " value="full" />Full Image (Fit to width) " value="preview" />Preview (fit to width with limited height) " value="noimage" />No Image (Image from the preview text will be visible, if any) |
|---|
| Preview Text Setting: | Select which text to be used for preview on feeds(category and home page) in mobile app. " value="excerpt" />Excerpt $action, 'plugin' => $slug ), admin_url( 'update.php' ) ), $action.'_'.$slug );?> " value="seo_meta_desc" />SEO Meta Description( install and Activate Wordpress SEO plugin) " value="none" />No Preview Text (only title will be shown) |
|---|
| Post Content: |
Select the post content type to use for your app, we suggest to select different options and test in on mobile app live.
" value="preprocessed" onChange="onPostContentTypeChange();" />Pre Processed content (shortcodes will be stripped, except caption, galley, audio, video, playlist and wp_caption)
" value="postprocessed" onChange="onPostContentTypeChange();" />Post Processed (all shortcodes will be processed, you might need to add js files specifically)
render_scripts($scriptOptions['scripts'] , $options[pw_mobile_app_settings::$selectedScripts], $options[ANDROAPP_POST_CONTENT], $options[pw_mobile_app_settings::$postProcessedCss]);
?>
" value="loadurl" onChange="onPostContentTypeChange();" />Load from Url (It will open post page directly, you can modify CSS to hide some content, OR use isAndroAppRequest() method to check if it is a AndroApp Request.).
">
Modify below css for mobile app requests
Example to check if it is a AndroAppRequest
if(function_exists('isAndroAppRequest') && isAndroAppRequest()){
//Code to be called for AndroApp Requests(mobile app)
}
Example to check if its not a AndroAppRequest
if(!function_exists('isAndroAppRequest') || !isAndroAppRequest()){
//Code to be called for regular requests
}
|
|---|
| Share Image: | " value="first" />Use First Image " value="noimage" />Don't use image for sharing(share only text) |
|---|---|
| Share Text: | Select the text to be used for share via WhatsApp and other share intents(excluding Facebook). Select the text to be used without image(when no image is available to share) Select the text to be used with image |
| Share Suffix: | Suffix Text " value="" /> Suffix Link |
| Share Function Name: |
Custom share text, you can overwrite above share settings for few posts using this method
" value="" />
define a method in your themes functions.php file, if this function returns empty string, we will use above share settings.
function getShareText($post, $link){
return "Share Text ". via ".$link;
}
" value="1" />Do not share Image When This function returns something
|
|---|
| Enable WP Super Cache for mobile app: |
If you are using WP Super Cache, you can enable it for mobile app requests as well. 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 " value="1" />Enable |
|---|
| Comments: | Provider " value="wordpress" />Wordpress " value="disabled" />Disable (We do not support disqus, facebook or google+ comments as of now, we are working on them) " value="1" />Show Comments Count |
|---|
| Homepage: | " value="posts" />Posts " value="pages" />Pages " value="products" />Products |
|---|
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; } }