From a1e894b465ce0d68fb88b43fc1ec76d965899aac Mon Sep 17 00:00:00 2001 From: Marco Milesi Date: Tue, 8 Dec 2020 22:58:20 +0100 Subject: [PATCH] V2.2 Minor functions.php improvements + Removed old GitHub dependency --- functions.php | 18 +- github/CHANGES.md | 428 ------ github/LICENSE | 339 ----- github/README.md | 321 ----- github/assets/GitHub_Updater_logo.png | Bin 11171 -> 0 bytes github/assets/GitHub_Updater_logo_small.png | Bin 5237 -> 0 bytes github/assets/screenshot-1.png | Bin 144382 -> 0 bytes github/assets/screenshot-2.png | Bin 74131 -> 0 bytes github/github-updater.php | 64 - github/js/ghu_install.js | 32 - github/languages/description-i18n-keys.txt | 29 - github/languages/github-updater-ar.mo | Bin 5614 -> 0 bytes github/languages/github-updater-ar.po | 363 ----- github/languages/github-updater-de_AT.mo | Bin 8037 -> 0 bytes github/languages/github-updater-de_AT.po | 342 ----- github/languages/github-updater-de_CH.mo | Bin 8037 -> 0 bytes github/languages/github-updater-de_CH.po | 342 ----- github/languages/github-updater-de_DE.mo | Bin 8037 -> 0 bytes github/languages/github-updater-de_DE.po | 342 ----- github/languages/github-updater-es_ES.mo | Bin 5673 -> 0 bytes github/languages/github-updater-es_ES.po | 340 ----- github/languages/github-updater-fr_FR.mo | Bin 4503 -> 0 bytes github/languages/github-updater-fr_FR.po | 387 ----- github/languages/github-updater-it.mo | Bin 4287 -> 0 bytes github/languages/github-updater-it.po | 400 ------ github/languages/github-updater-ja.mo | Bin 8888 -> 0 bytes github/languages/github-updater-ja.po | 331 ----- github/languages/github-updater-pt_BR.mo | Bin 3060 -> 0 bytes github/languages/github-updater-pt_BR.po | 375 ----- github/languages/github-updater-pt_PT.mo | Bin 7937 -> 0 bytes github/languages/github-updater-pt_PT.po | 332 ----- github/languages/github-updater-ro_RO.mo | Bin 7721 -> 0 bytes github/languages/github-updater-ro_RO.po | 327 ----- github/languages/github-updater-ru_RU.mo | Bin 5641 -> 0 bytes github/languages/github-updater-ru_RU.po | 320 ----- github/languages/github-updater-sv_SE.mo | Bin 3322 -> 0 bytes github/languages/github-updater-sv_SE.po | 363 ----- github/languages/github-updater-uk.mo | Bin 3712 -> 0 bytes github/languages/github-updater-uk.po | 365 ----- github/languages/github-updater.pot | 312 ----- github/mu/ghu-loader.php | 82 -- github/readme.txt | 45 - github/src/GitHub_Updater/API.php | 182 --- github/src/GitHub_Updater/Autoloader.php | 87 -- github/src/GitHub_Updater/Base.php | 1007 ------------- github/src/GitHub_Updater/Bitbucket_API.php | 357 ----- github/src/GitHub_Updater/GitHub_API.php | 401 ------ github/src/GitHub_Updater/GitLab_API.php | 431 ------ github/src/GitHub_Updater/Install.php | 392 ------ github/src/GitHub_Updater/Messages.php | 121 -- github/src/GitHub_Updater/Plugin.php | 333 ----- github/src/GitHub_Updater/Readme_Parser.php | 82 -- github/src/GitHub_Updater/Remote_Update.php | 101 -- github/src/GitHub_Updater/Settings.php | 560 -------- github/src/GitHub_Updater/Theme.php | 451 ------ github/uninstall.php | 33 - github/vendor/Parsedown.php | 1402 ------------------- github/vendor/WPUpdatePhp.php | 115 -- github/vendor/parse-readme.php | 335 ----- style.css | 2 +- 60 files changed, 9 insertions(+), 12982 deletions(-) delete mode 100644 github/CHANGES.md delete mode 100644 github/LICENSE delete mode 100644 github/README.md delete mode 100644 github/assets/GitHub_Updater_logo.png delete mode 100644 github/assets/GitHub_Updater_logo_small.png delete mode 100644 github/assets/screenshot-1.png delete mode 100644 github/assets/screenshot-2.png delete mode 100644 github/github-updater.php delete mode 100644 github/js/ghu_install.js delete mode 100644 github/languages/description-i18n-keys.txt delete mode 100644 github/languages/github-updater-ar.mo delete mode 100644 github/languages/github-updater-ar.po delete mode 100644 github/languages/github-updater-de_AT.mo delete mode 100644 github/languages/github-updater-de_AT.po delete mode 100644 github/languages/github-updater-de_CH.mo delete mode 100644 github/languages/github-updater-de_CH.po delete mode 100644 github/languages/github-updater-de_DE.mo delete mode 100644 github/languages/github-updater-de_DE.po delete mode 100644 github/languages/github-updater-es_ES.mo delete mode 100644 github/languages/github-updater-es_ES.po delete mode 100644 github/languages/github-updater-fr_FR.mo delete mode 100644 github/languages/github-updater-fr_FR.po delete mode 100644 github/languages/github-updater-it.mo delete mode 100644 github/languages/github-updater-it.po delete mode 100644 github/languages/github-updater-ja.mo delete mode 100644 github/languages/github-updater-ja.po delete mode 100644 github/languages/github-updater-pt_BR.mo delete mode 100644 github/languages/github-updater-pt_BR.po delete mode 100644 github/languages/github-updater-pt_PT.mo delete mode 100644 github/languages/github-updater-pt_PT.po delete mode 100644 github/languages/github-updater-ro_RO.mo delete mode 100644 github/languages/github-updater-ro_RO.po delete mode 100644 github/languages/github-updater-ru_RU.mo delete mode 100644 github/languages/github-updater-ru_RU.po delete mode 100644 github/languages/github-updater-sv_SE.mo delete mode 100644 github/languages/github-updater-sv_SE.po delete mode 100644 github/languages/github-updater-uk.mo delete mode 100644 github/languages/github-updater-uk.po delete mode 100644 github/languages/github-updater.pot delete mode 100644 github/mu/ghu-loader.php delete mode 100644 github/readme.txt delete mode 100644 github/src/GitHub_Updater/API.php delete mode 100644 github/src/GitHub_Updater/Autoloader.php delete mode 100644 github/src/GitHub_Updater/Base.php delete mode 100644 github/src/GitHub_Updater/Bitbucket_API.php delete mode 100644 github/src/GitHub_Updater/GitHub_API.php delete mode 100644 github/src/GitHub_Updater/GitLab_API.php delete mode 100644 github/src/GitHub_Updater/Install.php delete mode 100644 github/src/GitHub_Updater/Messages.php delete mode 100644 github/src/GitHub_Updater/Plugin.php delete mode 100644 github/src/GitHub_Updater/Readme_Parser.php delete mode 100644 github/src/GitHub_Updater/Remote_Update.php delete mode 100644 github/src/GitHub_Updater/Settings.php delete mode 100644 github/src/GitHub_Updater/Theme.php delete mode 100644 github/uninstall.php delete mode 100644 github/vendor/Parsedown.php delete mode 100644 github/vendor/WPUpdatePhp.php delete mode 100644 github/vendor/parse-readme.php diff --git a/functions.php b/functions.php index d83dd81..1d12060 100644 --- a/functions.php +++ b/functions.php @@ -20,9 +20,8 @@ function load_modules() { if (get_option('pasw_eulaw') != 0) { require ( get_template_directory() . '/include/moduli/pasw2015-eulaw.php' ); } if (get_option('pasw_post_tpl') != 0) { require ( get_template_directory() . '/include/moduli/pasw2015-post-templates.php' ); } } -add_action('admin_init', "reg_set_p"); - -function reg_set_p() { +add_action('admin_init', function() { + require (get_template_directory() . '/include/moduli-pasw2015.php' ); register_setting( 'pasw2015_options', 'pasw_social'); @@ -73,14 +72,13 @@ function reg_set_p() { wp_safe_redirect(admin_url('/admin.php?page=pasw2015', 'http'), 301); } -} +} ); -add_action('admin_notices', 'pasw_admin_messages'); -function pasw_admin_messages() {; +add_action('admin_notices', function() { - if ( isset($_GET['pasw2015alert'])) { - update_option( 'pasw2015_versionalert', '0' ); - } + if ( isset($_GET['pasw2015alert'])) { + update_option( 'pasw2015_versionalert', '0' ); + } if ( get_option('pasw2015_versionalert') == '1.6.6') { echo ' @@ -93,7 +91,7 @@ function pasw_admin_messages() {;

'; } -} +} ); add_action( 'after_setup_theme', 'pasw2015_setup' ); add_action('admin_notices', 'pasw_alerts'); diff --git a/github/CHANGES.md b/github/CHANGES.md deleted file mode 100644 index 5179326..0000000 --- a/github/CHANGES.md +++ /dev/null @@ -1,428 +0,0 @@ -#### 4.6.2 -* refactor remote update services to new `class Remote_Update` -* general security fixes, don't call files directly... -* fix/test for remote updating via InfiniteWP. Child themes are not identified by IWP as needing updates, otherwise it seems to work as expected. - -#### 4.6.1 -* fix for remote updating via iThemes Sync -* fix for renaming when AJAX updating of plugins - -#### 4.6.0 -* newer, much more precise method for renaming based upon selected repos from the dashboard. Yes, I tested on staging server. :-) -* added feature to use extended naming of plugin directories to avoid potential conflict with WP.org slugs. Props @reinink for the idea. -* strip `.git` from the end of the plugin or theme URI for those who haven't gotten to the README yet. -* added javascript show/hide options on the Install page. -* fixed boolean logic to _not_ display GitLab Private Token input on Install if it's already set. -* updated screenshots in README -* switched a number of methods to be non-static, anticipation of testing. -* [broken: renaming during updates from upgrade services](https://github.com/afragen/github-updater/issues/262) - -#### 4.5.7 -* hotfix GitLab private updating/installing -* fix some PHP notices - -#### 4.5.6 -* bugfix for renaming code to properly strip `-` -* most of Russian translation by [Anatoly Yumashev](https://github.com/yumashev) - -#### 4.5.5 -* back to simplifying the renaming code, always remember to test renaming on live server. -* strip `-` and `-` from beginning and end of update for more precise renaming -* I think this is the end of renaming for a while. :P - -#### 4.5.4 -* hotfix for renaming, I reverted back a bunch with more extensive testing on server. It's amazing how different renaming is locally vs on server. - -#### 4.5.3 -* updated language files -- oops - -#### 4.5.2 -* cleanup and refactor of renaming code. -* added Romanian translation by [Corneliu Cirlan](https://github.com/corneliucirlan) -* added Japanese translation by [ishihara](https://github.com/1shiharat) - -#### 4.5.1 -* fix bug so updates display without having to randomly refresh. - -#### 4.5.0 -* fix some PHP notices -* add update by GitHub release asset in lieu of update by tag when asset is present -* install asset via remote install if asset URI used -* refactor to simplify class structure, created `abstract class API` and `class Messages` -* add GitLab support!! -* refactor to set all git servers and extra headers to static arrays in `Base` -* remove checkbox when loaded as mu-plugin, props @pbearne - -#### 4.4.0 -* only add custom user agent once :P -* add support of GitHub Enterprise via new `GitHub Enterprise` header -* sanitize filter input -* add support for parsing `readme.txt` for _View details_ information using `WordPress_Plugin_Readme_Parser` by @markjaquith -* fixed _View details_ link to show for all cases when plugin using GitHub Updater -* refactor creation of header parts and URIs - -#### 4.3.1 -* Spanish translation by [Jose Miguel Bejarano](https://github.com/xDae) -* German translation by [Linus Metzler](https://github.com/limenet) -* squish PHP notices -* add custom user agent to `wp_remote_get` and tweak error message at request of GitHub ;-) -* fixed edge case renaming bug - -#### 4.3.0 -* use @WPUpdatePhp `class WPUpdatePhp` for PHP version checking -* use https://api.wordpress.org not http -* Arabic translation by [Hyyan Abo FAkher](https://github.com/hyyan) -* make strings better for translation - thanks @pedro-mendonca and @fxbenard -* additional Portuguese translation by [Pedro Mendonça](https://github.com/pedro-mendonca) -* refactor for getting local plugin and theme meta, now simpler for additional APIs (I'm thinking about you GitLab) -* fix link in README to GitHub Link -* correctly pass array as last argument in `add_settings_field` -* add focus to URI input field -* add Setting for personal GitHub Access Token to avoid API rate limit - thanks @mlteal -* add Setting for branch switching from the Plugins page -* add 'View details' link in Plugins page - -#### 4.2.2 -* fix POT and some updated languages, thanks @fxbenard -* fix PHP notice for `$options` settings on initial install - thanks @benosman - -#### 4.2.1 -* add PHP version check for graceful exit -* add to error message for 401 error. -* save settings when remote installing a private repo - -#### 4.2.0 -* added minutes until reset of GitHub API's rate limit to error message -* added `placeholder = "master"` to remote install branch text input -* I should have made the last version 4.2.0 as I added a new feature. I'll try to be better with semantic versioning in the future. ;-) - -#### 4.1.4 -* add message to certain admin pages when API returns HTTP error code -* update POT to remove HTML entity codes from strings and generally try to make i18n better -* Swedish translation by [Andréas Lundgren](https://github.com/Adevade) -* added logo to README and Settings page - -#### 4.1.3 -* use `strtolower` comparison of plugin directory and repo name. This might is an issue related to the manual installation of a plugin before any update might occur. This allows the **View details** screen to display in these instances where the case of the directory and repo aren't identical. This doesn't work for themes. - -#### 4.1.2 -* hide star ratings from **View details** screen for private repos - -#### 4.1.1 -* add `plugin` to `$response` in `Plugin::pre_set_site_transient_update_plugins` to fix PHP Notice -* rename `classes` to `src` to follow more conventional naming -* refactor renaming code to function under all circumstances, I hope ;-) - -#### 4.1.0 -* added remote installation of plugins or themes, both public and private -* remote installation using either full URI or short `` format -* created new tabbed interface for settings -* added another screenshot to readme -* I'd like to apologize to all my translators for adding new strings often, you guys are great, thanks! - -#### 4.0.1 -* hotfix to force an array type when sanitizing settings, it gave me a fatal I wasn't expecting. - -#### 4.0.0 -* changed `is_a()` to `instanceof` per https://core.trac.wordpress.org/changeset/31188 -* requires PHP 5.3 or greater as autoloader class requires namespacing
 -* updated all classes for namespacing -* renamed directory and class names to allow for PSR 4 style loading
 -* clean up a number of foreach loops where I was only using either key or value, not both -* Special thanks for all my translators, especially @grappler for adding translation key for description -* bugfix to correctly pick CHANGES.MD or CHANGELOG.MD regardless of case -* removed reading/saving `GitHub Access Token` header into settings. Must use Settings Page. - -#### 3.2.3 - 3.2.6 -* added French translation by @daniel-menard -* added Italian translation by @overclokk -* added Portuguese translation by @valeriosouza -* added Ukrainian translation by @andriiryzhkov (our first translation!!) - -#### 3.2.2 -* remove scraping of user/pass from Bitbucket URI as it's no longer needed -* use `Requires WP` header to fill view options detail -* rename private methods to begin with underscore -* add screenshot to README for Settings Page (only 70 kB) -* stop re-creating transient of transients if it already exists - -#### 3.2.1 -* refactored adding extra headers to `class GitHub_Updater` to ensure they're added before they're needed, resolves issue with WooThemes Updater plugin -* update .pot file - -#### 3.2.0 -* changed settings page and how Bitbucket Private repos authenticate with your username/password -* update .pot - -#### 3.1.1 -* minor transient cleanup -* update .pot file -* fix to get all themes under both single and multisite installs - -#### 3.1.0 -* woot!! - updating from Bitbucket private repos now works!! -* fix to only add HTTP Authentication header under correct circumstances. This obviates need to fix for other APIs that might also use HTTP Authentication. -* fix to correctly add GitHub Access Token from `$options` to `$download_link` - oops -* changes `$options` to `private static $options` to save a few database calls -* Settings page **only** shows private repos, except for initial setup -* simpler test for checking branch as download endpoint -* correctly use `parent::` instead of `self::` -* many updates for translation -* fix to ensure theme rollback and updating works in both single install and multisite -* fix to save settings from single site installations - -#### 3.0.7 -* more efficient solution to HTTP Authentication issues -* more efficient options cleanup -* remove some unnecessary code resulting in few database calls -* change default option setting to use `add_site_option` so not autoloading options - -#### 3.0.6 -* fix for other APIs that use HTTP Authentication, like JetPack - thanks @tsquez - -#### 3.0.5 -* fix more PHP Notices -* correctly set defaults for Settings page :P -* remove options for plugins/themes that are no longer present - -#### 3.0.4 -* Who would've thought `file_exists` was case-sensitive -* when checking meta, use `empty()` instead of `! isset()` for `null array` -* set defaults for Settings page -* fix a number of PHP Notices - -#### 3.0.3 -* Bugfix to properly authenticate on JetPack Stats page - -#### 3.0.2 -* simplify check and exit on Settings if no Bitbucket plugins/themes - -#### 3.0.1 -* Remove Bitbucket settings from page if no appropriate plugins or themes exist. - -#### 3.0.0 -* Settings Page for your GitHub Access Tokens -* added POT file and some more i18n fixes - thanks @grappler -* added `Requires WP` and `Requires PHP` headers to set minimum version requirements - for @GaryJ -* move update check to function to also check WP and PHP version requirements. -* unset any HTTP Authorization headers for GitHub API calls as this gives a 401 error. Rare potential bug if you have private Bitbucket repos. - -#### 2.9.0 -* move instantiation of `class GitHub_Plugin_Updater` and `class GitHub_Theme_Updater` into `GitHub_Updater::init()` and restrict to `current_user_can( 'update_plugins' )` and `current_user_can( 'update_themes' )` so that non-privileged users don't incur load time. -* now loading classes via `spl_autoload_register` -* switched to `erusev/parsedown` for rendering changelogs, faster and more light-weight. -* now parses remote file info to save only file headers to transient. Hopefully speeds up database retrieval of transient. -* added README link to GitHub Link plugin by @szepeviktor -* added mu-plugin option and instructions. -* above revisions mostly due to @szepeviktor prodding me. ;-) -* accept `CHANGES.md` or `CHANGELOG.md` for processing, for @GaryJ -* composer support added, thanks @hyyan - -#### 2.8.1 -* fix for WP Coding Guidelines -* added check for upgrade process instead of `$_GET['action']` (props @SLv99) -* launch classes from `GitHub_Updater::init()` so can load in `add_action( 'init', ...` from `__construct()`. Hopefully this will solve issues with remote upgraders like iThemes Sync, ManageWP, InfiniteWP, and MainWP. Thanks @jazzsequence for testing. Thanks @SLv99 for bringing this to my attention. - -#### 2.8.0 -* refactor API classes and `class GitHub_Updater` to add extra headers from API class. This should allow for better abstraction. Just need to call `GitHub_Updater_{repo}_API::add_headers()` in `class GitHub_Plugin_Updater` and `class GitHub_ Theme_Updater`. -* remove @since tags -* move `maybe_authenticate_http` to `class GitHub_Updater_Bitbucket_API` as it's not used elsewhere -* use non-strict check for http response code (thanks @echav) - -#### 2.7.1 -* added early exit if no local `CHANGES.md` file exists. This should save an API call. -* pull update from WP.org if plugin hosted in WP.org and branch is `master`. - -#### 2.7.0 -* created functions for getting and setting transients -* added deletion of all transients if _force-check_ is used -* removed `GitHub Timeout` and `Bitbucket Timeout` headers -* fix for `wp_remote_retrieve_response_code` check -* give Seth Carstens proper credit in README.md -* move `function make_rating` to `class GitHub_Updater` -* fix for plugin name in update detail view -* fix for Bitbucket repo with no branch tag -* set default timeout to 12 hours, same as WP.org -* fix for 3.9 setting theme update details to `display:none;` -* fix for error when installing themes from WP.org repo -* fix for incorrect plugin upgrade link in detail popup - -#### 2.6.3 -* quick error checking fix for `wp_remote_get` error to wordpress.org API - thanks @deckerweb - -#### 2.6.1 -* fixed CHANGES.md for GFM strike-through - -#### 2.6.0 -* added transient to `plugins_api` call -* better zeroing of variables in getting local theme data -* add error checking to loading of classes -* set default transient timeout to 4 hours -* added new header `GitHub Timeout` or `Bitbucket Timeout` to set individual plugin/theme transient timeout -* ~~fixed for Bitbucket private repos~~ -* abide by WP Coding Guidelines, esp. for braces -* more error checking for correct variable fetch -* added graceful exit if repo does not exist - -#### 2.5.0 -* added `class GitHub_Updater_Bitbucket_API` for Bitbucket hosted plugins and themes. -* improvements to efficiency by not loading when `DOING_AJAX` -* improvements to efficiency in use of transients - -#### 2.4.5 -* set PHP MarkdownExtra posts and comments markup to false props @MikeHansonMe -* remove WP plugin header from `markdown.php` - -#### 2.4.4 -* forgot to include markdown.php - damn - -#### 2.4.2 -* removed PHP Markdown Lib as it required PHP >= 5.3 and that's higher than required by WordPress core. - -#### 2.4.1 -* switched from PHP Markdown Classic to the new PHP Markdown Lib to prevent collisions with other plugins, like Markdown On Save/Improved that also load PHP Markdown or PHP MarkdownExtra. - -#### 2.4.0 -* fixed transient assignment for tags returning empty array. -* added transient for `CHANGES.md` to themes, should further cut down on API 403 errors. -* new feature: theme rollback to previous version thanks @scarstens -* changed update methodology to use most recent tag first. If not tagged update from default branch. - -#### 2.3.3 -* fixed download link to have correct base URI for Repository Contents API. Oops. - -#### 2.3.2 -* rewrite of `GitHub_Update_GitHub_API::construct_download_link` to download zipball and provide appropriate endpoint. - -#### 2.3.1 -* now saving transient and adding early return if API returns 404, this should speed up plugin when repo doesn't have `CHANGES.md` file and provide for early return in no tags have been created. If no tags have been created the API is still hit. - -#### 2.3.0 -* moved action hook to remove `after_theme_row_$stylesheet` to `class GitHub_Theme_Updater` -* added feature: if branch other than `master` is specified then tagged version will be ignored. This should make it much easier for beta testing to groups. See [README.md](https://github.com/afragen/github-updater/blob/develop/README.md) -* converted `class GitHub_Update_GitHub_API` to extension of `class GitHub_Updater` -* combined `description` and `changelog` to show in theme detail view. Rough formatting. Multisite only. -* greatly simplified bug fix from 2.2.2, now using Themes API. - -#### 2.2.2 -* bug fix for removing update notice for WP.org repo themes. Oops. - -#### 2.2.1 -* minor code simplifications -* many thanks to @grappler for solving how to remove default `after_theme_row_$stylesheet` - -#### 2.2.0 -* moved check and load for `markdown.php` into only function that uses it. -* minor README updates -* added abort if this plugin called directly -* added additional data to update available screen in both plugins and themes - issue #8 -* removed requirement for tags in theme updating -* removed extra line endings from `remote_version` -* added ratings function for creating star ratings based upon GitHub repo data. -* bring parts of `class GitHub_Theme_Updater` code on par with `class GitHub_Plugin_Updater` -* added 'ghu-' prefix to transients -* ripped out theme rollback code. Moved to it's own branch on GitHub. -* add custom `after_theme_update_{$stylesheet}` detail. - -#### 2.1.1 -* bug fix to return early from call to `plugins_api` if not getting plugin information. Fixes issue with Plugin Search. - -#### 2.1.0 -* simplify check for `class Markdown_Parser` -* refactor to pass `class GitHub_Update_GitHub_API` as class object. This should enable the creation of other class objects for Bitbucket, etc. -* fix for setting branch when API not responding -* fix for setting download link when API not responding -* redesigned filter for setting transient timeout, but still not working (pull requests welcome) - -#### 2.0.1 -* bug fix to not load `markdown.php` twice. Just in case it's loaded by some other plugin. - -#### 2.0.0 -* rearranged where I put `GitHub Plugin URI` header, etc. in README and in this plugin. -* minor spelling fixes -* renamed some functions for their hooks -* refactored `class GitHub_Plugin_Updater` and `class GitHub_Theme_Updater` to use stdClass objects -* further refactored base class `GitHub_Updater` to contain renaming code and create stdClass objects for data. -* added some ability to see changelog for GitHub hosted plugins. -* trying to follow WordPress Plugin Boilerplate, so renamed `classes` to `includes` -* refactored putting all remote api calls in new `class GitHub_Plugin_Updater_API`. -* Theme updating should now be able to have a specified branch. -* works on WordPress 3.8 -* included Michel Fortin's [PHP-Markdown](http://michelf.ca/projects/php-markdown/) for rendering `CHANGES.md` - -#### 1.8.1 -* added some variable declarations -* added early return in no GitHub sourced plugins or themes are identified - -#### 1.8.0 -* refactored to use base class `GitHub_Updater` and extending classes `GitHub_Plugin_Updater` and `GitHub_Theme_Updater`. - -#### 1.7.4 -* changed method of not overwriting extra headers to pass array. - -#### 1.7.3 -* change `'...'` to `…` in renaming notification -* fix to not overwrite extra headers of other plugins. - -#### 1.7.2 -* removed sorting option from `scandir`. Doesn't work with older versions of PHP < 5.4.0 -* removed extraneous data from array in `multisite_get_themes` - -#### 1.7.1 -* updated the transient for themes -* replaced `readdir` with `scandir` for creating WP\_Theme object in multisite - -#### 1.7.0 -* updated class-theme-updater.php to utilize WP\_Theme class -* added method `get_remote_tag` to update plugins using tags or branch, depending upon which has greater version number. -* `get_remote_tag` uses transient to limit calls to API -* fix for `wp_get_themes` not working under plugin network activation on multisite installation. I recreated `wp_get_themes` by reading in the theme directory and adding the WP\_Theme object of `wp_get_theme( 'dir_in_themes_dir' )` to an array. - -#### 1.6.1 -* bug fix for undeclared variable $github_plugins - -#### 1.6.0 -* Added separate method to parse plugin repo info from header -* Shortened GitHub Plugin URI to only use owner/repo -* Shortened GitHub Theme URI to only use owner/repo - -#### 1.5.0 -* Lots of documentation and some bug fixes. Thanks @GaryJones -* Made version checking regex more compatible. Thanks @GaryJones -* Added ability to define branch to update. -* Refactored plugin/theme renaming code. -* Added `GitHub Branch` feature - Thanks @GaryJones -* Trying to comply with WP Coding Standards. -* Major thanks to @GaryJones for all the pull requests and generally improving this project. - -#### 1.4.3 -* Fixed a couple of non-fatal PHP errors. Thanks @jazzsequence - -#### 1.4.2 -* Cleaned up readme's markdown. - -#### 1.4.1 -* Fixed the README to more accurately reflect support for both plugins and themes. - -#### 1.4 -* Fix for rename functions to be more precise, otherwise might rename wp.org repo themes. - -#### 1.3 -* Simplify a couple of if statements. - -#### 1.2 -* Fix to ignore renaming for wp.org plugins - -#### 1.1 -* Sanity check for theme api uri - -#### 1.0 -* Serialized WP\_Theme object to search for added GitHub header, lots of help from Seth. No more `file_get_contents`. -* Converted plugin class and added it to make joint plugin/theme updater. - -#### 0.2 -* Code cleanup. -* Limit `file_get_contents` to 2000 bytes. - -#### 0.1 -* Initial commit diff --git a/github/LICENSE b/github/LICENSE deleted file mode 100644 index d7f1051..0000000 --- a/github/LICENSE +++ /dev/null @@ -1,339 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - {description} - Copyright (C) {year} {fullname} - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - {signature of Ty Coon}, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/github/README.md b/github/README.md deleted file mode 100644 index ccdfca3..0000000 --- a/github/README.md +++ /dev/null @@ -1,321 +0,0 @@ -![GitHub Updater](./assets/GitHub_Updater_logo.png) - -# GitHub Updater -* Contributors: [Andy Fragen](https://github.com/afragen), [Gary Jones](https://github.com/GaryJones), [Seth Carstens](https://github.com/scarstens), [contributors](https://github.com/afragen/github-updater/graphs/contributors) -* Tags: plugin, theme, update, updater, github, bitbucket, gitlab, remote install -* Requires at least: 3.8 -* Requires PHP: 5.3 -* Tested up to: 4.3 -* Stable tag: master -* Donate link: http://bit.ly/github-updater -* License: GPLv2 or later -* License URI: http://www.gnu.org/licenses/gpl-2.0.html - - -A simple plugin to enable automatic updates to your GitHub, Bitbucket, or GitLab hosted WordPress plugins and themes. It also allows for the remote installation of plugins or themes. - -This plugin is [not allowed in the wp.org repo](https://github.com/afragen/github-updater/issues/34). :frowning: - -## Description - -This plugin was designed to simply update any GitHub hosted WordPress plugin or theme. Your plugin or theme **must** contain a header in the style.css header or in the plugin's header denoting the location on GitHub. The format is as follows. - -`GitHub Plugin URI: afragen/github-updater` -`GitHub Plugin URI: https://github.com/afragen/github-updater` - -or - -`GitHub Theme URI: afragen/test-child` -`GitHub Theme URI: https://github.com/afragen/test-child` - -...where the above URI leads to the __owner/repository__ of your theme or plugin. The URI may be in the format `https://github.com//` or the short format `/`. You do not need both. Only one Plugin or Theme URI is required. You **must not** include any extensions like `.git`. - -## Installation - -### Composer - -Run the composer command: ```composer require afragen/github-updater``` - - -### Upload - -1. Download the latest [tagged archive](https://github.com/afragen/github-updater/releases) (choose the "zip" option). -2. Go to the __Plugins -> Add New__ screen and click the __Upload__ tab. -3. Upload the zipped archive directly. -4. Go to the Plugins screen and click __Activate__. - -### Manual - -1. Download the latest [tagged archive](https://github.com/afragen/github-updater/releases) (choose the "zip" option). -2. Unzip the archive. -3. Copy the folder to your `/wp-content/plugins/` directory. -4. Go to the Plugins screen and click __Activate__. - -Check out the Codex for more information about [installing plugins manually](http://codex.wordpress.org/Managing_Plugins#Manual_Plugin_Installation). - -### Git - -Using git, browse to your `/wp-content/plugins/` directory and clone this repository: - -`git clone https://github.com/afragen/github-updater.git` - -Then go to your Plugins screen and click __Activate__. - -### Install GitHub Updater as a Must Use Plugin (optional) - -1. Choose a method from above for installation. -1. **DO NOT** activate! -1. Symlink `wp-content/plugins/github-updater/mu/ghu-loader.php` in `wp-content/mu-plugins`. - -#### in Linux -``` -cd -ln -sv wp-content/plugins/github-updater/mu/ghu-loader.php wp-content/mu-plugins -``` - -#### in Windows (Vista, 7, 8) -``` -cd /D -mklink wp-content\mu-plugins\ghu-loader.php wp-content\plugins\github-updater\mu\ghu-loader.php -``` - -This way you get automatic updates and cannot deactivate the plugin. - -## Usage - -### Plugins - -There must be a `GitHub Plugin URI`, `Bitbucket Plugin URI`, or `GitLab Plugin URI` declaration in the plugin's header. - -~~~php -/* -Plugin Name: GitHub Updater -Plugin URI: https://github.com/afragen/github-updater -Description: A plugin to automatically update GitHub hosted plugins and themes into WordPress. Plugin class based upon codepress/github-plugin-updater. Theme class based upon Whitelabel Framework modifications. -Version: 1.0.0 -Author: Andy Fragen -License: GNU General Public License v2 -License URI: http://www.gnu.org/licenses/gpl-2.0.html -Domain Path: /languages -Text Domain: github-updater -GitHub Plugin URI: https://github.com/afragen/github-updater -GitHub Branch: master -*/ -~~~ - -### Themes - -There must be a `GitHub Theme URI`, `Bitbucket Theme URI`, or `GitLab Theme URI` declaration in the `style.css` file. When initially adding a theme, the directory **must** be identical to the repo name. - -~~~css -/* -Theme Name: Test -Theme URI: http://drfragen.info/ -Version: 0.1.0 -Description: Child theme of TwentyTwelve. -Author: Andy Fragen -Template: twentytwelve -Template Version: 1.0.0 -GitHub Theme URI: https://github.com/afragen/test-child -GitHub Branch: master -*/ -~~~ - -### Optional Headers - -`GitHub Branch`, `Bitbucket Branch`, and `GitLab Branch` are available but not required. - -### Enterprise and Self-Hosted Support - -#### GitHub Enterprise Support - -Add the `GitHub Enterprise` header to the plugin or theme that is hosted on your GitHub self-hosted installation. The settings should be similar to `GitHub Enterprise: https://github.yourhost.com`. - -#### GitLab CE/Enterprise Support - -Add the `GitLab CE` or `GitLab Enterprise` header to the plugin or theme that is hosted on your GitLab self-hosted installation. The settings should be similar to `GitLab CE: https://gitlab.yourhost.com` or `GitLab Enterprise: https://gitlab.yourhost.com`. - -### Versions - -GitHub Updater reads the `Version` headers from both the local file and the remote file. For an update to show as available the remote version number **must** be greater than the local version number. It is **required** to have a `Version` header in your main plugin file or your theme's `style.css` file. It is better to use [Semantic Versioning](http://semver.org). - -If you tag releases the version number of the tag must be the same as in the file inside of the tag. Otherwise a circle of updating may ensue. You do not have to tag releases; but if you do the tagged version will be downloaded preferentially. Please refer to the sections below on branches and tags. - -When testing I find it simpler to decrease the version number in the local file rather than continually push updates with version number increments or new tags. - -## Branch Support - -To specify a branch that you would like to use for updating, just add a branch header. If you develop on `master` and are pushing tags, GitHub Updater will update to the newest tag. If there are no tags or the specified branch is not `master` GitHub Updater will use the specified branch for updating. - -The default state is either `GitHub Branch: master` or nothing at all. They are equivalent. - -If you want to update against branch of your repository other than `master` and have that branch push updates out to users make sure you specify the testing branch in a header, i.e. `GitHub Branch: develop`. When you want users to update against the release branch just have them manually change the header to `GitHub Branch: master` or remove it completely. Tags will be ignored when a branch other than `master` is specified. In this case I would suggest semantic version numbering similar to the following, `...`. - -In the GitHub Updater Settings there is a new setting to enable branch switching for plugins. When checked there will be a new ability from the Plugins page to switch between plugin branches. Switching to the current branch will reinstall the current branch. - -## Tagging - -If the branch header, i.e. `GitHub Branch` or `Bitbucket Branch`, is not specified (or is set to `master`), then the latest tag will be used. GitHub Updater will preferentially use a tag over a branch in this instance. - -If you prefer to create a release asset for distribution, this will be used in preference to a tag. - -## Bitbucket Support - -Instead of the `GitHub Plugin URI` header you will need to use the `Bitbucket Plugin URI` header. - -Instead of the `GitHub Theme URI` header you will need to use the `Bitbucket Theme URI` header. - -The `Bitbucket Branch` header is supported for both plugins and themes. - -## GitLab Support - -Instead of the `GitHub Plugin URI` header you will need to use the `GitLab Plugin URI` header. - -Instead of the `GitHub Theme URI` header you will need to use the `GitLab Theme URI` header. - -The `GitLab Branch` header is supported for both plugins and themes. - -You must set a GitLab private token. Go to your GitLab profile page under Edit Account. From here you can retrieve or reset your GitLab private token. - -## Private Repositories - -Only private repositories will show up in the Settings page. - -![Settings Tab](./assets/screenshot-1.png) - -### GitHub Private Repositories - -In order to specify a private repository you will need to obtain a [personal access token](https://github.com/settings/tokens/new). Once you have this, simply add the token to the appropriate plugin or theme in the Settings tab. - -Leave this empty if the plugin or theme is in a public repository. - -### Bitbucket Private Repositories - -Add your personal Bitbucket username and password in the Settings tab. In order to authenticate with the Bitbucket API you will need to have at least `read` privileges for the Bitbucket private repository. - -In order to specify a private repository you will need to check the box next to the repository name in the Settings tab. - -Leave this unchecked if the plugin or theme is in a public repository. - -Do not include your username or password in the plugin or theme URI. - -## WordPress and PHP Requirements - -There are now two **optional** headers for setting minimum requirements for both WordPress and PHP. - -Use `Requires WP:` to set the minimum required version of WordPress needed for your plugin or theme. eg. `Requires WP: 3.8` - -Use `Requires PHP:` to set the minimum required version of PHP needed for your plugin or theme. eg. `Requires PHP: 5.3.0` - -At the moment the default values are **WordPress 3.8.0** and **PHP 5.3.0** - -## Deleting Transients - -If you use the **Check Again** button in the WordPress Updates screen then all the transients will be deleted and the API will be queried again. This may cause timeout issues against the API, especially the GitHub API which only allows 60 unauthenticated calls per hour. - -Be careful about refreshing the browser window after this as you may be continually deleting the transients and hitting the API. - -## Hosting Plugin in WP.org Repository - -If you develop your plugin on GitHub and it also resides in the WP.org repo, the plugin will preferentially pull updates from WP.org if `GitHub Branch: master`. If `GitHub Branch` is anything other than `master` then the update will pull from GitHub. Make sure that the version of your plugin uploaded to WP.org has `GitHub Branch: master`. - -The same applies for Bitbucket or GitLab hosted plugins. - -## Remote Installation of Repositories - -From the `GitHub Updater Settings Page` there is a tabbed interface for remote installation of plugins or themes. You may use either a full URI or short `/` format. - -![Remote Install of Plugin Tab](./assets/screenshot-2.png) - -## Error Messages - -GitHub Updater now reports a small error message on certain pages in the dashboard. The error codes are HTTP status codes. Most often the code will be either 403 or 401. If you don't have an Access Token set for a private GitHub repo you will get a 404 error. - -### Personal GitHub Access Token - -There is a new setting for a personal GitHub Access Token. I **strongly** encourage everyone to create a [personal access token](https://github.com/settings/tokens/new). Create one with at least `public_repo` access and your rate limit will be increased to 5000 API hits per hour. Unauthenticated calls to the GitHub API are limited to 60 API calls per hour and in certain circumstances, like shared hosting, these limits will be more frequently hit. Thanks [mlteal](https://github.com/mlteal). - -### 403 - Unauthorized Access - -#### GitHub -* usually this means that you have reached GitHub API's rate limit of 60 hits per hour. This is informative and should go away in less than an hour. See above regarding the setting of a personal access token to eliminate this entirely. -* a private GitHub repo without an Access Token designated in the Settings. -* will tell you how long until GitHub API's rate limit will be reset. - -### 401 - Incorrect Authentication - -#### Bitbucket -* incorrect Bitbucket user/pass, no `read` access to private Bitbucket repo -* private Bitbucket repo not checked in Settings - -#### GitHub -* using an incorrect private repo GitHub Access Token for a public repo -* an incorrect Access Token for a private GitHub repo. - -### 429 - Too Many Requests - -I've seen this error code occasionally with Bitbucket. - -## Extended Naming - -There's a hidden preference to use extended naming for plugin directories. Extended Naming follows the convention `--`. The normal method is to name the plugin directory ``. Unfortunately there may be a _potential_ conflict with a WP.org plugin. This preference mitigates that potential conflict. If you switch between normal and extended naming you might have to reactivate your plugins. - -To set Extended Naming add `define( 'GITHUB_UPDATER_EXTENDED_NAMING', true );` in your `wp-config.php` or your theme's `functions.php`. - -## Extras - -[szepeviktor](https://github.com/szepeviktor) has created an add-on plugin to GitHub Updater that identifies all plugins with an icon in the plugin view for GitHub or Bitbucket depending upon where they get updates. It's very clever. - - -### Translations - -* French by - * [Daniel Ménard](https://github.com/daniel-menard) - * [fxbenard](https://github.com/fxbenard) -* Italian by [Enea Overclokk](https://github.com/overclokk) -* Portuguese by - * [Valerio Souza](https://github.com/valeriosouza) - * [Pedro Mendonça](https://github.com/pedro-mendonca) -* Ukrainian by [Andrii Ryzhkv](https://github.com/andriiryzhkov) -* Swedish by [Andréas Lundgren](https://github.com/Adevade) -* Arabic by [Hyyan Abo FAkher](https://github.com/hyyan) -* Spanish by [Jose Miguel Bejarano](https://github.com/xDae) -* German by [Linus Metzler](https://github.com/limenet) -* Romanian by [Corneliu Cirlan](https://github.com/corneliucirlan) -* Japanese by [ishihara](https://github.com/1shiharat) -* Russian by [Anatoly Yumashev](https://github.com/yumashev) - -## Issues - -Please log issues on the GitHub at https://github.com/afragen/github-updater/issues - -If you are using a WordPress Multisite installation, the plugin **should** be network activated. - -When first downloading and installing a plugin from GitHub you might have to do the following, otherwise the next update may not be able to cleanup after itself and re-activate the updated plugin or theme. Or you can just use the remote install feature and this will be done for you. :wink: - -1. Unzip the archive. -2. Fix the folder name to remove to extra stuff GitHub adds to the download, like _-master_. -3. Copy the folder to your plugins directory **or** re-zip folder and add from plugins page. - -W3 Total Cache object cache also clears the transient cache. Unfortunately this hampers GitHub Updater's storage of API data using the Transient API. The solution is to turn off the object cache. - -## ChangeLog - -See [CHANGES.md](CHANGES.md). In your project create a `CHANGES.md` or `CHANGELOG.md` file. - -## Credits - -This plugin's theme updater class was based upon [Whitelabel Framework's updater-plugin.php](https://github.com/WordPress-Phoenix/whitelabel-framework/blob/master/inc/admin/updater-plugin.php), which was based upon https://github.com/UCF/Theme-Updater. - -The plugin updater class was based upon [codepress/github-plugin-updater](https://github.com/codepress/github-plugin-updater). - -Includes - -* [Emanuil Rusev's](https://github.com/erusev) [Parsedown](https://github.com/erusev/parsedown) for rendering ChangeLogs. -* [Mark Jaquith's](https://github.com/markjaquith) [WordPress Plugin Readme Parser](https://github.com/markjaquith/WordPress-Plugin-Readme-Parser/tree/WordPress.org) for parsing `readme.txt`. - -GitHub Updater logo by [LogoMajestic](http://www.logomajestic.com). - -## Pull Requests - -Pull requests are welcome. Please fork and submit pull requests against the `develop` branch. diff --git a/github/assets/GitHub_Updater_logo.png b/github/assets/GitHub_Updater_logo.png deleted file mode 100644 index 680ef6506a957a724b9a82649f56f8576fdcce6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11171 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 diff --git a/github/assets/GitHub_Updater_logo_small.png b/github/assets/GitHub_Updater_logo_small.png deleted file mode 100644 index 38eebd1d6146df30bf2412b655e9c9d57da54f5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5237 zcmeI$S2P^Xqrh=3!Rp=WHHhe|1&h_&>V1_UN{A99o2W~4qD5~Zh#*>6HPKdItAvQo zk|>ETO0>WKb$>bkbMEtfxaZvO`OM7goSCPY7z3yV8Gs3ZgM&k+rKxIkz1Ch2OCtR1 zS$#>85eEk!$3WLaO+f*ysHg;nsNRs#HTg@@(B_&5%u~qLN8H@`FG0uW*R(`<)g|uT zfXK<-P*PM(|hTPECH!wH1xM62!@9gYy!^_JX{!eT#@>qh4@3=?)#pC^o(=Y8t zNJuDCSot-&Sma+cN$q4A=o=)t6W6GcyRH!y&0oW<`1Kb~)gDg$$$z46KKf60J{|of z)_#c7c`4X&azm!;_%HRo^IDSS@1;>Nj%0O|Bp zq^now`M%C~vd-&{=XY9nK0iO6%+yWMhhlQ=B%IqUd=%-5Zv~(3((jyFTitn3 z@bd!@Q~_fip`ZPvdXZ?)N8M_hCzfjXQG0UC@ALHO{-yaIwH37((Q|IZcbE581vtma zuP(o)YyR@#G$!$}PWuBt&Po0fZP@QTDkFX=z;Pnl)h_Jc>9V*;R?zdTf{O&M1Z8V zj+d6Ha%rgJg^|hp-uMF#vs7YTSWMUN_PPkBu)dnzJ=@>9;JANIDnylu&Y~TP3S7g;kCtU8D!x7h0ZO!yyC*=Uaw7W>{5?Gz? zH++rCEG7}o&Nbh~4F!3yklmtL#qlx4$xhI3FOWw%fRMDFKgxY2T za7yS$AWF?-%$_EaQ#?E~d>#LJM)&g2rUWiZq0*M^3;^m6c`gHFzl-wj)UxP6AFgor zmJ8buf{L{N*cZW->%cxh>0}^#J#}VU_oLINNsZBG{RD|qw?-~ zG&>%yXabs4FwHnSt;f(J1@mKfZ@ILExS62=mVB_wZG#4g9S@-yM0Tre^5YGNUQT&` z3IYy?yQPii^z_#e3AEZV;eYhNX6Bb<&n+KMi%4&TvJw`x_eeQ0wFld0j1}plz*0|b5hY;hxl=2p`zR>qF{#( zzYN%~7|^tDq%V6pQ0L)?qH*eVc`UmZpC22f<&k_xF9`pVyO7DUQ^O7o-4UXi=F1nL zj%?MFcN^N2!RupzyNel@2HSz`(y+J-TF%1GRX`D~JPABF!xMk>GhA3dD0b?sQF%MHqRlFyFdluL2-LzuPT@ETh8#Yhf%eo)W<9YaHqFFbS%kw89G7R4E(u> z?)KbzssYVSs!)H)q?kf$vD}eaKqpX|0zzG|`a{ zuN)zEB#Y|6C9mx(oJwp;(JjMyDGuzZLVY3h!-j+>lq`>Ld&4tA1Dl?`V27`LUlOZS zR+TqX^(dK`gn1p(a6v;p_j||8Z+()6LnaazI6TrN80TKoVzrn=6Zwst=;xgT`c(Sg zrgrZ<427s))Tlf#yaU>H=!Q0T9l1=Ln2?Ou6rVLO9OJs}k8hAq)bOvASIe2A9;6O~ z^vTPCA}XGXIvSyL?uB_e`SM z{seK@9=LM(P;$RY!#NN7F>98~+yHL`j57}yg*?=Lu$yoR6)Ws-HcN3I1@Gb#)|5@<`FAp8qsPQRov2FLpap+Bxx;F4Yze+`7PM4AT$T2EeU*(>bxN`TBOI_y_o_K|}t{XL+p< zvBZt(`T0{jE&&&CZNv0V*`NN((_lr2YNOF2ZdY(TcY_u4u+)GlELN@ntTxkv4a2~F z-4j!A9Oks|56fY+*s^_YJ8b=EG7a}iP^XDjE|9zJdTW*R>9)wW%Bjo`6l^>`;2rU+ zwiVbaRN_5LTWpR}Tj0C=-5otrFqG6vEb>5yc$xMvKjTzsES`k0FT(z zICu4|8{H+U-)neCt>iA>f)*B-uqZi&;eHVRazNdEZKdnlTWDcHSA_haTaD-g+?s)^>N2(gS zfHp#m40|H+-C6+w&kADHlq#&L`ExVkY6OC^;%R|$mX^iF+sR~PswN@eY8_D;eMd3+ z<|s`*e8SP&SV0a9lb&rW+Z??q)|DVjUH*tf^os$x;*+=iUW}G3k@%v9`bNF--IOzR z6bTCPvL^N_gBB9Ptlk0MSwk|ljX6d+=vQtpU@Hyht`0Q5{BJ&w>|UJVxT{ihnU!@i zMT5@M94?fIdW9(M@Wdnz@1W=fQ0^P7MjE!JuXR*V_c&`1yC;(YG(DmEPfA4=?jNtskFof&X zY7vvAjW-jMiiWv|YD`ZK`B_^iTpLBA&m>tt@^M$F$oO~1Q^jA?ZDr?osy9B>srdmmC|HYG*UinMVxIcpuo7Mc5kBC;?-w^J=}vf#J#6r z60GBUDDT}|+q|A8qqvb^lGp}b>&3X#&zv!uTi2gK@9G57eoNq|T=-*hcud7rDZ{%5PF!0o?>Z z-!rKA``g>AnX2eG>NXk9B0ZY1*N-LEmv{I!a`yBjFzB@aQMTJU1pQG_Wo$#msRf&I z15Ut?foyov#&U{72=LlS;djt3vxBt;@A3{-zCdMruGu5Ia6pgsHF%^k-U4VyU0u_= zbOW-`~nTijM# zrM#dTLrB)k;bvjmX`A3KwYF_^lUbV#jK&rpTd2=MD&Awo^EGZ3;L}OCbw`Au9f$fZXraNpb3uL=>;wZtioLV}L>{khdy{@aSEC zOWmoD8h_>L#iw1zVro0OtacmzZ1ugAm!v+2Z*F0S3#ncP*?iJGedBu?Wq7a1jlhAG z0+}Z#q^|4vixRE!2PFcoeTR9;uVac82B~|{2RY!UxbKEEo}WZ4^hj43B2&5@zflo7 z2!=rvTx|AKZCLE>ol_ED9XX5c3{f>w6BuMOwD;nUSBnHS!^(QXg<@ z)H*OL;55crI==yNEY} znD#cAPZ@42&3S@m>>(JfUTv^YkYBC^Iz`K2vg_166KNL47H&u4ajTqHK5W!+#>HNW zUoRUtzM{jJx8B~&mSf+b_DP*;?{(;WluWH1O$y}b3vS4t-h|5Fx3K$mAj)6qiSqmP zxhE8iT5mGfZo8ia)3K?f?LACBb8aL5C4qVFT!m*2UpfLZ!;KOq{UOXl1xCp~tGb3t z$1pR`A`U9#K+dk=WUaD(T1iZ7V?9NTmnqi% z1A5R*NDQwpM(uN1K7SXdX$G@=_A^htHw?FgUQkDg_;|RM`pAZ^DO(~5IkakqrTDgu z3J?-ar*FkLfNL$`k)5>m$;f4pv57#(gOGCW#ELo-ybxAX0$~1n>Ey;!t0{ZR{Vg+P z>NV@ft_ibv!Ji&W`i*~uRQTVvnt!xOdrxw9%lYH9Cla7GL#VyrI{)ahMA?Ak{i_il zY}J=5S|2qcOYP``z3*e?kenuQ z1z#CT{~jHi6RR{>`@7HGP~=CPn%eIW#p;Y;UQhpWVX{7NFcss}RuF0mzEiGyZdJm= zmLuG-h<0f&9iEbt2Kl6}zU{&Ld3oX6b^paZ@)*mBEWx3nG0!XSIFp2S3a-kh)rx^u zpMzLn((3U>^P{AkrYuMKcGOpCLZlsf5keL_QTif+_H*3@t(v+ zLPAweLV`@y)ydMv-U0$b`%B^{SZ$5vx)+gMMRp0aWisHz@-n>vgM=5#a%2P&LZp20 zXYB}MvTQDfh{A{vx*WP3(+Q-UC5gS;$H3db%*UnSs@vwO8{NZZ-!ft=b_i!TRSJp^ z#?lZUx^jvZLNS`Z&zBg7EOKQ`x5T-iG?cf4xjhJQ4u7E02+ycRut4n&TR zbxPoc_{JRB;+NAb@lhWgB5X)7ga8%76Cx40M@pt-{nNWD)sG<%YY298fzX#FCS|Bh zP2f#qs~}Se2!!f)NYkVc58SU%6)P`=qz?$yu|zxA@572Mv$PilgEpWcW|=jt^sKG# z2r{HA>SqJ*&R+xle4el6vhQAd2+ed@VY=E2BQWGUUtI)VZm|fkE_di(cmi2O-iq+u7;kD zETa%Trxv>}-W@bD7o+RJOQ-VNo3h&0FXspH&F~KPzo4U?aaS!}eIjG(en1!5#U|UUNGDy!Z7#v0!yXw? z_Q$~9FS5SsGyKk3+Pnho9qwJYF6Thkil?sOzS%MBQ0R?K!kzj7d~vNGt;_iimXZ<2 z`68}^yxrZ7W*OgyK33cW+Qa9L!`8B+_otFYHXOqRnzK_Z%$S4{!a*|yL$bj@k-?Q3 zk`ciKx5H-=isr8J_(Vg(ss@Xm!K$UkiQJC?%w=u3CKgi!*ay5B4b`)l|iwacYSrnLSy(~`Br=k=dp2Ll|o{!rRc9IEE1QYC$ zVlZcgXY{v1S(>a&EW&JAY$rfy3$F6U#PT;?yAhiD-o-|Tfb9U95D`PK{hc7lLOto& zx|Y{|$qeXr5$N`Yp%wP2IaGYh(vF-uIOs-BK1fm@--ukZIQT&^=shS(V>J69XlGc# zaUFDsY`R0fZzwlGir-MtLN~Ku5`rh!gz90yA<|<|0v*K8=qN$tY>{A~+!>-`sMHyD z2$_&1JiA01hA0)3!#}^9BSCKK6!lo(V8S)!I}#z7 z*sjbqSQs*@�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 z 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 W(B_b0@PBy!6A_T)FZ-eG^M3%YGpRlR diff --git a/github/assets/screenshot-2.png b/github/assets/screenshot-2.png deleted file mode 100644 index f95085cb82615383d989c83284f13eb290d11a9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74131 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 'GitHub Updater' ); - -if ( ! $updatePhp->does_it_meet_required_php_version() ) { - return false; -} - -// Load textdomain -load_plugin_textdomain( 'github-updater', false, __DIR__ . '/languages' ); - -// Plugin namespace root -$root = array( 'Fragen\\GitHub_Updater' => __DIR__ . '/src/GitHub_Updater' ); - -// Add extra classes -$extra_classes = array( - 'Parsedown' => __DIR__ . '/vendor/Parsedown.php', - 'WPUpdatePHP' => __DIR__ . '/vendor/WPUpdatePhp.php', - 'Automattic_Readme' => __DIR__ . '/vendor/parse-readme.php', - ); - -// Load Autoloader -require_once( __DIR__ . '/src/GitHub_Updater/Autoloader.php' ); -$loader = 'Fragen\\GitHub_Updater\\Autoloader'; -new $loader( $root, $extra_classes ); - -// Instantiate class GitHub_Updater -$instantiate = 'Fragen\\GitHub_Updater\\Base'; -new $instantiate; diff --git a/github/js/ghu_install.js b/github/js/ghu_install.js deleted file mode 100644 index 3f1f395..0000000 --- a/github/js/ghu_install.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Javascript to show and hide the API specific settings - * for the remote install feature. - * - * @class Fragen\GitHub_Updater\Install - * @since 4.6.0 - * @access public - */ -jQuery( document ).ready( function( $ ) { - // Hide non-default (Bitbucket & GitLab) settings on page load - $.each( [ 'bitbucket', 'gitlab' ], function() { - $( 'input.'.concat( this, '_setting') ).parents( 'tr').hide(); - }); - - // When the api selector changes - $( 'select[ name="github_updater_api" ]' ).on( 'change', function() { - - // create difference array - var hideMe = $( [ 'github', 'bitbucket', 'gitlab'] ).not( [ this.value ] ).get(); - - /* - * Show/hide all settings that have the selected api's class. - * this.value equals either 'github', 'bitbucket', or 'gitlab'. - */ - $.each( hideMe, function() { - $( 'input.'.concat( this, '_setting' ) ).parents( 'tr' ).hide(); - }); - - $( 'input.'.concat( this.value, '_setting' ) ).parents( 'tr' ).show(); - - }); -}); diff --git a/github/languages/description-i18n-keys.txt b/github/languages/description-i18n-keys.txt deleted file mode 100644 index 1cd317c..0000000 --- a/github/languages/description-i18n-keys.txt +++ /dev/null @@ -1,29 +0,0 @@ -Add to end of POT - -#. Plugin URI of the plugin/theme -msgid "https://github.com/afragen/github-updater" -msgstr "" - -#. Description of the plugin/theme -msgid "" -"A plugin to automatically update GitHub, Bitbucket or GitLab hosted plugins " -"and themes. It also allows for remote installation of plugins or themes into " -"WordPress. Plugin class based upon codepress/github-plugin-updater. Theme class " -"based upon Whitelabel Framework modifications." -msgstr "" - -#. Author of the plugin/theme -msgid "Andy Fragen" -msgstr "" - - -Add the first line of the following to plugin name - -#. Plugin Name of the plugin/theme -#: includes/GitHub_Updater/Settings.php:63 -#: includes/GitHub_Updater/Settings.php:71 -msgid "GitHub Updater" -msgstr "" - diff --git a/github/languages/github-updater-ar.mo b/github/languages/github-updater-ar.mo deleted file mode 100644 index 36632634cc3b27f72aad04c0d48db7c4f7b42e52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5614 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\n" -"Language-Team: Hyyan Abo Fakher \n" -"Language: ar\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.1\n" -"X-Poedit-Basepath: ..\n" -"X-Poedit-SourceCharset: UTF-8\n" -"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;" -"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;" -"_nx_noop:3c,1,2;__ngettext_noop:1,2\n" -"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " -"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" -"X-Poedit-SearchPath-0: .\n" - -#: mu/ghu-loader.php:66 -msgid "Activated as mu-plugin" -msgstr "تفعيل كإضافة تلقائية" - -#: src/GitHub_Updater/Base.php:467 -#, php-format -msgid "Renaming %1$s to %2$s" -msgstr "إعادة تسمية %s إلى %s" - -#: src/GitHub_Updater/Base.php:477 -msgid "Rename successful" -msgstr "تمت إعادة التسمية بنجاح" - -#: src/GitHub_Updater/Base.php:484 -msgid "Unable to rename downloaded repository." -msgstr "غير قادر على إعادة تسمية المستودع الذي تم تنزيله" - -#: src/GitHub_Updater/Install.php:56 -msgid "A repository URI is required." -msgstr "" - -#: src/GitHub_Updater/Install.php:194 src/GitHub_Updater/Settings.php:69 -msgid "Install Plugin" -msgstr "تنصيب إضافة" - -#: src/GitHub_Updater/Install.php:197 src/GitHub_Updater/Settings.php:70 -msgid "Install Theme" -msgstr "تنصيب موضوع" - -#: src/GitHub_Updater/Install.php:214 -msgid "Plugin" -msgstr "إضافة" - -#: src/GitHub_Updater/Install.php:217 -msgid "Theme" -msgstr "موضوع" - -#: src/GitHub_Updater/Install.php:228 -#, php-format -msgid "GitHub Updater Install %s" -msgstr "تحميل %s" - -#: src/GitHub_Updater/Install.php:235 -#, php-format -msgid "%s URI" -msgstr "رابط %s" - -#: src/GitHub_Updater/Install.php:243 -msgid "Remote Repository Host" -msgstr "مستضيف المستودعات" - -#: src/GitHub_Updater/Install.php:251 -msgid "Repository Branch" -msgstr "الفرع" - -#: src/GitHub_Updater/Install.php:259 -msgid "Private Bitbucket Repository" -msgstr "مستودع Bitbucket خاص" - -#: src/GitHub_Updater/Install.php:267 src/GitHub_Updater/Settings.php:198 -msgid "GitHub Access Token" -msgstr "رمز وصول GitHub " - -#: src/GitHub_Updater/Install.php:278 -#, fuzzy -msgid "GitLab Private Token" -msgstr "إعدادت GitHub الخاصة" - -#: src/GitHub_Updater/Install.php:306 -msgid "Enter branch name or leave empty for `master`" -msgstr "إدخل اسم الفرع أو اتركه فارغاً لاستخدام `master`" - -#: src/GitHub_Updater/Install.php:348 -msgid "Enter GitHub Access Token for private GitHub repositories." -msgstr "أدخل رمز وصول GitHub من مستوعات GitHub الخاصة" - -#: src/GitHub_Updater/Install.php:362 -#, fuzzy -msgid "Enter GitLab Private Token for private GitLab repositories." -msgstr "أدخل رمز وصول GitHub من مستوعات GitHub الخاصة" - -#: src/GitHub_Updater/Messages.php:61 -#, php-format -msgid "%s was not checked. GitHub Updater Error Code:" -msgstr "‏%1$s غير موجود . خطأ GitHub : " - -#: src/GitHub_Updater/Messages.php:69 -#, php-format -msgid "GitHub API's rate limit will reset in %s minutes." -msgstr "GitHub API's rate limit will reset in %1$s minutes." - -#: src/GitHub_Updater/Messages.php:74 -#, php-format -msgid "" -"It looks like you are running into GitHub API rate limits. Be sure and " -"configure a %sPersonal Access Token%s to avoid this issue." -msgstr "" - -#: src/GitHub_Updater/Messages.php:82 -msgid "There is probably an error on the GitHub Updater Settings page." -msgstr "هناك خطأ ما في صفحة إعدادت GitHub " - -#: src/GitHub_Updater/Messages.php:95 -msgid "" -"You must set a GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" - -#: src/GitHub_Updater/Plugin.php:149 -#, fuzzy, php-format -msgid "Current branch is `%1$s`, try %2$sanother branch%3$s." -msgstr "النسخة الحالية محدثة . قم بتجربة %sanother version%s" - -#: src/GitHub_Updater/Plugin.php:199 -#, fuzzy -msgid "View details" -msgstr "تفاصيل" - -#: src/GitHub_Updater/Settings.php:68 src/GitHub_Updater/Settings.php:528 -msgid "Settings" -msgstr "الإعدادت" - -#: src/GitHub_Updater/Settings.php:81 src/GitHub_Updater/Settings.php:89 -#: src/GitHub_Updater/Settings.php:172 -msgid "GitHub Updater Settings" -msgstr "إعدادت GitHub Updater" - -#. Plugin Name of the plugin/theme -#: src/GitHub_Updater/Settings.php:82 src/GitHub_Updater/Settings.php:90 -#: src/GitHub_Updater/Settings.php:127 -msgid "GitHub Updater" -msgstr "GitHub Updater" - -#: src/GitHub_Updater/Settings.php:131 -msgid "Saved." -msgstr "تم الحفظ" - -#: src/GitHub_Updater/Settings.php:179 -msgid "Enable Plugin Branch Switching" -msgstr "" - -#: src/GitHub_Updater/Settings.php:191 -#, fuzzy -msgid "Personal GitHub Access Token" -msgstr "رمز وصول GitHub " - -#: src/GitHub_Updater/Settings.php:211 -msgid "GitHub Private Settings" -msgstr "إعدادت GitHub الخاصة" - -#: src/GitHub_Updater/Settings.php:224 -#, fuzzy -msgid "GitLab Private Settings" -msgstr "إعدادت GitHub الخاصة" - -#: src/GitHub_Updater/Settings.php:233 -#, fuzzy -msgid "GitLab.com Private Token" -msgstr "إعدادت GitHub الخاصة" - -#: src/GitHub_Updater/Settings.php:244 -msgid "GitLab CE or GitLab Enterprise Private Token" -msgstr "" - -#: src/GitHub_Updater/Settings.php:257 -msgid "Bitbucket Private Settings" -msgstr "إعدادت Bitbucket الخاصة" - -#: src/GitHub_Updater/Settings.php:264 -msgid "Bitbucket Username" -msgstr "اسم المستخدم (Bitbucket )" - -#: src/GitHub_Updater/Settings.php:273 -msgid "Bitbucket Password" -msgstr "كلمة المرور (Bitbucket )" - -#: src/GitHub_Updater/Settings.php:286 -msgid "Bitbucket Private Repositories" -msgstr "مستودعات Bitbucket الخاصة" - -#: src/GitHub_Updater/Settings.php:298 -msgid "No private repositories are installed." -msgstr "لم يتم إضافة أي مستودعات خاصة" - -#: src/GitHub_Updater/Settings.php:357 -msgid "Theme:" -msgstr "الموضوع :" - -#: src/GitHub_Updater/Settings.php:433 -msgid "Check to enable branch switching from the Plugins page." -msgstr "" - -#: src/GitHub_Updater/Settings.php:440 -msgid "Enter your GitHub Access Token. Leave empty for public repositories." -msgstr "أدخل رمز وصول GitHub . قم بتركه فارغاً من أجل المستودعات العامة" - -#: src/GitHub_Updater/Settings.php:447 -#, fuzzy -msgid "Enter your personal GitHub Access Token to avoid API access limits." -msgstr "أدخل رمز وصول GitHub . قم بتركه فارغاً من أجل المستودعات العامة" - -#: src/GitHub_Updater/Settings.php:454 -msgid "" -"Check box if private repository. Leave unchecked for public repositories." -msgstr "قم بالاختيار إذا كان المستودع خاص , قم بتركه من أجل المستودعات العامة" - -#: src/GitHub_Updater/Settings.php:461 -msgid "Enter your personal Bitbucket username and password." -msgstr "أدخل اسم المستخدم و كلمة السر لحساب Bitbucket الخاص بك" - -#: src/GitHub_Updater/Settings.php:468 -msgid "Enter your GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" - -#: src/GitHub_Updater/Theme.php:210 -msgid "Theme is up-to-date!" -msgstr "الموضوع محدث" - -#: src/GitHub_Updater/Theme.php:215 -msgid "Rollback to:" -msgstr "التراجع ل :" - -#: src/GitHub_Updater/Theme.php:233 -msgid "No previous tags to rollback to." -msgstr "لا يوجد أية tags لتراجع " - -#: src/GitHub_Updater/Theme.php:241 src/GitHub_Updater/Theme.php:255 -#, php-format -msgid "GitHub Updater shows a new version of %s available." -msgstr "نسخة %1$s جديدة متوافرة " - -#: src/GitHub_Updater/Theme.php:248 -#, php-format -msgid "View version %s details." -msgstr "رؤية تفاصيل نسخة %s" - -#: src/GitHub_Updater/Theme.php:252 -msgid "Automatic update is unavailable for this theme." -msgstr "التحديث التلقائي غير متوافر لهذا الموضوع" - -#: src/GitHub_Updater/Theme.php:262 src/GitHub_Updater/Theme.php:347 -#, php-format -msgid "View version %1$s details%2$s or %3$supdate now%4$s." -msgstr "رؤية نسخة %1$s وتفاصيل %2$s أو %3$s وقم بالتحديث الأن %4$s." - -#: src/GitHub_Updater/Theme.php:340 -#, php-format -msgid "There is a new version of %s available now." -msgstr "هناك نسخة جديدة من %s متوافرة الأن" - -#: src/GitHub_Updater/Theme.php:367 -#, php-format -msgid "Current version is up to date. Try %sanother version%s" -msgstr "النسخة الحالية محدثة . قم بتجربة %sanother version%s" - -#: src/GitHub_Updater/Theme.php:381 -msgid "Choose a Version" -msgstr "قم باختيار نسخة" - -#: src/GitHub_Updater/Theme.php:384 -msgid "Install" -msgstr "تنصيب" - -#: vendor/WPUpdatePhp.php:24 -msgid "this plugin" -msgstr "هذه الإضافة" - -#: vendor/WPUpdatePhp.php:92 -#, php-format -msgid "Unfortunately, %1$s can not run on PHP versions older than %2$s." -msgstr "للأسف , %1$s لا يمكن أن يعمل على نسخة PHP أقدم من %2$s." - -#: vendor/WPUpdatePhp.php:94 vendor/WPUpdatePhp.php:110 -#, php-format -msgid "Read more information about %show you can update%s." -msgstr "اقرأ المزيد عن %s وكيفية التحديث %s." - -#: vendor/WPUpdatePhp.php:108 -#, php-format -msgid "%1$s recommends a PHP version greater than %2$s." -msgstr "%1$s ينصح باستخدام نسخة PHP أحدث من %2$s." - -#. Plugin URI of the plugin/theme -msgid "https://github.com/afragen/github-updater" -msgstr "https://github.com/afragen/github-updater" - -#. Description of the plugin/theme -#, fuzzy -msgid "" -"A plugin to automatically update GitHub, Bitbucket or GitLab hosted plugins " -"and themes. It also allows for remote installation of plugins or themes into " -"WordPress. Plugin class based upon codepress/github-plugin-updater. Theme class " -"based upon Whitelabel Framework modifications." -msgstr "" -"إضافة لتحديث التقائي للإضافات والموضوعات المستضافة على GitHub أو " -"Bitbucket , الإضافة تسمح أيضاً بتنزيل الإضافات والموضوعات مباشرة لوردبريس , " -"برمجة الإضافة معتمدة على codepress/github-plugin-updater. ,ايضاً Whitelabel Framework " - -#. Author of the plugin/theme -msgid "Andy Fragen" -msgstr "Andy Fragen" - -#~ msgid "" -#~ "No changelog is available via GitHub Updater. Create a file CHANGES." -#~ "md or CHANGELOG.md in your repository." -#~ msgstr "" -#~ "ملف متابعة التغيرات غير متوافر من خلال GitHub Updater. قم بإنشاء ملف " -#~ "CHANGES.md أو CHANGELOG.md في المستودع الخاص بك" - -#, fuzzy -#~ msgid "%sView version %s details%s or %supdate now%s." -#~ msgstr "" -#~ " مراجعة تفاصيل الإصدار %3$s أو حدث الأن ." - -#~ msgid "URI" -#~ msgstr "(الرابط)" - -#~ msgid "available now." -#~ msgstr "متوافر الأن" - -#~ msgid "View version" -#~ msgstr "رؤية الإصدار" - -#~ msgid "or" -#~ msgstr "أو" - -#~ msgid "update now" -#~ msgstr "حدث الأن" - -#~ msgid "another version?" -#~ msgstr "نسخة أخرى ؟" - -#~ msgid "" -#~ "GitHub Updater will not load. It requires PHP 5.3 or greater. Please ask " -#~ "your service provider to update PHP on your server" -#~ msgstr "" -#~ "لن يتم تفعيل الإضافة . إن الإضافة تحتاج PHP 5.3 أو أعلى . الرجاء طلب " -#~ "تحديث النسخة الحالية من قبل مزود الخدمة" diff --git a/github/languages/github-updater-de_AT.mo b/github/languages/github-updater-de_AT.mo deleted file mode 100644 index c86d53fd18fecdef5883a089521d4ca4f92a7022..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8037 zcmcJTPi!1l9ml7CXsIcsw57B_;U%s65AWJe(l)G+pWCQdQ_)6fdlncaQ6JMrwy zcK+CLE(nPVsp1ALJys$I5QmmaDGhRxOgppxL*E%=S_h>0Ivhz0;}Mkz!$Ib zygPV#7tcSs-t%q;Ujsh`{u!JE{{h|tKKMb;`!skM`~>)AP~LBW3*fWhBj9hqo534z z@Vtk>yTFIR6;Sp+3)aBzfivLm!3wCxJnuO87&s4p6FdOE4vK6y!PGRk4BiTU4g5Ix z0(cYnGI%HWGxz>=a6iv~0Vlxm8}0gK@HU>$gLi;m0TI!A0Tenff*%H70>29W6jb1& zyu24Y2a2A*4vIc6x##bLa^5dM(c?eCkAk;C^kd*SD9B)v1B?0*tOWu6aW67M`H z{Po=TXTZ<${0;C?@Kx|W@NMuYs6Jxp`Jm`40!6OxfD7Pd@B#2TjDjk>De!rG4;LSXo z1fK_muQ$O{;NQTz@Ke{%?V@{^uYpd%pwO>ircIJKfAjRN>tP3jJyD zIq*0rc6h_#)ezsq^Mj!1a}kttS3vRSr$I#Weh4DE_bZSiyg!2C7gw=Z&b!s20&yX) z0*YVEfC`)ig?=3rzX-rZ@Hy~d@GbXzCq}{aUJI1?*#tSt`!To%z6Oe4R6b+RISXQT zbBTV6OL&uY4|0qBC9Q~Fp5^`=x5#CD2^5>kB|6|p4_7q) zGy#e|)7<4t;V%2FrRQE*{$s}p28^y@mTv=YCo zx8h`D?~$|px9UXkRt{C&xEZvtf#?Ub&Z4(ooCaB(Y>RZ&^OFB%dZl1oLVk; z3UoT+^NP;0AZnLCt))7NklvdUuT=H;f(kIcqc@PTsus1ssbSH%uVJv4*TbMOPzA?U z9VL84M@Eu*;<{wmw+pF6)`D#?MWO-l;JzFwZG9V8c)4>%dB(iW0vQYf@eNU zT)T*!Z8UIUwHj~e$m+rA%YE;w&FG`QRbq3=tsJ>m7L3~K6d-nzFb|C-bhnpno72yA zeF8o?=a}4%^O2kuCLC-WX+FztK?Ig0a3_k~GB-a_$~0yz&Vt!?305t$(!-o_F9xvA&;dGw}HDwm|V83#=@yR@KuYm6}H1{vlr)-NsGM?_+BWxlAbAPiA%N~R>O zl8(DUlxO0v#g39ui+6=k{lIZ+UCJ(&6&ZZN=1`~)e|ZN2D(y%b_En^}`bC7~3w!-c zU>Fq7n45nenwNviepWuX{NDJVTPz0NZ9mURQlN{}{-a629>pY#3Bi{NZz%^E`smx-B*h?2b5h1*F{w&# z264^;zin0}aTwNpa#rzqUKHgTTjhKE)j+Bc$7(|n)^ zNqxNS*B_g$yyb!9HE)G%jbwfMTa%f;QmgV_C5tPP68CuKWlcc%e-C%0h1seO*7lOP zPL|)sl1iHf2DvkG`|e0l1s^Wgui0#iEM#~|Yt48o3S+-X$?O|yyXvipHZ$rXrFwh9 zDnPU-eH4zSIIPrvr78}ar0G)o^>{#JHFZW=O+E8a)CHqV_eB&c!6g;M8c4((KOpsF z_olQUR`s61;k$X7sg#`Ji@*fff0ZmpG)g`_32j2rCRwHu&p5yBnQ+MXyl!Nbg=WQ7 z%-WFF$CkdZTA7oc6mP5?M~OAHZ)*CX%GAS^se}Am+qa*8rlwd}StgF8iG9~~i&UD* zD#bCSQ;d_ES|p36>Wt1VhA93}D38^yeLULkqIS{9k+DTTYUfB)S=D~Grb?X<{UUAA zQGCXVobKLGL*eVQt7B&t&dd+woUTrd&BfH@2zIu6$d%~}*<>&DgJ^~h+fOjc;kDHh zm4kzI!gfn1mHCJ+lX$ABgY_UA`%>kkjx^~>ds=_bX}v97TDlmdSxv34&#dd2^{6&Iv2SMmf-RtLX=3N=ndv(&#LqoXQmH8M6}-Jw_|g zoiI~6h-eN@Efuz-)a7^zbgvwc@}#L%6f`=S+PPfUNiW&C+{&&PlukfcCo(D2ym^W_ zY%?lN(BRRNnL&p(wOMqR6KYF`G_A~0Ef*gXrB(zgrdyKY*w$urBBFz+Inf`yQo2`v zBg_4e0MQ8y&8H;0?#?T1x?h;pbse=Bp3;fpP-VzEX8IG>V0uy)b1H?IxS*(`syZGN z{cz>9OjMGINh|RD|DLC0cC%s$4~FMq7S5RA=OU|eye3kc?=j~6&(l`HlGs`{T&Lx73c7@K+ z&iQU6I;$IS1pGqLPwJVz0y6T;EL_`!=)&0p1F>_SG21ixwPz-lcpmW2O z?32ADwmZk`k=EPCL>wMHol|D$oDJBSS3myC0c45q9y@_ z8Wo4u2aH$uN5v~nmS3XECkubf{6qW8UbBmlAz6&fFgw%^*|caoCAB6ab)-AOwQa8L zL_JIj7sn%ZUWuHq4jS-s=-{f7^X)8Y%FYm-T~yM-CS{RvX&R}n4w}TMacAbs%AyRG z#(yDbe#w%tGo|w}@3(@a=_blEcA_LSs9TMVwhWsWGqY<*yFy4_IkD$=r3UxSW~iiC z>K@fXziP;2G5q!2D3KLhIhGP!c)Q8v<0-YTg#xKW#h_zUB>pCIXQ@b*X8!UJIa(Gs zH1%oO9Yb%$Nv!FM0n^mPA_~iO(lhyZSLyWTB_C?au>7u>Q-h_qi0d|ik{_Ht<+p;u zmi(?{@?KS~b&E_-JI(KIT}fT9xtC#2_D3F{%~odM;D!itT~mIFXE~MGOpiuUcjPj-0v%<{QLG zpX#=^h*Mf&x|+dNuIvtRFa$7;F8Q+G`bJncu3spH6yOU7&Sqcd?< z?rK~MlJ~V&#ZH05+=lEn3bS2`)Y(!qEjGIp$}f{eKP?eJDC2cBLtB~_312*J=U-|= zs;TzglR9W?RlJpR$a^yTnUm}=EN`X8mVH2-mxN}=;&-GWSxKCyyK~v}9_Xzoghd*7 Yx2iClUPSMvqE)^3KPJ28&2@qQ2G7`)5dZ)H diff --git a/github/languages/github-updater-de_AT.po b/github/languages/github-updater-de_AT.po deleted file mode 100644 index ca944f8..0000000 --- a/github/languages/github-updater-de_AT.po +++ /dev/null @@ -1,342 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: GitHub Updater\n" -"POT-Creation-Date: 2015-06-08 20:23-0800\n" -"PO-Revision-Date: 2015-06-08 20:23-0800\n" -"Last-Translator: Linus Metzler \n" -"Language-Team: Andy Fragen \n" -"Language: de_AT\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.1\n" -"X-Poedit-Basepath: ..\n" -"X-Poedit-SourceCharset: UTF-8\n" -"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;" -"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;" -"_nx_noop:3c,1,2;__ngettext_noop:1,2\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Poedit-SearchPath-0: .\n" - -#: mu/ghu-loader.php:66 -msgid "Activated as mu-plugin" -msgstr "Aktiviert als mu-Plugin" - -#: src/GitHub_Updater/Base.php:467 -#, php-format -msgid "Renaming %1$s to %2$s" -msgstr "Umbenennen von%1$s zu %2$s" - -#: src/GitHub_Updater/Base.php:477 -msgid "Rename successful" -msgstr "Umbenennen erfolgreich" - -#: src/GitHub_Updater/Base.php:484 -msgid "Unable to rename downloaded repository." -msgstr "Kann das heruntergeladene Repository nicht umbenennen." - -#: src/GitHub_Updater/Install.php:56 -msgid "A repository URI is required." -msgstr "Eine Repository-URI ist erforderlich." - -#: src/GitHub_Updater/Install.php:194 src/GitHub_Updater/Settings.php:69 -msgid "Install Plugin" -msgstr "Plugin installieren" - -#: src/GitHub_Updater/Install.php:197 src/GitHub_Updater/Settings.php:70 -msgid "Install Theme" -msgstr "Theme installieren" - -#: src/GitHub_Updater/Install.php:214 -msgid "Plugin" -msgstr "Plugin" - -#: src/GitHub_Updater/Install.php:217 -msgid "Theme" -msgstr "Theme" - -#: src/GitHub_Updater/Install.php:228 -#, php-format -msgid "GitHub Updater Install %s" -msgstr "GitHub Updater Installiert %s" - -#: src/GitHub_Updater/Install.php:235 -#, php-format -msgid "%s URI" -msgstr "%s URI" - -#: src/GitHub_Updater/Install.php:243 -msgid "Remote Repository Host" -msgstr "Remoter Repository Host" - -#: src/GitHub_Updater/Install.php:251 -msgid "Repository Branch" -msgstr "Repository-Branch" - -#: src/GitHub_Updater/Install.php:259 -msgid "Private Bitbucket Repository" -msgstr "Privates Bitbucket Repository" - -#: src/GitHub_Updater/Install.php:267 src/GitHub_Updater/Settings.php:198 -msgid "GitHub Access Token" -msgstr "GitHub Accesstoken" - -#: src/GitHub_Updater/Install.php:278 -msgid "GitLab Private Token" -msgstr "Privates GitLab Token" - -#: src/GitHub_Updater/Install.php:306 -msgid "Enter branch name or leave empty for `master`" -msgstr "Branchnamen angeben oder leer lassen für `master`" - -#: src/GitHub_Updater/Install.php:348 -msgid "Enter GitHub Access Token for private GitHub repositories." -msgstr "Geben Sie Ihr GitHub Accesstoken für private GitHub Repositories ein." - -#: src/GitHub_Updater/Install.php:362 -msgid "Enter GitLab Private Token for private GitLab repositories." -msgstr "Geben Sie Ihr GitLab Accesstoken für private GitLab Repositories ein." - -#: src/GitHub_Updater/Messages.php:61 -#, php-format -msgid "%s was not checked. GitHub Updater Error Code:" -msgstr "%s wurde nicht überprüft. GitHub Updater Fehlercode:" - -#: src/GitHub_Updater/Messages.php:69 -#, php-format -msgid "GitHub API's rate limit will reset in %s minutes." -msgstr "Github APIs Limite wird in %s Minutes zurückgesetzt." - -#: src/GitHub_Updater/Messages.php:74 -#, php-format -msgid "" -"It looks like you are running into GitHub API rate limits. Be sure and " -"configure a %sPersonal Access Token%s to avoid this issue." -msgstr "" -"Es sieht so aus, als ob Sie die GitHub API Limite erreichen. Um dieses " -"Problem zu verhindern, können Sie ein %spersönliches Zugriffstoken%s setzen." - -#: src/GitHub_Updater/Messages.php:82 -msgid "There is probably an error on the GitHub Updater Settings page." -msgstr "" -"Wahrscheinlich hat es einen Fehler auf der GitHub Updater Einstellungsseite." - -#: src/GitHub_Updater/Messages.php:95 -msgid "" -"You must set a GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" -"Sie müssen ein privates GitLab.com, GitLab CE oder GitLab Enterprise Token " -"eingeben." - -#: src/GitHub_Updater/Plugin.php:149 -#, php-format -msgid "Current branch is `%1$s`, try %2$sanother branch%3$s." -msgstr "" -"Aktueller Branch ist `%1$s`, versuchen Sie %2$seinen anderen Branch%3$s." - -#: src/GitHub_Updater/Plugin.php:199 -msgid "View details" -msgstr "Details ansehen" - -#: src/GitHub_Updater/Settings.php:68 src/GitHub_Updater/Settings.php:528 -msgid "Settings" -msgstr "Einstellungen" - -#: src/GitHub_Updater/Settings.php:81 src/GitHub_Updater/Settings.php:89 -#: src/GitHub_Updater/Settings.php:172 -msgid "GitHub Updater Settings" -msgstr "GitHub Updater Einstellungen" - -#. Plugin Name of the plugin/theme -#: src/GitHub_Updater/Settings.php:82 src/GitHub_Updater/Settings.php:90 -#: src/GitHub_Updater/Settings.php:127 -msgid "GitHub Updater" -msgstr "GitHub Updater" - -#: src/GitHub_Updater/Settings.php:131 -msgid "Saved." -msgstr "Gespeichert." - -#: src/GitHub_Updater/Settings.php:179 -msgid "Enable Plugin Branch Switching" -msgstr "Plugin Branch Wechsel aktivieren" - -#: src/GitHub_Updater/Settings.php:191 -msgid "Personal GitHub Access Token" -msgstr "Persönliches GitHub Access Tiken" - -#: src/GitHub_Updater/Settings.php:211 -msgid "GitHub Private Settings" -msgstr "GitHub Privat Einstellungen" - -#: src/GitHub_Updater/Settings.php:224 -msgid "GitLab Private Settings" -msgstr "GitLab Privat Einstellungen" - -#: src/GitHub_Updater/Settings.php:233 -msgid "GitLab.com Private Token" -msgstr "Privates GitLab.com Token" - -#: src/GitHub_Updater/Settings.php:244 -msgid "GitLab CE or GitLab Enterprise Private Token" -msgstr "Privates GitLab CE oder GitLab Enterprise Token" - -#: src/GitHub_Updater/Settings.php:257 -msgid "Bitbucket Private Settings" -msgstr "Bitbucket Privat Einstellungen" - -#: src/GitHub_Updater/Settings.php:264 -msgid "Bitbucket Username" -msgstr "Bitbucket Benutzername" - -#: src/GitHub_Updater/Settings.php:273 -msgid "Bitbucket Password" -msgstr "Bitbucket Passwort" - -#: src/GitHub_Updater/Settings.php:286 -msgid "Bitbucket Private Repositories" -msgstr "Bitbucket Private Repositories" - -#: src/GitHub_Updater/Settings.php:298 -msgid "No private repositories are installed." -msgstr "Keine private Repositories installiert." - -#: src/GitHub_Updater/Settings.php:357 -msgid "Theme:" -msgstr "Theme:" - -#: src/GitHub_Updater/Settings.php:433 -msgid "Check to enable branch switching from the Plugins page." -msgstr "Auswählen um Plugin Branch Wechsel zu aktivieren auf der Plugin Seite." - -#: src/GitHub_Updater/Settings.php:440 -msgid "Enter your GitHub Access Token. Leave empty for public repositories." -msgstr "" -"Geben Sie Ihr GitHub Accesstoken ein. Leer lassen für öffentliche " -"Repositories." - -#: src/GitHub_Updater/Settings.php:447 -msgid "Enter your personal GitHub Access Token to avoid API access limits." -msgstr "" -"Geben Sie Ihr persönliches GitHub Accesstoken zu Vermeidung der API-Limite " -"ein." - -#: src/GitHub_Updater/Settings.php:454 -msgid "" -"Check box if private repository. Leave unchecked for public repositories." -msgstr "" -"Aktivieren Sie das Kästchen, falls es sich um ein privates Repository " -"handelt. Lassen Sie es deaktiviert öffentlichen Repositories." - -#: src/GitHub_Updater/Settings.php:461 -msgid "Enter your personal Bitbucket username and password." -msgstr "Geben Sie Ihren persönlichen Bitbucket Benutzernamen und Passwort ein." - -#: src/GitHub_Updater/Settings.php:468 -msgid "Enter your GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" -"Geben Sie Ihre GitLab.com, GitLab CE oder GitLab Unternehmen Privat Token." - -#: src/GitHub_Updater/Theme.php:210 -msgid "Theme is up-to-date!" -msgstr "Theme ist auf dem neusten Stand!" - -#: src/GitHub_Updater/Theme.php:215 -msgid "Rollback to:" -msgstr "Rollback zu:" - -#: src/GitHub_Updater/Theme.php:233 -msgid "No previous tags to rollback to." -msgstr "Keine früheren Tags für ein Rollback." - -#: src/GitHub_Updater/Theme.php:241 src/GitHub_Updater/Theme.php:255 -#, php-format -msgid "GitHub Updater shows a new version of %s available." -msgstr "GitHub Updater hat eine neue Version von %s gefunden." - -#: src/GitHub_Updater/Theme.php:248 -#, php-format -msgid "View version %s details." -msgstr "Zeige Details der Version %s" - -#: src/GitHub_Updater/Theme.php:252 -msgid "Automatic update is unavailable for this theme." -msgstr "Automatisches Update ist nicht verfügbar für dieses Theme." - -#: src/GitHub_Updater/Theme.php:262 src/GitHub_Updater/Theme.php:347 -#, php-format -msgid "View version %1$s details%2$s or %3$supdate now%4$s." -msgstr "Zeige Details der Version%1$s %2$s oder %3$saktualisiere jetzt%4$s." - -#: src/GitHub_Updater/Theme.php:340 -#, php-format -msgid "There is a new version of %s available now." -msgstr "Es ist eine neue Version von %s verfügbar." - -#: src/GitHub_Updater/Theme.php:367 -#, php-format -msgid "Current version is up to date. Try %sanother version%s" -msgstr "" -"Die aktuelle Version ist auf dem neuesten Stand. Versuchen Sie %seine andere " -"Version%s" - -#: src/GitHub_Updater/Theme.php:381 -msgid "Choose a Version" -msgstr "Wählen Sie eine Version" - -#: src/GitHub_Updater/Theme.php:384 -msgid "Install" -msgstr "Installieren" - -#: vendor/WPUpdatePhp.php:24 -msgid "this plugin" -msgstr "dieses Plugin" - -#: vendor/WPUpdatePhp.php:92 -#, php-format -msgid "Unfortunately, %1$s can not run on PHP versions older than %2$s." -msgstr "" -"Leider kann %1$s nicht auf PHP-Versionen älter als %2$s ausgeführt werden." - -#: vendor/WPUpdatePhp.php:94 vendor/WPUpdatePhp.php:110 -#, php-format -msgid "Read more information about %show you can update%s." -msgstr "Lesen Sie mehr Informationen über %swie Sie aktualisieren können%s." - -#: vendor/WPUpdatePhp.php:108 -#, php-format -msgid "%1$s recommends a PHP version greater than %2$s." -msgstr "%1$s empfiehlt eine PHP-Version neuer als %2$s." - -#. Plugin URI of the plugin/theme -msgid "https://github.com/afragen/github-updater" -msgstr "https://github.com/afragen/github-updater" - -#. Description of the plugin/theme -msgid "" -"A plugin to automatically update GitHub, Bitbucket or GitLab hosted plugins " -"and themes. It also allows for remote installation of plugins or themes into " -"WordPress. Plugin class based upon codepress/github-plugin-updater. Theme class " -"based upon Whitelabel Framework modifications." -msgstr "" -"Ein Plugin, das Themes und Plugins, welche auf GitHub, Bitbucket oder GitLab " -"gehostet sind, automatisch aktualisiert. Es ermöglicht ebenfalls, Plugins " -"oder Themes remote in WordPress zu installieren. Die Plugin-Klasse ist auf " -"codepress/" -"github-plugin-updater basiert. Die Theme-Klasse ist auf Modifizierungen " -"von Whitelabel Framework basiert." - -#. Author of the plugin/theme -msgid "Andy Fragen" -msgstr "Andy Fragen" - -#~ msgid "" -#~ "No changelog is available via GitHub Updater. Create a file CHANGES." -#~ "md or CHANGELOG.md in your repository." -#~ msgstr "" -#~ "Keine Änderungsprotokoll verfügbar via GitHub Updater. Erstellen Sie eine " -#~ "Datei CHANGES.md oder CHANGELOG.md in Ihrem " -#~ "Repository." diff --git a/github/languages/github-updater-de_CH.mo b/github/languages/github-updater-de_CH.mo deleted file mode 100644 index 480820de4f34f9afbacd53e39ddf137f2c4fe437..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8037 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\n" -"Language-Team: Andy Fragen \n" -"Language: de_CH\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.1\n" -"X-Poedit-Basepath: ..\n" -"X-Poedit-SourceCharset: UTF-8\n" -"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;" -"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;" -"_nx_noop:3c,1,2;__ngettext_noop:1,2\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Poedit-SearchPath-0: .\n" - -#: mu/ghu-loader.php:66 -msgid "Activated as mu-plugin" -msgstr "Aktiviert als mu-Plugin" - -#: src/GitHub_Updater/Base.php:467 -#, php-format -msgid "Renaming %1$s to %2$s" -msgstr "Umbenennen von%1$s zu %2$s" - -#: src/GitHub_Updater/Base.php:477 -msgid "Rename successful" -msgstr "Umbenennen erfolgreich" - -#: src/GitHub_Updater/Base.php:484 -msgid "Unable to rename downloaded repository." -msgstr "Kann das heruntergeladene Repository nicht umbenennen." - -#: src/GitHub_Updater/Install.php:56 -msgid "A repository URI is required." -msgstr "Eine Repository-URI ist erforderlich." - -#: src/GitHub_Updater/Install.php:194 src/GitHub_Updater/Settings.php:69 -msgid "Install Plugin" -msgstr "Plugin installieren" - -#: src/GitHub_Updater/Install.php:197 src/GitHub_Updater/Settings.php:70 -msgid "Install Theme" -msgstr "Theme installieren" - -#: src/GitHub_Updater/Install.php:214 -msgid "Plugin" -msgstr "Plugin" - -#: src/GitHub_Updater/Install.php:217 -msgid "Theme" -msgstr "Theme" - -#: src/GitHub_Updater/Install.php:228 -#, php-format -msgid "GitHub Updater Install %s" -msgstr "GitHub Updater Installiert %s" - -#: src/GitHub_Updater/Install.php:235 -#, php-format -msgid "%s URI" -msgstr "%s URI" - -#: src/GitHub_Updater/Install.php:243 -msgid "Remote Repository Host" -msgstr "Remoter Repository Host" - -#: src/GitHub_Updater/Install.php:251 -msgid "Repository Branch" -msgstr "Repository-Branch" - -#: src/GitHub_Updater/Install.php:259 -msgid "Private Bitbucket Repository" -msgstr "Privates Bitbucket Repository" - -#: src/GitHub_Updater/Install.php:267 src/GitHub_Updater/Settings.php:198 -msgid "GitHub Access Token" -msgstr "GitHub Accesstoken" - -#: src/GitHub_Updater/Install.php:278 -msgid "GitLab Private Token" -msgstr "Privates GitLab Token" - -#: src/GitHub_Updater/Install.php:306 -msgid "Enter branch name or leave empty for `master`" -msgstr "Branchnamen angeben oder leer lassen für `master`" - -#: src/GitHub_Updater/Install.php:348 -msgid "Enter GitHub Access Token for private GitHub repositories." -msgstr "Geben Sie Ihr GitHub Accesstoken für private GitHub Repositories ein." - -#: src/GitHub_Updater/Install.php:362 -msgid "Enter GitLab Private Token for private GitLab repositories." -msgstr "Geben Sie Ihr GitLab Accesstoken für private GitLab Repositories ein." - -#: src/GitHub_Updater/Messages.php:61 -#, php-format -msgid "%s was not checked. GitHub Updater Error Code:" -msgstr "%s wurde nicht überprüft. GitHub Updater Fehlercode:" - -#: src/GitHub_Updater/Messages.php:69 -#, php-format -msgid "GitHub API's rate limit will reset in %s minutes." -msgstr "Github APIs Limite wird in %s Minutes zurückgesetzt." - -#: src/GitHub_Updater/Messages.php:74 -#, php-format -msgid "" -"It looks like you are running into GitHub API rate limits. Be sure and " -"configure a %sPersonal Access Token%s to avoid this issue." -msgstr "" -"Es sieht so aus, als ob Sie die GitHub API Limite erreichen. Um dieses " -"Problem zu verhindern, können Sie ein %spersönliches Zugriffstoken%s setzen." - -#: src/GitHub_Updater/Messages.php:82 -msgid "There is probably an error on the GitHub Updater Settings page." -msgstr "" -"Wahrscheinlich hat es einen Fehler auf der GitHub Updater Einstellungsseite." - -#: src/GitHub_Updater/Messages.php:95 -msgid "" -"You must set a GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" -"Sie müssen ein privates GitLab.com, GitLab CE oder GitLab Enterprise Token " -"eingeben." - -#: src/GitHub_Updater/Plugin.php:149 -#, php-format -msgid "Current branch is `%1$s`, try %2$sanother branch%3$s." -msgstr "" -"Aktueller Branch ist `%1$s`, versuchen Sie %2$seinen anderen Branch%3$s." - -#: src/GitHub_Updater/Plugin.php:199 -msgid "View details" -msgstr "Details ansehen" - -#: src/GitHub_Updater/Settings.php:68 src/GitHub_Updater/Settings.php:528 -msgid "Settings" -msgstr "Einstellungen" - -#: src/GitHub_Updater/Settings.php:81 src/GitHub_Updater/Settings.php:89 -#: src/GitHub_Updater/Settings.php:172 -msgid "GitHub Updater Settings" -msgstr "GitHub Updater Einstellungen" - -#. Plugin Name of the plugin/theme -#: src/GitHub_Updater/Settings.php:82 src/GitHub_Updater/Settings.php:90 -#: src/GitHub_Updater/Settings.php:127 -msgid "GitHub Updater" -msgstr "GitHub Updater" - -#: src/GitHub_Updater/Settings.php:131 -msgid "Saved." -msgstr "Gespeichert." - -#: src/GitHub_Updater/Settings.php:179 -msgid "Enable Plugin Branch Switching" -msgstr "Plugin Branch Wechsel aktivieren" - -#: src/GitHub_Updater/Settings.php:191 -msgid "Personal GitHub Access Token" -msgstr "Persönliches GitHub Access Tiken" - -#: src/GitHub_Updater/Settings.php:211 -msgid "GitHub Private Settings" -msgstr "GitHub Privat Einstellungen" - -#: src/GitHub_Updater/Settings.php:224 -msgid "GitLab Private Settings" -msgstr "GitLab Privat Einstellungen" - -#: src/GitHub_Updater/Settings.php:233 -msgid "GitLab.com Private Token" -msgstr "Privates GitLab.com Token" - -#: src/GitHub_Updater/Settings.php:244 -msgid "GitLab CE or GitLab Enterprise Private Token" -msgstr "Privates GitLab CE oder GitLab Enterprise Token" - -#: src/GitHub_Updater/Settings.php:257 -msgid "Bitbucket Private Settings" -msgstr "Bitbucket Privat Einstellungen" - -#: src/GitHub_Updater/Settings.php:264 -msgid "Bitbucket Username" -msgstr "Bitbucket Benutzername" - -#: src/GitHub_Updater/Settings.php:273 -msgid "Bitbucket Password" -msgstr "Bitbucket Passwort" - -#: src/GitHub_Updater/Settings.php:286 -msgid "Bitbucket Private Repositories" -msgstr "Bitbucket Private Repositories" - -#: src/GitHub_Updater/Settings.php:298 -msgid "No private repositories are installed." -msgstr "Keine private Repositories installiert." - -#: src/GitHub_Updater/Settings.php:357 -msgid "Theme:" -msgstr "Theme:" - -#: src/GitHub_Updater/Settings.php:433 -msgid "Check to enable branch switching from the Plugins page." -msgstr "Auswählen um Plugin Branch Wechsel zu aktivieren auf der Plugin Seite." - -#: src/GitHub_Updater/Settings.php:440 -msgid "Enter your GitHub Access Token. Leave empty for public repositories." -msgstr "" -"Geben Sie Ihr GitHub Accesstoken ein. Leer lassen für öffentliche " -"Repositories." - -#: src/GitHub_Updater/Settings.php:447 -msgid "Enter your personal GitHub Access Token to avoid API access limits." -msgstr "" -"Geben Sie Ihr persönliches GitHub Accesstoken zu Vermeidung der API-Limite " -"ein." - -#: src/GitHub_Updater/Settings.php:454 -msgid "" -"Check box if private repository. Leave unchecked for public repositories." -msgstr "" -"Aktivieren Sie das Kästchen, falls es sich um ein privates Repository " -"handelt. Lassen Sie es deaktiviert öffentlichen Repositories." - -#: src/GitHub_Updater/Settings.php:461 -msgid "Enter your personal Bitbucket username and password." -msgstr "Geben Sie Ihren persönlichen Bitbucket Benutzernamen und Passwort ein." - -#: src/GitHub_Updater/Settings.php:468 -msgid "Enter your GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" -"Geben Sie Ihre GitLab.com, GitLab CE oder GitLab Unternehmen Privat Token." - -#: src/GitHub_Updater/Theme.php:210 -msgid "Theme is up-to-date!" -msgstr "Theme ist auf dem neusten Stand!" - -#: src/GitHub_Updater/Theme.php:215 -msgid "Rollback to:" -msgstr "Rollback zu:" - -#: src/GitHub_Updater/Theme.php:233 -msgid "No previous tags to rollback to." -msgstr "Keine früheren Tags für ein Rollback." - -#: src/GitHub_Updater/Theme.php:241 src/GitHub_Updater/Theme.php:255 -#, php-format -msgid "GitHub Updater shows a new version of %s available." -msgstr "GitHub Updater hat eine neue Version von %s gefunden." - -#: src/GitHub_Updater/Theme.php:248 -#, php-format -msgid "View version %s details." -msgstr "Zeige Details der Version %s" - -#: src/GitHub_Updater/Theme.php:252 -msgid "Automatic update is unavailable for this theme." -msgstr "Automatisches Update ist nicht verfügbar für dieses Theme." - -#: src/GitHub_Updater/Theme.php:262 src/GitHub_Updater/Theme.php:347 -#, php-format -msgid "View version %1$s details%2$s or %3$supdate now%4$s." -msgstr "Zeige Details der Version%1$s %2$s oder %3$saktualisiere jetzt%4$s." - -#: src/GitHub_Updater/Theme.php:340 -#, php-format -msgid "There is a new version of %s available now." -msgstr "Es ist eine neue Version von %s verfügbar." - -#: src/GitHub_Updater/Theme.php:367 -#, php-format -msgid "Current version is up to date. Try %sanother version%s" -msgstr "" -"Die aktuelle Version ist auf dem neuesten Stand. Versuchen Sie %seine andere " -"Version%s" - -#: src/GitHub_Updater/Theme.php:381 -msgid "Choose a Version" -msgstr "Wählen Sie eine Version" - -#: src/GitHub_Updater/Theme.php:384 -msgid "Install" -msgstr "Installieren" - -#: vendor/WPUpdatePhp.php:24 -msgid "this plugin" -msgstr "dieses Plugin" - -#: vendor/WPUpdatePhp.php:92 -#, php-format -msgid "Unfortunately, %1$s can not run on PHP versions older than %2$s." -msgstr "" -"Leider kann %1$s nicht auf PHP-Versionen älter als %2$s ausgeführt werden." - -#: vendor/WPUpdatePhp.php:94 vendor/WPUpdatePhp.php:110 -#, php-format -msgid "Read more information about %show you can update%s." -msgstr "Lesen Sie mehr Informationen über %swie Sie aktualisieren können%s." - -#: vendor/WPUpdatePhp.php:108 -#, php-format -msgid "%1$s recommends a PHP version greater than %2$s." -msgstr "%1$s empfiehlt eine PHP-Version neuer als %2$s." - -#. Plugin URI of the plugin/theme -msgid "https://github.com/afragen/github-updater" -msgstr "https://github.com/afragen/github-updater" - -#. Description of the plugin/theme -msgid "" -"A plugin to automatically update GitHub, Bitbucket or GitLab hosted plugins " -"and themes. It also allows for remote installation of plugins or themes into " -"WordPress. Plugin class based upon codepress/github-plugin-updater. Theme class " -"based upon Whitelabel Framework modifications." -msgstr "" -"Ein Plugin, das Themes und Plugins, welche auf GitHub, Bitbucket oder GitLab " -"gehostet sind, automatisch aktualisiert. Es ermöglicht ebenfalls, Plugins " -"oder Themes remote in WordPress zu installieren. Die Plugin-Klasse ist auf " -"codepress/" -"github-plugin-updater basiert. Die Theme-Klasse ist auf Modifizierungen " -"von Whitelabel Framework basiert." - -#. Author of the plugin/theme -msgid "Andy Fragen" -msgstr "Andy Fragen" - -#~ msgid "" -#~ "No changelog is available via GitHub Updater. Create a file CHANGES." -#~ "md or CHANGELOG.md in your repository." -#~ msgstr "" -#~ "Keine Änderungsprotokoll verfügbar via GitHub Updater. Erstellen Sie eine " -#~ "Datei CHANGES.md oder CHANGELOG.md in Ihrem " -#~ "Repository." diff --git a/github/languages/github-updater-de_DE.mo b/github/languages/github-updater-de_DE.mo deleted file mode 100644 index 85a8395f1fc0097a7b2b22475482b076386c3ff4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8037 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\n" -"Language-Team: Andy Fragen \n" -"Language: de_DE\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.1\n" -"X-Poedit-Basepath: ..\n" -"X-Poedit-SourceCharset: UTF-8\n" -"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;" -"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;" -"_nx_noop:3c,1,2;__ngettext_noop:1,2\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Poedit-SearchPath-0: .\n" - -#: mu/ghu-loader.php:66 -msgid "Activated as mu-plugin" -msgstr "Aktiviert als mu-Plugin" - -#: src/GitHub_Updater/Base.php:467 -#, php-format -msgid "Renaming %1$s to %2$s" -msgstr "Umbenennen von%1$s zu %2$s" - -#: src/GitHub_Updater/Base.php:477 -msgid "Rename successful" -msgstr "Umbenennen erfolgreich" - -#: src/GitHub_Updater/Base.php:484 -msgid "Unable to rename downloaded repository." -msgstr "Kann das heruntergeladene Repository nicht umbenennen." - -#: src/GitHub_Updater/Install.php:56 -msgid "A repository URI is required." -msgstr "Eine Repository-URI ist erforderlich." - -#: src/GitHub_Updater/Install.php:194 src/GitHub_Updater/Settings.php:69 -msgid "Install Plugin" -msgstr "Plugin installieren" - -#: src/GitHub_Updater/Install.php:197 src/GitHub_Updater/Settings.php:70 -msgid "Install Theme" -msgstr "Theme installieren" - -#: src/GitHub_Updater/Install.php:214 -msgid "Plugin" -msgstr "Plugin" - -#: src/GitHub_Updater/Install.php:217 -msgid "Theme" -msgstr "Theme" - -#: src/GitHub_Updater/Install.php:228 -#, php-format -msgid "GitHub Updater Install %s" -msgstr "GitHub Updater Installiert %s" - -#: src/GitHub_Updater/Install.php:235 -#, php-format -msgid "%s URI" -msgstr "%s URI" - -#: src/GitHub_Updater/Install.php:243 -msgid "Remote Repository Host" -msgstr "Remoter Repository Host" - -#: src/GitHub_Updater/Install.php:251 -msgid "Repository Branch" -msgstr "Repository-Branch" - -#: src/GitHub_Updater/Install.php:259 -msgid "Private Bitbucket Repository" -msgstr "Privates Bitbucket Repository" - -#: src/GitHub_Updater/Install.php:267 src/GitHub_Updater/Settings.php:198 -msgid "GitHub Access Token" -msgstr "GitHub Accesstoken" - -#: src/GitHub_Updater/Install.php:278 -msgid "GitLab Private Token" -msgstr "Privates GitLab Token" - -#: src/GitHub_Updater/Install.php:306 -msgid "Enter branch name or leave empty for `master`" -msgstr "Branchnamen angeben oder leer lassen für `master`" - -#: src/GitHub_Updater/Install.php:348 -msgid "Enter GitHub Access Token for private GitHub repositories." -msgstr "Geben Sie Ihr GitHub Accesstoken für private GitHub Repositories ein." - -#: src/GitHub_Updater/Install.php:362 -msgid "Enter GitLab Private Token for private GitLab repositories." -msgstr "Geben Sie Ihr GitLab Accesstoken für private GitLab Repositories ein." - -#: src/GitHub_Updater/Messages.php:61 -#, php-format -msgid "%s was not checked. GitHub Updater Error Code:" -msgstr "%s wurde nicht überprüft. GitHub Updater Fehlercode:" - -#: src/GitHub_Updater/Messages.php:69 -#, php-format -msgid "GitHub API's rate limit will reset in %s minutes." -msgstr "Github APIs Limite wird in %s Minutes zurückgesetzt." - -#: src/GitHub_Updater/Messages.php:74 -#, php-format -msgid "" -"It looks like you are running into GitHub API rate limits. Be sure and " -"configure a %sPersonal Access Token%s to avoid this issue." -msgstr "" -"Es sieht so aus, als ob Sie die GitHub API Limite erreichen. Um dieses " -"Problem zu verhindern, können Sie ein %spersönliches Zugriffstoken%s setzen." - -#: src/GitHub_Updater/Messages.php:82 -msgid "There is probably an error on the GitHub Updater Settings page." -msgstr "" -"Wahrscheinlich hat es einen Fehler auf der GitHub Updater Einstellungsseite." - -#: src/GitHub_Updater/Messages.php:95 -msgid "" -"You must set a GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" -"Sie müssen ein privates GitLab.com, GitLab CE oder GitLab Enterprise Token " -"eingeben." - -#: src/GitHub_Updater/Plugin.php:149 -#, php-format -msgid "Current branch is `%1$s`, try %2$sanother branch%3$s." -msgstr "" -"Aktueller Branch ist `%1$s`, versuchen Sie %2$seinen anderen Branch%3$s." - -#: src/GitHub_Updater/Plugin.php:199 -msgid "View details" -msgstr "Details ansehen" - -#: src/GitHub_Updater/Settings.php:68 src/GitHub_Updater/Settings.php:528 -msgid "Settings" -msgstr "Einstellungen" - -#: src/GitHub_Updater/Settings.php:81 src/GitHub_Updater/Settings.php:89 -#: src/GitHub_Updater/Settings.php:172 -msgid "GitHub Updater Settings" -msgstr "GitHub Updater Einstellungen" - -#. Plugin Name of the plugin/theme -#: src/GitHub_Updater/Settings.php:82 src/GitHub_Updater/Settings.php:90 -#: src/GitHub_Updater/Settings.php:127 -msgid "GitHub Updater" -msgstr "GitHub Updater" - -#: src/GitHub_Updater/Settings.php:131 -msgid "Saved." -msgstr "Gespeichert." - -#: src/GitHub_Updater/Settings.php:179 -msgid "Enable Plugin Branch Switching" -msgstr "Plugin Branch Wechsel aktivieren" - -#: src/GitHub_Updater/Settings.php:191 -msgid "Personal GitHub Access Token" -msgstr "Persönliches GitHub Access Tiken" - -#: src/GitHub_Updater/Settings.php:211 -msgid "GitHub Private Settings" -msgstr "GitHub Privat Einstellungen" - -#: src/GitHub_Updater/Settings.php:224 -msgid "GitLab Private Settings" -msgstr "GitLab Privat Einstellungen" - -#: src/GitHub_Updater/Settings.php:233 -msgid "GitLab.com Private Token" -msgstr "Privates GitLab.com Token" - -#: src/GitHub_Updater/Settings.php:244 -msgid "GitLab CE or GitLab Enterprise Private Token" -msgstr "Privates GitLab CE oder GitLab Enterprise Token" - -#: src/GitHub_Updater/Settings.php:257 -msgid "Bitbucket Private Settings" -msgstr "Bitbucket Privat Einstellungen" - -#: src/GitHub_Updater/Settings.php:264 -msgid "Bitbucket Username" -msgstr "Bitbucket Benutzername" - -#: src/GitHub_Updater/Settings.php:273 -msgid "Bitbucket Password" -msgstr "Bitbucket Passwort" - -#: src/GitHub_Updater/Settings.php:286 -msgid "Bitbucket Private Repositories" -msgstr "Bitbucket Private Repositories" - -#: src/GitHub_Updater/Settings.php:298 -msgid "No private repositories are installed." -msgstr "Keine private Repositories installiert." - -#: src/GitHub_Updater/Settings.php:357 -msgid "Theme:" -msgstr "Theme:" - -#: src/GitHub_Updater/Settings.php:433 -msgid "Check to enable branch switching from the Plugins page." -msgstr "Auswählen um Plugin Branch Wechsel zu aktivieren auf der Plugin Seite." - -#: src/GitHub_Updater/Settings.php:440 -msgid "Enter your GitHub Access Token. Leave empty for public repositories." -msgstr "" -"Geben Sie Ihr GitHub Accesstoken ein. Leer lassen für öffentliche " -"Repositories." - -#: src/GitHub_Updater/Settings.php:447 -msgid "Enter your personal GitHub Access Token to avoid API access limits." -msgstr "" -"Geben Sie Ihr persönliches GitHub Accesstoken zu Vermeidung der API-Limite " -"ein." - -#: src/GitHub_Updater/Settings.php:454 -msgid "" -"Check box if private repository. Leave unchecked for public repositories." -msgstr "" -"Aktivieren Sie das Kästchen, falls es sich um ein privates Repository " -"handelt. Lassen Sie es deaktiviert öffentlichen Repositories." - -#: src/GitHub_Updater/Settings.php:461 -msgid "Enter your personal Bitbucket username and password." -msgstr "Geben Sie Ihren persönlichen Bitbucket Benutzernamen und Passwort ein." - -#: src/GitHub_Updater/Settings.php:468 -msgid "Enter your GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" -"Geben Sie Ihre GitLab.com, GitLab CE oder GitLab Unternehmen Privat Token." - -#: src/GitHub_Updater/Theme.php:210 -msgid "Theme is up-to-date!" -msgstr "Theme ist auf dem neusten Stand!" - -#: src/GitHub_Updater/Theme.php:215 -msgid "Rollback to:" -msgstr "Rollback zu:" - -#: src/GitHub_Updater/Theme.php:233 -msgid "No previous tags to rollback to." -msgstr "Keine früheren Tags für ein Rollback." - -#: src/GitHub_Updater/Theme.php:241 src/GitHub_Updater/Theme.php:255 -#, php-format -msgid "GitHub Updater shows a new version of %s available." -msgstr "GitHub Updater hat eine neue Version von %s gefunden." - -#: src/GitHub_Updater/Theme.php:248 -#, php-format -msgid "View version %s details." -msgstr "Zeige Details der Version %s" - -#: src/GitHub_Updater/Theme.php:252 -msgid "Automatic update is unavailable for this theme." -msgstr "Automatisches Update ist nicht verfügbar für dieses Theme." - -#: src/GitHub_Updater/Theme.php:262 src/GitHub_Updater/Theme.php:347 -#, php-format -msgid "View version %1$s details%2$s or %3$supdate now%4$s." -msgstr "Zeige Details der Version%1$s %2$s oder %3$saktualisiere jetzt%4$s." - -#: src/GitHub_Updater/Theme.php:340 -#, php-format -msgid "There is a new version of %s available now." -msgstr "Es ist eine neue Version von %s verfügbar." - -#: src/GitHub_Updater/Theme.php:367 -#, php-format -msgid "Current version is up to date. Try %sanother version%s" -msgstr "" -"Die aktuelle Version ist auf dem neuesten Stand. Versuchen Sie %seine andere " -"Version%s" - -#: src/GitHub_Updater/Theme.php:381 -msgid "Choose a Version" -msgstr "Wählen Sie eine Version" - -#: src/GitHub_Updater/Theme.php:384 -msgid "Install" -msgstr "Installieren" - -#: vendor/WPUpdatePhp.php:24 -msgid "this plugin" -msgstr "dieses Plugin" - -#: vendor/WPUpdatePhp.php:92 -#, php-format -msgid "Unfortunately, %1$s can not run on PHP versions older than %2$s." -msgstr "" -"Leider kann %1$s nicht auf PHP-Versionen älter als %2$s ausgeführt werden." - -#: vendor/WPUpdatePhp.php:94 vendor/WPUpdatePhp.php:110 -#, php-format -msgid "Read more information about %show you can update%s." -msgstr "Lesen Sie mehr Informationen über %swie Sie aktualisieren können%s." - -#: vendor/WPUpdatePhp.php:108 -#, php-format -msgid "%1$s recommends a PHP version greater than %2$s." -msgstr "%1$s empfiehlt eine PHP-Version neuer als %2$s." - -#. Plugin URI of the plugin/theme -msgid "https://github.com/afragen/github-updater" -msgstr "https://github.com/afragen/github-updater" - -#. Description of the plugin/theme -msgid "" -"A plugin to automatically update GitHub, Bitbucket or GitLab hosted plugins " -"and themes. It also allows for remote installation of plugins or themes into " -"WordPress. Plugin class based upon codepress/github-plugin-updater. Theme class " -"based upon Whitelabel Framework modifications." -msgstr "" -"Ein Plugin, das Themes und Plugins, welche auf GitHub, Bitbucket oder GitLab " -"gehostet sind, automatisch aktualisiert. Es ermöglicht ebenfalls, Plugins " -"oder Themes remote in WordPress zu installieren. Die Plugin-Klasse ist auf " -"codepress/" -"github-plugin-updater basiert. Die Theme-Klasse ist auf Modifizierungen " -"von Whitelabel Framework basiert." - -#. Author of the plugin/theme -msgid "Andy Fragen" -msgstr "Andy Fragen" - -#~ msgid "" -#~ "No changelog is available via GitHub Updater. Create a file CHANGES." -#~ "md or CHANGELOG.md in your repository." -#~ msgstr "" -#~ "Keine Änderungsprotokoll verfügbar via GitHub Updater. Erstellen Sie eine " -#~ "Datei CHANGES.md oder CHANGELOG.md in Ihrem " -#~ "Repository." diff --git a/github/languages/github-updater-es_ES.mo b/github/languages/github-updater-es_ES.mo deleted file mode 100644 index d6ec93708a6f1a6979d95420efeb89c2979dd7ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5673 zcmai%TWnlM8OKkXax(==frdg$Cp7MbX1BI;X;?QQiQ_gFacVhsXe%UV_Uw4~xM$C7 z&&AGG2wwVz5D%yVA&?pg#1oZhUJxKr$x;Lo4~PeZR0;K^;u$1fctHHVnK`@b#Gyw% z{+~H#=9};OpKt$u|2=O+Tqn36;{MZJQM3ep>j3|_-n=J@X29!U6Z{MKFnHI8qUZte z5%6j71b9EV34RG2f?oiC6yDzeMea@T8SuUjbAuPa(9P=Wsj z9|IrwnD@si5EY`A!&rkN=i8vz|2Ft(@Q>i_koCx4uZHKQs8I7 z$HMn{@F~XUz^{QB_&E3$cn16{DDn<|+}nQ`{5<2AK>nhff3M$-UZCiA0OL-9&wz)) z3KYNm7@Py&24(&G;FrPwg5vi>pYnJH{3hcKa2fm^DDj;lXkP^%1{c9^fKPxw1tlIg z!E@jgPPqaugY)3ez?Z@I!gwBG60aTbi{N)b(dQSS}k$xZU{)aP>wyx%?8{8{Bi; zVo!Y$Mpr*F#&zyOb(c#rkXVVIk8(@iNNmJ@u~BgoHs?>tIk_Z9Ca=3E2Be;gfxIGp zou5z0K(6W8!-dLCZ2Ntabqb}`%7qoRZSo?qnd;_7mnK(bPiJa+?r_nJrVF*B3zgYY z#XS?hVmeLrd{SPh+G>5!akCfm+~#V*c1$Zei|~OhlG5fwwZ6Kf64~z6D#=+GosG+6 zn>8JU$bQurq*XV`qO(z zpknZdQ*cnVQ!E%wW7}qsR9a;+XGuHPEKDSDU%*i&<*LxuQ@5-NnL%p0$M` zI#+yTqJ=8YO;)NP0AE~{P+mQvN*pbr(uAl-?EH-BqY}J&RUKdP>p-E71g@#pWa(&O zm^58Pi(Xl;k~-&gzFh0fXUUO}1ZU&e6op!|ub9mHA^0nN-|G**G#DYiR)jWn-ZcF| zIdl@P_I1GySHng_TkX4B9ftA3eM8{4bV3F=(`GtV;{>Wg%$3eM_}*tzb8_d=qWuiU zm3rGI9d&kPNontjH0dWL&adaMEIm#Q;Be)>sGTHDNt1%~O{g*oA<3#zvZY=z;nMou zO7Q9^ZNuEU2A8s;)W{`zw|u$NilS$Cr2aFrGpc{PDf)~GuNeigHHIu54cDX|qf3?| zG24l)s8HSIpH;a{)3&CHO55}kd{s`SgVMRd1x|5chm|@!`}x5qV^sTL9KqGP&WF*e z(H+&dPAZ%slme;gwyjF+!d^uhs2FbZJTr~YS54m%nz0mh!4@U2U3M0gi^XP@`ZrRt zjzTd}ijKD{v;#p*93oc|lB{D&2)&5hpk^fJ%O#Bp1P>BZUwtH z){O4A)Y+^vRL|wS$kem2&+rTZ+jQfi$@x59ATp3f`3WZ&oyWZu zoYR=WJyR1MRzinmrIGRcx_cudZC$1G^^iP&wKC%-E3=9Ne^9Z4;Jbp(n`&YAMkncV zUYj%&HWKz0H6&xGR$43}4%toGE?F=t;RFu$t(TW>Cwi|%j#`qZ&p`l~lM%bW(qhnvipOM_SQ;5Qu{u2LnexIQi1eRn1NVHs zWczKb;9XTzI#0y%i4B%@E>24|BwlcgYE>i@2UbrSTW{S|=gpQ($yA>p=^Wb2_2f*n z-2IKTZ5FeEsaa=^)ai>%-xw zj^IZZ*;{0I?~2}a50|(~)_3gVSXoOMuP%45j|0`wO|=xH#PIQcZC!2P*d$DG8bLv+ zgv|G#9PedrJJoBk7V~{;$5hwfkR-P|aU#?{Ii+)OGGgbf;JQ62sU)^r1clApDQ$6( z9J)XCc(ho=dD13;)onVUP1wlA_%zaOL3Ru7qPF9)ii40{e%5{=rV6%kZZ*?1~bFxCZ zJ>22TWIPrIl0LDghsu-*RbIjkT7GFHG<1lw8FFbeOnU-G{7&^9Bvf-t#6wcj zCb{1xtgaKd?lVV5MnRoXH%GY#{*n-k8E$#^dclUSxr`HG^uh{Z`R+2_z0qf3W!zqY zLg{CSkTjKu+FJp+^qy8aOG!epprA1+HX#U`C;U3X{K>DbS@J9qt$H@vBapciUCj2m z(yi!u7_@`b<|wSunz)%vbA(R-_fUwX3FUh$TD-=Y?aAu{Lrc#kttY<&P*%bxDG|;p zp%tjwW}CD@Ifsd`AVGG4Qv;e17c_6ZquPm@#ajiO-E{_>H-!#8Xvg~{w4wE}iOuXv z_g6`=@$C509bN=Oy3>hV@-C#Q#81+Drm3MVWpG\n" -"Language-Team: Andy Fragen \n" -"Language: es\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.1\n" -"X-Poedit-Basepath: ..\n" -"X-Poedit-SourceCharset: UTF-8\n" -"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;" -"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;" -"_nx_noop:3c,1,2;__ngettext_noop:1,2\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Poedit-SearchPath-0: .\n" - -#: mu/ghu-loader.php:66 -msgid "Activated as mu-plugin" -msgstr "Activado como mu-plugin" - -#: src/GitHub_Updater/Base.php:467 -#, php-format -msgid "Renaming %1$s to %2$s" -msgstr "Renombrado %1$s a %2$s" - -#: src/GitHub_Updater/Base.php:477 -msgid "Rename successful" -msgstr "Renombrado satisfactoriamente" - -#: src/GitHub_Updater/Base.php:484 -msgid "Unable to rename downloaded repository." -msgstr "No se ha podido renombrar el repositorio descargado." - -#: src/GitHub_Updater/Install.php:56 -msgid "A repository URI is required." -msgstr "Se requiere una URI del repositorio." - -#: src/GitHub_Updater/Install.php:194 src/GitHub_Updater/Settings.php:69 -msgid "Install Plugin" -msgstr "Instalar Plugin" - -#: src/GitHub_Updater/Install.php:197 src/GitHub_Updater/Settings.php:70 -msgid "Install Theme" -msgstr "Instalar tema" - -#: src/GitHub_Updater/Install.php:214 -msgid "Plugin" -msgstr "Plugin" - -#: src/GitHub_Updater/Install.php:217 -msgid "Theme" -msgstr "Tema" - -#: src/GitHub_Updater/Install.php:228 -#, php-format -msgid "GitHub Updater Install %s" -msgstr "GitHub Updater Intala %s" - -#: src/GitHub_Updater/Install.php:235 -#, php-format -msgid "%s URI" -msgstr "" - -#: src/GitHub_Updater/Install.php:243 -msgid "Remote Repository Host" -msgstr "Host del repositorio remoto" - -#: src/GitHub_Updater/Install.php:251 -msgid "Repository Branch" -msgstr "Rama del repositorio" - -#: src/GitHub_Updater/Install.php:259 -msgid "Private Bitbucket Repository" -msgstr "Repositorio privado de Bitbucket" - -#: src/GitHub_Updater/Install.php:267 src/GitHub_Updater/Settings.php:198 -msgid "GitHub Access Token" -msgstr "GitHub Access Token" - -#: src/GitHub_Updater/Install.php:278 -#, fuzzy -msgid "GitLab Private Token" -msgstr "Opciones privadas de GitHub" - -#: src/GitHub_Updater/Install.php:306 -msgid "Enter branch name or leave empty for `master`" -msgstr "Introduce la rama del repositorio o dejar en blanco para `master '" - -#: src/GitHub_Updater/Install.php:348 -msgid "Enter GitHub Access Token for private GitHub repositories." -msgstr "Introduzca el Token de acceso para repositorios privados de GitHub." - -#: src/GitHub_Updater/Install.php:362 -#, fuzzy -msgid "Enter GitLab Private Token for private GitLab repositories." -msgstr "Introduzca el Token de acceso para repositorios privados de GitHub." - -#: src/GitHub_Updater/Messages.php:61 -#, php-format -msgid "%s was not checked. GitHub Updater Error Code:" -msgstr "%s no se pudo comprobar. Código del error de GitHub Updater:" - -#: src/GitHub_Updater/Messages.php:69 -#, php-format -msgid "GitHub API's rate limit will reset in %s minutes." -msgstr "El límite de la API de GitHub se reseteará en %s minutos." - -#: src/GitHub_Updater/Messages.php:74 -#, php-format -msgid "" -"It looks like you are running into GitHub API rate limits. Be sure and " -"configure a %sPersonal Access Token%s to avoid this issue." -msgstr "" - -#: src/GitHub_Updater/Messages.php:82 -msgid "There is probably an error on the GitHub Updater Settings page." -msgstr "Probablemente haya un error en la configuración" - -#: src/GitHub_Updater/Messages.php:95 -msgid "" -"You must set a GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" - -#: src/GitHub_Updater/Plugin.php:149 -#, php-format -msgid "Current branch is `%1$s`, try %2$sanother branch%3$s." -msgstr "La rama actual es `%1$s`, intenta %2$sanother branch%3$s." - -#: src/GitHub_Updater/Plugin.php:199 -msgid "View details" -msgstr "Ver detalles" - -#: src/GitHub_Updater/Settings.php:68 src/GitHub_Updater/Settings.php:528 -msgid "Settings" -msgstr "Opciones" - -#: src/GitHub_Updater/Settings.php:81 src/GitHub_Updater/Settings.php:89 -#: src/GitHub_Updater/Settings.php:172 -msgid "GitHub Updater Settings" -msgstr "Opciones de GitHub Updater" - -#. Plugin Name of the plugin/theme -#: src/GitHub_Updater/Settings.php:82 src/GitHub_Updater/Settings.php:90 -#: src/GitHub_Updater/Settings.php:127 -#, fuzzy -msgid "GitHub Updater" -msgstr "%s no se pudo comprobar. Código del error de GitHub Updater:" - -#: src/GitHub_Updater/Settings.php:131 -msgid "Saved." -msgstr "Guardado." - -#: src/GitHub_Updater/Settings.php:179 -msgid "Enable Plugin Branch Switching" -msgstr "Activar el cambio de rama en los plugins" - -#: src/GitHub_Updater/Settings.php:191 -msgid "Personal GitHub Access Token" -msgstr "Token de acceso personal de GitHub" - -#: src/GitHub_Updater/Settings.php:211 -msgid "GitHub Private Settings" -msgstr "Opciones privadas de GitHub" - -#: src/GitHub_Updater/Settings.php:224 -#, fuzzy -msgid "GitLab Private Settings" -msgstr "Opciones privadas de GitHub" - -#: src/GitHub_Updater/Settings.php:233 -#, fuzzy -msgid "GitLab.com Private Token" -msgstr "Opciones privadas de GitHub" - -#: src/GitHub_Updater/Settings.php:244 -msgid "GitLab CE or GitLab Enterprise Private Token" -msgstr "" - -#: src/GitHub_Updater/Settings.php:257 -msgid "Bitbucket Private Settings" -msgstr "Opciones privadas de Bitbucket" - -#: src/GitHub_Updater/Settings.php:264 -msgid "Bitbucket Username" -msgstr "Nombre de usuario de Bitbucket" - -#: src/GitHub_Updater/Settings.php:273 -msgid "Bitbucket Password" -msgstr "Contraseña de Bitbucket" - -#: src/GitHub_Updater/Settings.php:286 -msgid "Bitbucket Private Repositories" -msgstr "Repositorios privados de Bitbucket" - -#: src/GitHub_Updater/Settings.php:298 -msgid "No private repositories are installed." -msgstr "No se han instalado repositorios privados." - -#: src/GitHub_Updater/Settings.php:357 -msgid "Theme:" -msgstr "Tema:" - -#: src/GitHub_Updater/Settings.php:433 -msgid "Check to enable branch switching from the Plugins page." -msgstr "" -"Activar para permitir el cambio rama desde la página de opciones del Plugin." - -#: src/GitHub_Updater/Settings.php:440 -msgid "Enter your GitHub Access Token. Leave empty for public repositories." -msgstr "" -"Escriba su Token de acceso de GitHub. Dejar en blanco para los repositorios " -"públicos." - -#: src/GitHub_Updater/Settings.php:447 -msgid "Enter your personal GitHub Access Token to avoid API access limits." -msgstr "" -"Escriba su Token de acceso personal de GitHub para evitar los límites de " -"acceso a la API." - -#: src/GitHub_Updater/Settings.php:454 -msgid "" -"Check box if private repository. Leave unchecked for public repositories." -msgstr "" -"Marque la casilla si es un repositorio privado. Deja sin marcar para " -"repositorios públicos." - -#: src/GitHub_Updater/Settings.php:461 -msgid "Enter your personal Bitbucket username and password." -msgstr "Introduzca su nombre de usuario y contraseña de Bitbucket." - -#: src/GitHub_Updater/Settings.php:468 -msgid "Enter your GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" - -#: src/GitHub_Updater/Theme.php:210 -msgid "Theme is up-to-date!" -msgstr "El tema está actualizado!" - -#: src/GitHub_Updater/Theme.php:215 -msgid "Rollback to:" -msgstr "Retroceder a:" - -#: src/GitHub_Updater/Theme.php:233 -msgid "No previous tags to rollback to." -msgstr "No hay etiquetas anteriores donde revertir." - -#: src/GitHub_Updater/Theme.php:241 src/GitHub_Updater/Theme.php:255 -#, php-format -msgid "GitHub Updater shows a new version of %s available." -msgstr "GitHub Updater muestra una nueva versión de %s disponible." - -#: src/GitHub_Updater/Theme.php:248 -#, php-format -msgid "View version %s details." -msgstr "Ver detalles de la versión de %s" - -#: src/GitHub_Updater/Theme.php:252 -msgid "Automatic update is unavailable for this theme." -msgstr "Este tema no permite actualizaciones automáticas." - -#: src/GitHub_Updater/Theme.php:262 src/GitHub_Updater/Theme.php:347 -#, php-format -msgid "View version %1$s details%2$s or %3$supdate now%4$s." -msgstr "Ver %1$s details%2$s de la versión o %3$sactualiza ahora%4$s." - -#: src/GitHub_Updater/Theme.php:340 -#, php-format -msgid "There is a new version of %s available now." -msgstr "Existe una nueva versión de %s disponible." - -#: src/GitHub_Updater/Theme.php:367 -#, php-format -msgid "Current version is up to date. Try %sanother version%s" -msgstr "La versión actual está actualizada. Intenta con %sanother version%s" - -#: src/GitHub_Updater/Theme.php:381 -msgid "Choose a Version" -msgstr "Elige una versión" - -#: src/GitHub_Updater/Theme.php:384 -msgid "Install" -msgstr "Instalar" - -#: vendor/WPUpdatePhp.php:24 -msgid "this plugin" -msgstr "este plungon" - -#: vendor/WPUpdatePhp.php:92 -#, php-format -msgid "Unfortunately, %1$s can not run on PHP versions older than %2$s." -msgstr "" -"Desafortunadamente, %1$s no se pueden ejecutar en versiones de PHP " -"anteriores a %2$s." - -#: vendor/WPUpdatePhp.php:94 vendor/WPUpdatePhp.php:110 -#, php-format -msgid "Read more information about %show you can update%s." -msgstr "Más información sobre %show cómo puede actualizar %s." - -#: vendor/WPUpdatePhp.php:108 -#, php-format -msgid "%1$s recommends a PHP version greater than %2$s." -msgstr "%1$s recomiendo una versión de PHP mayor que %2$s." - -#. Plugin URI of the plugin/theme -msgid "https://github.com/afragen/github-updater" -msgstr "" - -#. Description of the plugin/theme -#, fuzzy -msgid "" -"A plugin to automatically update GitHub, Bitbucket or GitLab hosted plugins " -"and themes. It also allows for remote installation of plugins or themes into " -"WordPress. Plugin class based upon codepress/github-plugin-updater. Theme class " -"based upon Whitelabel Framework modifications." -msgstr "" -"Un plugin para actualizar automáticamente plugins y temas desde GitHub o " -"Bitbucket. También permite la instalación remota de plugins o temas en " -"WordPress. Clase de los plugins basado en codepress/github-plugin-updater Clase " -"de los temas basado en modificaciones de Whitelabel Framework" - -#. Author of the plugin/theme -msgid "Andy Fragen" -msgstr "" - -#~ msgid "" -#~ "No changelog is available via GitHub Updater. Create a file CHANGES." -#~ "md or CHANGELOG.md in your repository." -#~ msgstr "" -#~ "No hay registro de cambios está disponible vía GitHub Updater. Crear un " -#~ "archivo CHANGES.md o CHANGELOG.md en su " -#~ "repositorio." diff --git a/github/languages/github-updater-fr_FR.mo b/github/languages/github-updater-fr_FR.mo deleted file mode 100644 index 2de58802ac143b435aed19a8baa590ffae3e993f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4503 zcmb7`&yO5O6~_w`^JDp$KmbF4itY8u%(UHI z)#<9<-HD=rg!l(QD9QoJLI`=3Ymx(;a9@HD3KEjVAme>hi zZO^B>`gPT-Z@qf;-hJeupELZO!Sxufmp;PSGWgCR{NV4ck23Z#@b}=Cz(0YX0{;fi zg8u{`0gpYz*f+p);8($IklHhF4g4|qdGL?mIq+Su0X}+|u>fp>m%x|7vtS9%gZ~1* z0G@^uUj{FLp9OcoBcSx{KLi)?{0jJS@DCu_{TciW_*amF{{T;b55owzYzd@!e;cIv zeII-nG@d^JKaJ;CK(hZ8_zCbe5U#P;!7qZp@$cUTpTP57a0WaCW17!t@GD>oJO%E9 zccJkwLF#t^QOWK{AnE%Cex3$@2a;ch-~{P<1Uw0z1-}OV0DKM{fMoX<@B;WA_#_x& z^5?-mNOr#lp8^jllr1`%JPJ?fP_-F6nhjjQmNaOqmr1d%SImSK-J_kMu_CZ>o zmq8l;ry%t+1ZiGxgEa5EAlbhMlHFkh1MxAC-Y-}TJ=`xpK5&%o1o{|j&q zd<%RQ{5N4px$)?;5$2VoBO>A`@OLLFc z*QK?w>P^1dHZoTtm29;yqno^~_j%mqneQ*J`x}IOU5Z@^7b7yn%*es4XeXG#$PB}V z=t*lMx!^l8H?dZ1wa9a+EZ?o3-AprXHK%!pd@CRDX(N=zO!L}k+OW&Y;`y1_UM<@E zViZYZ_?EsYRW-DC(Z4_FLiK4o7x0$T^f;VN+yrEr*@5ff`BWH;@Vp;rpo@EsR?mF= z;XP+v4e2_`Fi)*S!pCb?c$v9S9iI6G3|T$7=Gu(mIYmJdr?KUGagsn)gVl}|#NlbI z3QOYFUrfkRw>7;YqgD2{+b+KH+RQ)lHD#>8Fi`rSA-_)t-1POH!MZBBS1%LSU2<;} zwjuM~*5u79^y|^KD4N+djS!Q&u`UqbqK6;NbDbn@ff%$ptPHA{o?KZja%_~!aoGu( z@4TM*SnthI;Id7bY6v@S;a9b>Xm)X73a4bZNYLUp&w#JE$YGmfmm2Ik!XHD9#HnWD zeyfNMtPUumA7`$yK_GWOL^7`QUdXnU+x4VF6*%r_UZo&>Z||^hwD2)@G(LJKKwGzi5Y%PG?2e@Y}k<4~ESY>6hDJ!}Q`#uu}9)u%#QEhQJ7vu(0IDggWod!b7s1t@7gk zj5XDKb}LxTC6c37!6hi#;0tr}-wNi=1#?TdZ7eL{W^N9K!6u@JlFSF%tz)AHTUb+* z2qeb_@9wvua^B%D@hkf){HgB#({&SxaA9g)s9u3Q9c)RFK7c(;^VXHksg1Rb%VVMD z!?~$djdZ5q#vsFdtlX#Bi&!o5s4sHt^z++WSAwOn9l6_;d2m@px`V9U;7je;PJJ(U zMkf&D!lOCAu*|F5^CuO*z~@gb zPiP=T9`&2hCYXadQ_P>&K0B2|j?={ooK-IrlDfgE&5x!9!Uq}rC_lNe?a%U4;epe9 zT_8o{&?|588+48cf4WmQYDOAMNuPIOlW7&x@t%=YByqZzx9ND_&=xz{9Sw4PZm>(` zFe_iThMHEYb;71@I&?lfF z7BYb#q>)!IMd(SnRsssiO&+zmy5`=CtgIpq&t55yzr`CEyqCAhVM5s*=`sFYx zhaDtu?0MJhH=ExTeuMk61iPdzOZ?`2-`-_c%VAsQJ=%($qTXX{UDDaF(-fN;RThRV zjEPxQi(qZ=x*T@PA&er4YGqfdICtwh+D>\n" -"Language-Team: fxbenard | FxB \n" -"Language: fr_FR\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.1\n" -"X-Poedit-Basepath: ..\n" -"X-Poedit-SourceCharset: UTF-8\n" -"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;" -"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;" -"_nx_noop:3c,1,2;__ngettext_noop:1,2\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Poedit-SearchPath-0: .\n" - -#: mu/ghu-loader.php:66 -msgid "Activated as mu-plugin" -msgstr "Installé en tant que plugin \"must-use\" (MU-plugin)." - -#: src/GitHub_Updater/Base.php:467 -#, fuzzy, php-format -msgid "Renaming %1$s to %2$s" -msgstr "Renommage de %s en %s" - -#: src/GitHub_Updater/Base.php:477 -msgid "Rename successful" -msgstr "Le renommage a réussi" - -#: src/GitHub_Updater/Base.php:484 -msgid "Unable to rename downloaded repository." -msgstr "Impossible de renommer le dépôt téléchargé." - -#: src/GitHub_Updater/Install.php:56 -msgid "A repository URI is required." -msgstr "" - -#: src/GitHub_Updater/Install.php:194 src/GitHub_Updater/Settings.php:69 -msgid "Install Plugin" -msgstr "Installer l'extension" - -#: src/GitHub_Updater/Install.php:197 src/GitHub_Updater/Settings.php:70 -msgid "Install Theme" -msgstr "Installer le thème" - -#: src/GitHub_Updater/Install.php:214 -msgid "Plugin" -msgstr "Plugin" - -#: src/GitHub_Updater/Install.php:217 -msgid "Theme" -msgstr "Thème :" - -#: src/GitHub_Updater/Install.php:228 -#, php-format -msgid "GitHub Updater Install %s" -msgstr "GitHub Updater %s" - -#: src/GitHub_Updater/Install.php:235 -#, php-format -msgid "%s URI" -msgstr "%s URI" - -#: src/GitHub_Updater/Install.php:243 -msgid "Remote Repository Host" -msgstr "Hébergeur du dépôt" - -#: src/GitHub_Updater/Install.php:251 -msgid "Repository Branch" -msgstr "Branche de référence" - -#: src/GitHub_Updater/Install.php:259 -msgid "Private Bitbucket Repository" -msgstr "Dépôt BitBucket privé" - -#: src/GitHub_Updater/Install.php:267 src/GitHub_Updater/Settings.php:198 -msgid "GitHub Access Token" -msgstr "Jeton d'accès à GitHub" - -#: src/GitHub_Updater/Install.php:278 -#, fuzzy -msgid "GitLab Private Token" -msgstr "Réglages des dépôts GitHub privés" - -#: src/GitHub_Updater/Install.php:306 -msgid "Enter branch name or leave empty for `master`" -msgstr "Entrez le nom de la branche ou laissez vide pour « master »" - -#: src/GitHub_Updater/Install.php:348 -msgid "Enter GitHub Access Token for private GitHub repositories." -msgstr "Entrez votre jeton d'accès GitHub (GitHub Access Token)." - -#: src/GitHub_Updater/Install.php:362 -#, fuzzy -msgid "Enter GitLab Private Token for private GitLab repositories." -msgstr "Entrez votre jeton d'accès GitHub (GitHub Access Token)." - -#: src/GitHub_Updater/Messages.php:61 -#, fuzzy, php-format -msgid "%s was not checked. GitHub Updater Error Code:" -msgstr "%s n'a pas été vérifié. Code d'erreur de GitHub Updater : %s" - -#: src/GitHub_Updater/Messages.php:69 -#, php-format -msgid "GitHub API's rate limit will reset in %s minutes." -msgstr "" -"La limite sur le nombre d'appels à l'API GitHub sera réinitialisée dans %s " -"minutes." - -#: src/GitHub_Updater/Messages.php:74 -#, php-format -msgid "" -"It looks like you are running into GitHub API rate limits. Be sure and " -"configure a %sPersonal Access Token%s to avoid this issue." -msgstr "" - -#: src/GitHub_Updater/Messages.php:82 -#, fuzzy -msgid "There is probably an error on the GitHub Updater Settings page." -msgstr "" -"Il y a probablement une erreur sur la page des réglages de GitHub Updater" - -#: src/GitHub_Updater/Messages.php:95 -msgid "" -"You must set a GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" - -#: src/GitHub_Updater/Plugin.php:149 -#, fuzzy, php-format -msgid "Current branch is `%1$s`, try %2$sanother branch%3$s." -msgstr "La version actuelle est à jour. Essayez %sune autre version%s" - -#: src/GitHub_Updater/Plugin.php:199 -#, fuzzy -msgid "View details" -msgstr "détails" - -#: src/GitHub_Updater/Settings.php:68 src/GitHub_Updater/Settings.php:528 -msgid "Settings" -msgstr "Réglages" - -#: src/GitHub_Updater/Settings.php:81 src/GitHub_Updater/Settings.php:89 -#: src/GitHub_Updater/Settings.php:172 -msgid "GitHub Updater Settings" -msgstr "Réglages de GitHub Updater" - -#. Plugin Name of the plugin/theme -#: src/GitHub_Updater/Settings.php:82 src/GitHub_Updater/Settings.php:90 -#: src/GitHub_Updater/Settings.php:127 -msgid "GitHub Updater" -msgstr "GitHub Updater" - -#: src/GitHub_Updater/Settings.php:131 -msgid "Saved." -msgstr "Paramètres enregistrés." - -#: src/GitHub_Updater/Settings.php:179 -msgid "Enable Plugin Branch Switching" -msgstr "" - -#: src/GitHub_Updater/Settings.php:191 -#, fuzzy -msgid "Personal GitHub Access Token" -msgstr "Jeton d'accès à GitHub" - -#: src/GitHub_Updater/Settings.php:211 -msgid "GitHub Private Settings" -msgstr "Réglages des dépôts GitHub privés" - -#: src/GitHub_Updater/Settings.php:224 -#, fuzzy -msgid "GitLab Private Settings" -msgstr "Réglages des dépôts GitHub privés" - -#: src/GitHub_Updater/Settings.php:233 -#, fuzzy -msgid "GitLab.com Private Token" -msgstr "Réglages des dépôts GitHub privés" - -#: src/GitHub_Updater/Settings.php:244 -msgid "GitLab CE or GitLab Enterprise Private Token" -msgstr "" - -#: src/GitHub_Updater/Settings.php:257 -msgid "Bitbucket Private Settings" -msgstr "Réglages des dépôts Bitbucket privés" - -#: src/GitHub_Updater/Settings.php:264 -msgid "Bitbucket Username" -msgstr "Nom d'utilisateur Bitbucket" - -#: src/GitHub_Updater/Settings.php:273 -msgid "Bitbucket Password" -msgstr "Mot de passe Bitbucket" - -#: src/GitHub_Updater/Settings.php:286 -msgid "Bitbucket Private Repositories" -msgstr "Dépôts BitBucket privés" - -#: src/GitHub_Updater/Settings.php:298 -msgid "No private repositories are installed." -msgstr "Aucun dépôt privé n'est installé." - -#: src/GitHub_Updater/Settings.php:357 -msgid "Theme:" -msgstr "Thème :" - -#: src/GitHub_Updater/Settings.php:433 -msgid "Check to enable branch switching from the Plugins page." -msgstr "" - -#: src/GitHub_Updater/Settings.php:440 -msgid "Enter your GitHub Access Token. Leave empty for public repositories." -msgstr "" -"Entrez votre jeton d'accès GitHub (GitHub Access Token). Laissez vide pour " -"un dépôt public." - -#: src/GitHub_Updater/Settings.php:447 -#, fuzzy -msgid "Enter your personal GitHub Access Token to avoid API access limits." -msgstr "" -"Entrez votre jeton d'accès GitHub (GitHub Access Token). Laissez vide pour " -"un dépôt public." - -#: src/GitHub_Updater/Settings.php:454 -msgid "" -"Check box if private repository. Leave unchecked for public repositories." -msgstr "" -"Cochez la case s'il s'agit d'un dépôt privé. Ne pas cocher s'il s'agit d'un " -"dépôt public." - -#: src/GitHub_Updater/Settings.php:461 -msgid "Enter your personal Bitbucket username and password." -msgstr "Entrez votre nom d'utilisateur et mot de passe de Bitbucket." - -#: src/GitHub_Updater/Settings.php:468 -msgid "Enter your GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" - -#: src/GitHub_Updater/Theme.php:210 -msgid "Theme is up-to-date!" -msgstr "Le thème est à jour !" - -#: src/GitHub_Updater/Theme.php:215 -msgid "Rollback to:" -msgstr "Revenir à la version :" - -#: src/GitHub_Updater/Theme.php:233 -msgid "No previous tags to rollback to." -msgstr "Aucun tag précédent." - -#: src/GitHub_Updater/Theme.php:241 src/GitHub_Updater/Theme.php:255 -#, php-format -msgid "GitHub Updater shows a new version of %s available." -msgstr "GitHub Updater indique qu'une nouvelle version de %s est disponible." - -#: src/GitHub_Updater/Theme.php:248 -#, php-format -msgid "View version %s details." -msgstr "Voir les détails de la version %s." - -#: src/GitHub_Updater/Theme.php:252 -msgid "Automatic update is unavailable for this theme." -msgstr "La mise à jour automatique n'est pas disponible pour ce thème." - -#: src/GitHub_Updater/Theme.php:262 src/GitHub_Updater/Theme.php:347 -#, php-format -msgid "View version %1$s details%2$s or %3$supdate now%4$s." -msgstr "" -"Voir les détails de la version %1$s %2$s ou %3$smettre à jour maintenant%4$s." - -#: src/GitHub_Updater/Theme.php:340 -#, php-format -msgid "There is a new version of %s available now." -msgstr "Une nouvelle version de %s est disponible." - -#: src/GitHub_Updater/Theme.php:367 -#, php-format -msgid "Current version is up to date. Try %sanother version%s" -msgstr "La version actuelle est à jour. Essayez %sune autre version%s" - -#: src/GitHub_Updater/Theme.php:381 -msgid "Choose a Version" -msgstr "Choisissez une version" - -#: src/GitHub_Updater/Theme.php:384 -msgid "Install" -msgstr "Installer" - -#: vendor/WPUpdatePhp.php:24 -#, fuzzy -msgid "this plugin" -msgstr "Plugin" - -#: vendor/WPUpdatePhp.php:92 -#, fuzzy, php-format -msgid "Unfortunately, %1$s can not run on PHP versions older than %2$s." -msgstr "" -"Malheureusement, %1$s ne fonctionne pas sur les versions de PHP antérieures " -"à la v.%2$s. En savoir plus sur %3$sles possibilités de mise à jour%4$s." - -#: vendor/WPUpdatePhp.php:94 vendor/WPUpdatePhp.php:110 -#, php-format -msgid "Read more information about %show you can update%s." -msgstr "" - -#: vendor/WPUpdatePhp.php:108 -#, php-format -msgid "%1$s recommends a PHP version greater than %2$s." -msgstr "" - -#. Plugin URI of the plugin/theme -msgid "https://github.com/afragen/github-updater" -msgstr "https://github.com/afragen/github-updater" - -#. Description of the plugin/theme -#, fuzzy -msgid "" -"A plugin to automatically update GitHub, Bitbucket or GitLab hosted plugins " -"and themes. It also allows for remote installation of plugins or themes into " -"WordPress. Plugin class based upon codepress/github-plugin-updater. Theme class " -"based upon Whitelabel Framework modifications." -msgstr "" -"Une extension pour mettre à jour automatiquement des extensions et des " -"thèmes WordPress hébergés sur GitHub ou Bitbucket. Elle permet également " -"d'installer des extensions et des thèmes dans WordPress. La classe Plugin " -"est basée sur codepress/github-plugin-updater. La classe Theme est une version " -"modifiée du Whitelabel Framework." - -#. Author of the plugin/theme -msgid "Andy Fragen" -msgstr "Andy Fragen" - -#~ msgid "" -#~ "No changelog is available via GitHub Updater. Create a file CHANGES." -#~ "md or CHANGELOG.md in your repository." -#~ msgstr "" -#~ "L'historique des modifications n'est pas disponible. Créez un fichier " -#~ "CHANGES.md ou CHANGELOG.md dans votre dépôt." - -#~ msgid "%sView version %s details%s or %supdate now%s." -#~ msgstr "" -#~ "%sVoir les détails de la version %s %s ou %smettre à jour maintenant%s." - -#~ msgid "URI" -#~ msgstr "URI" - -#~ msgid "available now." -#~ msgstr "est disponible." - -#~ msgid "View version" -#~ msgstr "Voir la version" - -#~ msgid "or" -#~ msgstr "ou" - -#~ msgid "update now" -#~ msgstr "mettre à jour maintenant" - -#~ msgid "another version?" -#~ msgstr "une autre version ?" - -#~ msgid "" -#~ "GitHub Updater will not load. It requires PHP 5.3 or greater. Please ask " -#~ "your service provider to update PHP on your server" -#~ msgstr "" -#~ "GitHub Updater ne se charge pas. Il nécessite PHP 5.3 ou supérieur. " -#~ "Veuillez demander à votre hébergeur de mettre à jour PHP sur votre " -#~ "serveur." - -#~ msgid "was not checked." -#~ msgstr "n'a pas été vérifié." - -#~ msgid "GitHub Updater Error Code:" -#~ msgstr "Code d'erreur GitHub Updater :" - -#~ msgid " or " -#~ msgstr " ou " diff --git a/github/languages/github-updater-it.mo b/github/languages/github-updater-it.mo deleted file mode 100644 index 23960141427e8f338ca402199bd4f2162932a47c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4287 zcmb`JO^h5z6~`+fKv=$#K==qGd5%5a#M$osu(6g|*1_Ja?SV}^TJKsQAx&y}YG;b= zt{S?kcXzA^gb+uRQ@cxhB)9C*NoCoj4WY*^l_&Kl#J_R0uFT%z@ z0eRoYVN}-dG|2Y7fWJ%N*Fd)8k3g35b&&1+>oEQ{xQqTjLAKK-gynVL1h0Xwfve!( zL%#)Mte{_jZ0|QfUiT013*bF48r$tr{IMSwKpwvWu7e2(k;RWew$sl+EET^3*{;6> zp9KE}vR;pTvXc7*$o9PevYxvjpPPZa{`(;B`w|FI#j7CO_h%rldo%QZ1D-+uEpQQh z54;MVL~!xBDaiJH8AK>IKbS{^kS^b!K%eLH-s~rYW2rCu=xIFc(^Gf|56kl~9{zF6 zu|J-`gU~O1F$eOG<*I+I8%$8zT2U4f9pDNn3Ir$L={YYgh7MHZ|7sKP|HbUp=n-EYB{lKJo;C(zgqO^Vv;E5 zXvgj=Qym>d4DXMNP%Z7}64DZ@M-VnG6;RpOPs$x$$fUywFNA|8wz%zSwdT`>x7E5j zvfN}0J*|-`O?_4bGm|s}8V3i)qE@cknRk?P6r?)So(^@I!m1A5)&|C*Oq;^9aqAT` z=BUTI!6J>9!`$66zVdon=u*cxFL4YkeS9L_VFPj_d+6X-qYi5~k=*y&s&6;I?%R2e9IyJEaf&$`w}teZCp*LVtUrIBy(JpN^muZMcBO7d}{CQ zCUC{J$}9{!9igk%c?_3v;fm6ddqs+oaCs(lsf--4Jr$`ft|R<$WMiC4lk&fc=*ZiM zBl?6W2ipu5_kWm-j6ICSt|@Ol+o2L{U=K}d6oTgXqGm}fM&6HIdvS57{ix{2iOm+}UYVc5P*iP|i*9betr8z~ z22r@yZ8{z{bKPq@(MGP2)2xY}g(2Fsvb6lAXz6^kw2EeXWd)6;B}|OA;e5^wcb&I| z`x))P6)u&?X>HmxO42o?ktDVI`}7rU_Uu<}-H(m(7v{F485YQ}(Tc}sSQ>o1wB_o;RI+*m zHm&xt^EaX^$|ziDmbz=z0C##hUX7RWrs_tQq*G(*M{SDZ>F9MNp+s#|hqb9Xty%MR zHQ~hXwzTtY>h;!oYOQD5%L^-Oy(30~k-A}y+UJr5ey3d0liuf8&@|Pw85Z!XkxS9`obPB#RJW0 zfRjfp?m=PiDrP6kI7m1%rtk+mIZ!Zx%q&?-OO^3%y32f3rsx0vf;5Vy5{gM`iZp_v zjsfV`xDv%JtqL?`*0h%^#ErSh9!g=?kPa_)JLGg#y`ko<*Fy=fYB>B<&zmjbw~e7{ zVm<%vWt=@Ij_neTxx=yyAqziqu$Y1aAbgyanpJgWdPkb7F6*)`;i6D{LuHq=gWDsX z$5&cmxTtf5Pt*YE6njd_HR9Ug^Ak%^->YdefnVP%L}w`Qxam!WpQ+9D#KtYNw=?Hr zZ$pLGh%TImeu8TsD!mok9BO6EHP=pTH`0;hQlE03f!Z@yTd;m@4gpRR$8M2D$uD1S z%tQP;*c4^=m_>POSEZmlNLt;A8KbyF<~k`wxuG3yufB\n" -"Language-Team: Enea Overclokk\n" -"Language: it\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.1\n" -"X-Poedit-Basepath: ..\n" -"X-Poedit-SourceCharset: UTF-8\n" -"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;" -"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;" -"_nx_noop:3c,1,2;__ngettext_noop:1,2\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Poedit-SearchPath-0: .\n" - -#: mu/ghu-loader.php:66 -msgid "Activated as mu-plugin" -msgstr "Attivato come mu-plugin" - -#: src/GitHub_Updater/Base.php:467 -#, fuzzy, php-format -msgid "Renaming %1$s to %2$s" -msgstr "Rinominato %s a %s" - -#: src/GitHub_Updater/Base.php:477 -msgid "Rename successful" -msgstr "Rinominato con successo" - -#: src/GitHub_Updater/Base.php:484 -msgid "Unable to rename downloaded repository." -msgstr "Impossibile rinominare il repository scaricato." - -#: src/GitHub_Updater/Install.php:56 -msgid "A repository URI is required." -msgstr "" - -#: src/GitHub_Updater/Install.php:194 src/GitHub_Updater/Settings.php:69 -msgid "Install Plugin" -msgstr "Installare Plugin" - -#: src/GitHub_Updater/Install.php:197 src/GitHub_Updater/Settings.php:70 -msgid "Install Theme" -msgstr "Installa Tema" - -#: src/GitHub_Updater/Install.php:214 -msgid "Plugin" -msgstr "Plugin" - -#: src/GitHub_Updater/Install.php:217 -msgid "Theme" -msgstr "Tema:" - -#: src/GitHub_Updater/Install.php:228 -#, php-format -msgid "GitHub Updater Install %s" -msgstr "GitHub Updater Installa %s" - -#: src/GitHub_Updater/Install.php:235 -#, php-format -msgid "%s URI" -msgstr "%s URI" - -#: src/GitHub_Updater/Install.php:243 -msgid "Remote Repository Host" -msgstr "Repository remoto Host" - -#: src/GitHub_Updater/Install.php:251 -msgid "Repository Branch" -msgstr "Ramo del repository" - -#: src/GitHub_Updater/Install.php:259 -msgid "Private Bitbucket Repository" -msgstr "Repository privato Bitbucket" - -#: src/GitHub_Updater/Install.php:267 src/GitHub_Updater/Settings.php:198 -msgid "GitHub Access Token" -msgstr "GitHub Access Token" - -#: src/GitHub_Updater/Install.php:278 -#, fuzzy -msgid "GitLab Private Token" -msgstr "Impostazioni private GitHub" - -#: src/GitHub_Updater/Install.php:306 -msgid "Enter branch name or leave empty for `master`" -msgstr "Immettere il nome del ramo o lasciare vuoto per 'master'" - -#: src/GitHub_Updater/Install.php:348 -msgid "Enter GitHub Access Token for private GitHub repositories." -msgstr "" -"Inserisci il tuo Access Token di Github. Lascia vuoto per gli archivi " -"pubblici." - -#: src/GitHub_Updater/Install.php:362 -#, fuzzy -msgid "Enter GitLab Private Token for private GitLab repositories." -msgstr "" -"Inserisci il tuo Access Token di Github. Lascia vuoto per gli archivi " -"pubblici." - -#: src/GitHub_Updater/Messages.php:61 -#, fuzzy, php-format -msgid "%s was not checked. GitHub Updater Error Code:" -msgstr "%1$s non è stato verificato. Codice di errore di GitHub Updater: %2$s" - -#: src/GitHub_Updater/Messages.php:69 -#, php-format -msgid "GitHub API's rate limit will reset in %s minutes." -msgstr "Il limite di frequenza delle GitHub API si resetterà in %s minuti." - -#: src/GitHub_Updater/Messages.php:74 -#, php-format -msgid "" -"It looks like you are running into GitHub API rate limits. Be sure and " -"configure a %sPersonal Access Token%s to avoid this issue." -msgstr "" - -#: src/GitHub_Updater/Messages.php:82 -#, fuzzy -msgid "There is probably an error on the GitHub Updater Settings page." -msgstr "" -"Probabilmente c'è un errore nella pagina impostazioni di GitHub Updater" - -#: src/GitHub_Updater/Messages.php:95 -msgid "" -"You must set a GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" - -#: src/GitHub_Updater/Plugin.php:149 -#, fuzzy, php-format -msgid "Current branch is `%1$s`, try %2$sanother branch%3$s." -msgstr "La versione attuale è aggiornata. Prova %sun'altra versione%s" - -#: src/GitHub_Updater/Plugin.php:199 -#, fuzzy -msgid "View details" -msgstr "Visualizza i dettagli della versione %4$s" - -#: src/GitHub_Updater/Settings.php:68 src/GitHub_Updater/Settings.php:528 -msgid "Settings" -msgstr "Impostazioni" - -#: src/GitHub_Updater/Settings.php:81 src/GitHub_Updater/Settings.php:89 -#: src/GitHub_Updater/Settings.php:172 -msgid "GitHub Updater Settings" -msgstr "Impostazioni GitHub Updater" - -#. Plugin Name of the plugin/theme -#: src/GitHub_Updater/Settings.php:82 src/GitHub_Updater/Settings.php:90 -#: src/GitHub_Updater/Settings.php:127 -msgid "GitHub Updater" -msgstr "GitHub Updater" - -#: src/GitHub_Updater/Settings.php:131 -msgid "Saved." -msgstr "Salvato." - -#: src/GitHub_Updater/Settings.php:179 -msgid "Enable Plugin Branch Switching" -msgstr "" - -#: src/GitHub_Updater/Settings.php:191 -#, fuzzy -msgid "Personal GitHub Access Token" -msgstr "GitHub Access Token" - -#: src/GitHub_Updater/Settings.php:211 -msgid "GitHub Private Settings" -msgstr "Impostazioni private GitHub" - -#: src/GitHub_Updater/Settings.php:224 -#, fuzzy -msgid "GitLab Private Settings" -msgstr "Impostazioni private GitHub" - -#: src/GitHub_Updater/Settings.php:233 -#, fuzzy -msgid "GitLab.com Private Token" -msgstr "Impostazioni private GitHub" - -#: src/GitHub_Updater/Settings.php:244 -msgid "GitLab CE or GitLab Enterprise Private Token" -msgstr "" - -#: src/GitHub_Updater/Settings.php:257 -msgid "Bitbucket Private Settings" -msgstr "Impostazioni private Bitbucket" - -#: src/GitHub_Updater/Settings.php:264 -msgid "Bitbucket Username" -msgstr "Username Bitbucket" - -#: src/GitHub_Updater/Settings.php:273 -msgid "Bitbucket Password" -msgstr "Password Bitbucket" - -#: src/GitHub_Updater/Settings.php:286 -msgid "Bitbucket Private Repositories" -msgstr "Repository privato Bitbucket" - -#: src/GitHub_Updater/Settings.php:298 -msgid "No private repositories are installed." -msgstr "Nessun repository privato è installato." - -#: src/GitHub_Updater/Settings.php:357 -msgid "Theme:" -msgstr "Tema:" - -#: src/GitHub_Updater/Settings.php:433 -msgid "Check to enable branch switching from the Plugins page." -msgstr "" - -#: src/GitHub_Updater/Settings.php:440 -msgid "Enter your GitHub Access Token. Leave empty for public repositories." -msgstr "" -"Inserisci il tuo Access Token di Github. Lascia vuoto per gli archivi " -"pubblici." - -#: src/GitHub_Updater/Settings.php:447 -#, fuzzy -msgid "Enter your personal GitHub Access Token to avoid API access limits." -msgstr "" -"Inserisci il tuo Access Token di Github. Lascia vuoto per gli archivi " -"pubblici." - -#: src/GitHub_Updater/Settings.php:454 -msgid "" -"Check box if private repository. Leave unchecked for public repositories." -msgstr "" -"Seleziona se il repository è privato. Lascia deselezionato per gli archivi " -"pubblici." - -#: src/GitHub_Updater/Settings.php:461 -msgid "Enter your personal Bitbucket username and password." -msgstr "Inserisci la tua username e password di Bitbucket." - -#: src/GitHub_Updater/Settings.php:468 -msgid "Enter your GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" - -#: src/GitHub_Updater/Theme.php:210 -msgid "Theme is up-to-date!" -msgstr "Il tema è aggiornato!" - -#: src/GitHub_Updater/Theme.php:215 -msgid "Rollback to:" -msgstr "Ripristina a:" - -#: src/GitHub_Updater/Theme.php:233 -msgid "No previous tags to rollback to." -msgstr "Nessun tag precedente da ripristinare." - -#: src/GitHub_Updater/Theme.php:241 src/GitHub_Updater/Theme.php:255 -#, php-format -msgid "GitHub Updater shows a new version of %s available." -msgstr "GitHub Updater mostra una nuova versione di %1$s disponibile." - -#: src/GitHub_Updater/Theme.php:248 -#, php-format -msgid "View version %s details." -msgstr "Visualizza i dettagli della versione %s." - -#: src/GitHub_Updater/Theme.php:252 -msgid "Automatic update is unavailable for this theme." -msgstr "L'aggiornamento automatico non è disponibile per questo tema." - -#: src/GitHub_Updater/Theme.php:262 src/GitHub_Updater/Theme.php:347 -#, php-format -msgid "View version %1$s details%2$s or %3$supdate now%4$s." -msgstr "" -"Visualizza i dettagli della versione %1$s %2$s o %3$saggiorna adesso%4$s" - -#: src/GitHub_Updater/Theme.php:340 -#, php-format -msgid "There is a new version of %s available now." -msgstr "C'è una nuova versione di %s disponibile." - -#: src/GitHub_Updater/Theme.php:367 -#, php-format -msgid "Current version is up to date. Try %sanother version%s" -msgstr "La versione attuale è aggiornata. Prova %sun'altra versione%s" - -#: src/GitHub_Updater/Theme.php:381 -msgid "Choose a Version" -msgstr "Scegli una versione" - -#: src/GitHub_Updater/Theme.php:384 -msgid "Install" -msgstr "Installa" - -#: vendor/WPUpdatePhp.php:24 -#, fuzzy -msgid "this plugin" -msgstr "Plugin" - -#: vendor/WPUpdatePhp.php:92 -#, fuzzy, php-format -msgid "Unfortunately, %1$s can not run on PHP versions older than %2$s." -msgstr "" -"Purtroppo %1$s non può essere eseguito su versioni di PHP più vecchie di " -"%2$s. Puoi leggere ulteriori informazioni su %3$s come è possibile aggiornare" -"%4$s." - -#: vendor/WPUpdatePhp.php:94 vendor/WPUpdatePhp.php:110 -#, php-format -msgid "Read more information about %show you can update%s." -msgstr "" - -#: vendor/WPUpdatePhp.php:108 -#, php-format -msgid "%1$s recommends a PHP version greater than %2$s." -msgstr "" - -#. Plugin URI of the plugin/theme -msgid "https://github.com/afragen/github-updater" -msgstr "https://github.com/afragen/github-updater" - -#. Description of the plugin/theme -#, fuzzy -msgid "" -"A plugin to automatically update GitHub, Bitbucket or GitLab hosted plugins " -"and themes. It also allows for remote installation of plugins or themes into " -"WordPress. Plugin class based upon codepress/github-plugin-updater. Theme class " -"based upon Whitelabel Framework modifications." -msgstr "" -"Un plugin per aggiornare automaticamente un tema o plugin ospitato su GitHub " -"or Bitbucket direttamente dentro WordPress. La classe per la gestione dei " -"plugin è basata su codepress/github-plugin-updater.La classe per la gestione dei " -"temi è basata su Whitelabel Framework modificata." - -#. Author of the plugin/theme -msgid "Andy Fragen" -msgstr "Andy Fragen" - -#~ msgid "" -#~ "No changelog is available via GitHub Updater. Create a file CHANGES." -#~ "md or CHANGELOG.md in your repository." -#~ msgstr "" -#~ "Nessun changelog è disponibile con GitHub Updater. Crea un file " -#~ "CHANGES.md o CHANGELOG.md nel tuo repository." - -#~ msgid "%1$s was not checked. GitHub Updater Error Code: %2$s" -#~ msgstr "%1$s non è stata verificata. Codice di errore GitHub Updater: %2$s" - -#~ msgid "GitHub API's rate limit will reset in %1$s minutes." -#~ msgstr "Limite di frequenza su GitHub API si resetterà in minuti di %1$s." - -#~ msgid "%sRollback to:%s" -#~ msgstr "%sRipristina a:%s" - -#~ msgid "GitHub Updater shows a new version of %1$s available." -#~ msgstr "GitHub Updater mostra una nuova versione di %1$s disponibile." - -#~ msgid "View version %4$s details" -#~ msgstr "Visualizza i dettagli della versione %4$s" - -#~ msgid "View version %4$s details%5$s or %6$supdate now%7$s." -#~ msgstr "" -#~ "%4$sVisualizza i dettagli della versione %5$s o %6$saggiorna adesso%7$s" - -#~ msgid "There is a new version of %1$s available now." -#~ msgstr "E' disponibile una nuova versione di %1$s." - -#~ msgid "%sView version %s details%s or %supdate now%s." -#~ msgstr "%sVisualizza i dettagli della versione %s %s o %saggiorna adesso%s." - -#~ msgid "available now." -#~ msgstr "disponibile adesso." - -#, fuzzy -#~ msgid "View version" -#~ msgstr "Visualizza i dettagli della versione %4$s" - -#~ msgid "or" -#~ msgstr "o" - -#~ msgid "update now" -#~ msgstr "aggiorna adesso" - -#~ msgid "another version?" -#~ msgstr "un'altra versione?" - -#~ msgid "was not checked." -#~ msgstr "non è stata verificata." - -#, fuzzy -#~ msgid "GitHub Updater Error Code:" -#~ msgstr "Codice di errore GitHub Updater:" - -#~ msgid " or " -#~ msgstr " o " diff --git a/github/languages/github-updater-ja.mo b/github/languages/github-updater-ja.mo deleted file mode 100644 index 274717385cd53f20a80d4bee95ffc790a0a0951a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8888 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 W3b=kbs?U+^{J&Z07onQW#Qq1Tlc+}k diff --git a/github/languages/github-updater-ja.po b/github/languages/github-updater-ja.po deleted file mode 100644 index e9c77ed..0000000 --- a/github/languages/github-updater-ja.po +++ /dev/null @@ -1,331 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: GitHub Updater\n" -"POT-Creation-Date: 2015-06-08 20:22-0800\n" -"PO-Revision-Date: 2015-06-08 20:22-0800\n" -"Last-Translator: ishihara \n" -"Language-Team: \n" -"Language: ja\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.1\n" -"X-Poedit-Basepath: ..\n" -"X-Poedit-WPHeader: github-updater.php\n" -"X-Poedit-SourceCharset: UTF-8\n" -"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;" -"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;" -"_nx_noop:3c,1,2;__ngettext_noop:1,2\n" -"X-Poedit-SearchPath-0: .\n" -"X-Poedit-SearchPathExcluded-0: *.js\n" - -#: mu/ghu-loader.php:66 -msgid "Activated as mu-plugin" -msgstr "mu-plugin として有効化しました。" - -#: src/GitHub_Updater/Base.php:467 -#, php-format -msgid "Renaming %1$s to %2$s" -msgstr "%1$s から %2$sにリネームしています。" - -#: src/GitHub_Updater/Base.php:477 -msgid "Rename successful" -msgstr "リネームに成功しました。" - -#: src/GitHub_Updater/Base.php:484 -msgid "Unable to rename downloaded repository." -msgstr "ダウンロードしたリポジトリの名前を変更することができません。" - -#: src/GitHub_Updater/Install.php:56 -msgid "A repository URI is required." -msgstr "リポジトリURIが必要です。" - -#: src/GitHub_Updater/Install.php:194 src/GitHub_Updater/Settings.php:69 -msgid "Install Plugin" -msgstr "プラグインをインストール" - -#: src/GitHub_Updater/Install.php:197 src/GitHub_Updater/Settings.php:70 -msgid "Install Theme" -msgstr "テーマをインストール" - -#: src/GitHub_Updater/Install.php:214 -msgid "Plugin" -msgstr "プラグイン" - -#: src/GitHub_Updater/Install.php:217 -msgid "Theme" -msgstr "テーマ" - -#: src/GitHub_Updater/Install.php:228 -#, php-format -msgid "GitHub Updater Install %s" -msgstr "GitHub Updater インストール %s" - -#: src/GitHub_Updater/Install.php:235 -#, php-format -msgid "%s URI" -msgstr "%s URI" - -#: src/GitHub_Updater/Install.php:243 -msgid "Remote Repository Host" -msgstr "リモートリポジトリホスト" - -#: src/GitHub_Updater/Install.php:251 -msgid "Repository Branch" -msgstr "リポジトリのブランチ" - -#: src/GitHub_Updater/Install.php:259 -msgid "Private Bitbucket Repository" -msgstr "プライベートなBitbucketのリポジトリ" - -#: src/GitHub_Updater/Install.php:267 src/GitHub_Updater/Settings.php:198 -msgid "GitHub Access Token" -msgstr "Github アクセストークン" - -#: src/GitHub_Updater/Install.php:278 -msgid "GitLab Private Token" -msgstr "GitLab プライベート トークン" - -#: src/GitHub_Updater/Install.php:306 -msgid "Enter branch name or leave empty for `master`" -msgstr "" -"ブランチ名を入力、または’master’ に設定するために空のままにしてください。" - -#: src/GitHub_Updater/Install.php:348 -msgid "Enter GitHub Access Token for private GitHub repositories." -msgstr "プライベートリポジトリ用のGitHubアクセストークンを入力します。" - -#: src/GitHub_Updater/Install.php:362 -msgid "Enter GitLab Private Token for private GitLab repositories." -msgstr "プライベートリポジトリの GitLab プライベートトークンを入力" - -#: src/GitHub_Updater/Messages.php:61 -#, php-format -msgid "%s was not checked. GitHub Updater Error Code:" -msgstr "%s はチェックされていません。 GitHub Updater エラーコード:" - -#: src/GitHub_Updater/Messages.php:69 -#, php-format -msgid "GitHub API's rate limit will reset in %s minutes." -msgstr "" - -#: src/GitHub_Updater/Messages.php:74 -#, php-format -msgid "" -"It looks like you are running into GitHub API rate limits. Be sure and " -"configure a %sPersonal Access Token%s to avoid this issue." -msgstr "" -"GitHub APIの制限に達している可能性があります。この問題を回避する %sPersonal " -"Access Token%sを構成してください。" - -#: src/GitHub_Updater/Messages.php:82 -msgid "There is probably an error on the GitHub Updater Settings page." -msgstr "GitHubのアップデータの設定ページにエラーがある可能性があります。" - -#: src/GitHub_Updater/Messages.php:95 -msgid "" -"You must set a GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" -"あなたはGitLab.com、GitLab CE、またはGitLabエンタープライズプライベートトーク" -"ンを設定する必要があります。" - -#: src/GitHub_Updater/Plugin.php:149 -#, php-format -msgid "Current branch is `%1$s`, try %2$sanother branch%3$s." -msgstr "現在のブランチは `%1$s`です。%2$sanother branch%3$s." - -#: src/GitHub_Updater/Plugin.php:199 -msgid "View details" -msgstr "詳細を見る" - -#: src/GitHub_Updater/Settings.php:68 src/GitHub_Updater/Settings.php:528 -msgid "Settings" -msgstr "設定" - -#: src/GitHub_Updater/Settings.php:81 src/GitHub_Updater/Settings.php:89 -#: src/GitHub_Updater/Settings.php:172 -msgid "GitHub Updater Settings" -msgstr "GitHub Updater 設定" - -#. Plugin Name of the plugin/theme -#: src/GitHub_Updater/Settings.php:82 src/GitHub_Updater/Settings.php:90 -#: src/GitHub_Updater/Settings.php:127 -msgid "GitHub Updater" -msgstr "GItHub Updater" - -#: src/GitHub_Updater/Settings.php:131 -msgid "Saved." -msgstr "保存しました。" - -#: src/GitHub_Updater/Settings.php:179 -msgid "Enable Plugin Branch Switching" -msgstr "プラグインがブランチを変更することを有効化" - -#: src/GitHub_Updater/Settings.php:191 -msgid "Personal GitHub Access Token" -msgstr "個人のGitHubのアクセストークン" - -#: src/GitHub_Updater/Settings.php:211 -msgid "GitHub Private Settings" -msgstr "GitHub プライベート設定" - -#: src/GitHub_Updater/Settings.php:224 -msgid "GitLab Private Settings" -msgstr "GitLab プライベートリポジトリ 設定" - -#: src/GitHub_Updater/Settings.php:233 -msgid "GitLab.com Private Token" -msgstr "GitLab.com プライベート トークン" - -#: src/GitHub_Updater/Settings.php:244 -msgid "GitLab CE or GitLab Enterprise Private Token" -msgstr "GitLab CE または GitLab エンタープライズ プライベート トークン" - -#: src/GitHub_Updater/Settings.php:257 -msgid "Bitbucket Private Settings" -msgstr "Bitbucket プライベートリポジトリ 設定" - -#: src/GitHub_Updater/Settings.php:264 -msgid "Bitbucket Username" -msgstr "Bitbucket ユーザーネーム" - -#: src/GitHub_Updater/Settings.php:273 -msgid "Bitbucket Password" -msgstr "Bitbucket パスワード" - -#: src/GitHub_Updater/Settings.php:286 -msgid "Bitbucket Private Repositories" -msgstr "Bitbucket プライベート リポジトリ" - -#: src/GitHub_Updater/Settings.php:298 -msgid "No private repositories are installed." -msgstr "" -"プライベートリポジトリを持つプラグイン・テーマがインストールされていません。" - -#: src/GitHub_Updater/Settings.php:357 -msgid "Theme:" -msgstr "テーマ :" - -#: src/GitHub_Updater/Settings.php:433 -msgid "Check to enable branch switching from the Plugins page." -msgstr "" -"プラグインページからブランチ切り替えを可能にするために確認してください。" - -#: src/GitHub_Updater/Settings.php:440 -msgid "Enter your GitHub Access Token. Leave empty for public repositories." -msgstr "" -"あなたのGitHub アクセストークンを入力してください。公開リポジトリの場合は空の" -"ままにしてください。" - -#: src/GitHub_Updater/Settings.php:447 -msgid "Enter your personal GitHub Access Token to avoid API access limits." -msgstr "" -"APIアクセス制限を回避するために、あなたのGitHubのアクセストークンを入力してく" -"ださい。" - -#: src/GitHub_Updater/Settings.php:454 -msgid "" -"Check box if private repository. Leave unchecked for public repositories." -msgstr "プライベートリポジトリ場合には、チェックしてください。" - -#: src/GitHub_Updater/Settings.php:461 -msgid "Enter your personal Bitbucket username and password." -msgstr "あなた個人のBitbucket ユーザーネーム、パスワードを入力してください" - -#: src/GitHub_Updater/Settings.php:468 -msgid "Enter your GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" -"GitLab.com、GitLab CE、またはGitLabエンタープライズプライベートトークンを入力" - -#: src/GitHub_Updater/Theme.php:210 -msgid "Theme is up-to-date!" -msgstr "テーマは最新のものです。" - -#: src/GitHub_Updater/Theme.php:215 -msgid "Rollback to:" -msgstr "ロールバック : " - -#: src/GitHub_Updater/Theme.php:233 -msgid "No previous tags to rollback to." -msgstr "ロールバックする以前のタグはありません。" - -#: src/GitHub_Updater/Theme.php:241 src/GitHub_Updater/Theme.php:255 -#, php-format -msgid "GitHub Updater shows a new version of %s available." -msgstr "GitHubのアップデータは、利用可能な%sの新しいバージョンを表示しています" - -#: src/GitHub_Updater/Theme.php:248 -#, php-format -msgid "View version %s details." -msgstr "バージョン %s の詳細を見る" - -#: src/GitHub_Updater/Theme.php:252 -msgid "Automatic update is unavailable for this theme." -msgstr "自動更新はこのテーマでは利用できません。" - -#: src/GitHub_Updater/Theme.php:262 src/GitHub_Updater/Theme.php:347 -#, php-format -msgid "View version %1$s details%2$s or %3$supdate now%4$s." -msgstr "バージョン%1$sの詳細を見る%2$sもしくは %3$supdate now%4$s." - -#: src/GitHub_Updater/Theme.php:340 -#, php-format -msgid "There is a new version of %s available now." -msgstr "利用可能な %s の新しいバージョンが追加されました。" - -#: src/GitHub_Updater/Theme.php:367 -#, php-format -msgid "Current version is up to date. Try %sanother version%s" -msgstr "現在のバージョンは最新です。%sanother version%s に変更する" - -#: src/GitHub_Updater/Theme.php:381 -msgid "Choose a Version" -msgstr "バージョンを選択" - -#: src/GitHub_Updater/Theme.php:384 -msgid "Install" -msgstr "インストール" - -#: vendor/WPUpdatePhp.php:24 -msgid "this plugin" -msgstr "このプラグイン" - -#: vendor/WPUpdatePhp.php:92 -#, php-format -msgid "Unfortunately, %1$s can not run on PHP versions older than %2$s." -msgstr "" -"残念ながら、%1$s は %2$s よりも古いバージョンの PHP で実行できません。" - -#: vendor/WPUpdatePhp.php:94 vendor/WPUpdatePhp.php:110 -#, php-format -msgid "Read more information about %show you can update%s." -msgstr "Read more information about %show you can update%s." - -#: vendor/WPUpdatePhp.php:108 -#, php-format -msgid "%1$s recommends a PHP version greater than %2$s." -msgstr "%1$s recommends a PHP version greater than %2$s." - -#. Plugin URI of the plugin/theme -msgid "https://github.com/afragen/github-updater" -msgstr "https://github.com/afragen/github-updater" - -#. Description of the plugin/theme -msgid "" -"A plugin to automatically update GitHub, Bitbucket or GitLab hosted plugins " -"and themes. It also allows for remote installation of plugins or themes into " -"WordPress. Plugin class based upon codepress/github-plugin-updater. Theme class " -"based upon Whitelabel Framework modifications." -msgstr "" -"GitHub、Bitbucket または GitLab を自動的に更新するプラグインは、プラグインや" -"テーマにホストされています。また、WordPressのプラグインやテーマのリモートイン" -"ストールできます。プラグイン クラス codepress/github-plugin-updaterに基づいていま" -"す。テーマ クラスは、Whitelabel Framework の変更に基づいています。" - -#. Author of the plugin/theme -msgid "Andy Fragen" -msgstr "Andy Fragen" diff --git a/github/languages/github-updater-pt_BR.mo b/github/languages/github-updater-pt_BR.mo deleted file mode 100644 index d247c3f1ace457378731d11f22e8a37535d8809d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3060 zcmb7_TaOe)6vs^)N$> zF@6N2@+5I%qTzw~U`&YmHa-{={RHYK@X7e-ga6ZAGdnD3LMJo7y4ShYIe+Zm{RzYO z0)EfoxA!i_4uSuG^nHFeV^4rv-~-?da2)&*+zA@J znCB6Y<`=>Hz-90;a2-4dUIaQZ^equs;I|L8qtzy=T4`>#UanL2upcvd9Fl9#EEDol5c3kT^ob0 zEmK)#bFpjY;ihzaMOb@Dn`m^%6xZ=pnQ0q4ZDMI}GrcCAi&blMYTZhsL@L>QTZWsw zsk=Ph;F&+q49@FS`LYxp2@ykD2+c^qEN>>zV7Ls|R&kQnR&v45OJifL*rIaM@TL*i z%jq(Xtx0j5Of%Ojj=GQvi)9!5>YmOGKNY*vd6UnEp|qCQ^`=wtP@GXJo!rL^g*{yeq`q~ zj4L~_&f!_n!k^|wCrMMl`c7BN1*JDf&B}#Ah?FNJ5rJM*5OUw1^M@L-Bf5 z)^;wlwej&*?Am#=8tQahY!rd+hk`Q74O=n#q6}TI6a_v$Y6Cxei&j?Nst5B%;&Esd zEI^JLpPHC_J(zeSn3zVhHZ_UH!~_-wtFR>n+3nX&mFt!fT0tFZ+eF}T)cARk^skv% z^EI7c7W~bQNF=)UvN+L7@d8PK zHCoX!iXESDtHV=B*95-Qd{E+*%n=UY-)y=&10`Bew8_{ym@l4WhB*~(@3uo z^0dwSTR67H&I*3Fan0uIS!?xWm*;hq(3r><_A;Q%gBR+jaKGmh9~J~DdB4}M45XB z0`53vR2|E+{&!T3G)j;chRz%qf|Chg^qZ`UVs)!|eY*GV*pcr4XG593eEJt=*nqM= zTbHFk7@nsvQ%4tJ!OlUfJQY+9P>@gqW2&rVB@_y2Fo3E+0oF!%?NFIY6@^S$8K^l@ z8b*9=s7~l%ae#|_taH=|vNc;Jcfs_d7obKY9e8_(kystk?89C7HxcQvQb>v_ZEg7g UP&DW&vorLXBJM(fJE\n" -"Language-Team: Valério Souza \n" -"Language: pt_BR\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.1\n" -"X-Poedit-Basepath: ..\n" -"X-Poedit-SourceCharset: UTF-8\n" -"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;" -"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;" -"_nx_noop:3c,1,2;__ngettext_noop:1,2\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Poedit-SearchPath-0: .\n" - -#: mu/ghu-loader.php:66 -msgid "Activated as mu-plugin" -msgstr "Ativado como mu-plugin" - -#: src/GitHub_Updater/Base.php:467 -#, fuzzy, php-format -msgid "Renaming %1$s to %2$s" -msgstr "Renomeando %s para %s" - -#: src/GitHub_Updater/Base.php:477 -msgid "Rename successful" -msgstr "Renomeado com sucesso" - -#: src/GitHub_Updater/Base.php:484 -msgid "Unable to rename downloaded repository." -msgstr "Não é possível renomear o repositório baixado." - -#: src/GitHub_Updater/Install.php:56 -msgid "A repository URI is required." -msgstr "" - -#: src/GitHub_Updater/Install.php:194 src/GitHub_Updater/Settings.php:69 -msgid "Install Plugin" -msgstr "Instalar o Plugin" - -#: src/GitHub_Updater/Install.php:197 src/GitHub_Updater/Settings.php:70 -msgid "Install Theme" -msgstr "Instalar um novo tema" - -#: src/GitHub_Updater/Install.php:214 -msgid "Plugin" -msgstr "Plugin" - -#: src/GitHub_Updater/Install.php:217 -#, fuzzy -msgid "Theme" -msgstr "Tema:" - -#: src/GitHub_Updater/Install.php:228 -#, fuzzy, php-format -msgid "GitHub Updater Install %s" -msgstr "Instalar o GitHub Updater" - -#: src/GitHub_Updater/Install.php:235 -#, fuzzy, php-format -msgid "%s URI" -msgstr "%sReverter para:%s" - -#: src/GitHub_Updater/Install.php:243 -msgid "Remote Repository Host" -msgstr "Repositório remoto Host" - -#: src/GitHub_Updater/Install.php:251 -msgid "Repository Branch" -msgstr "Ramo de repositório" - -#: src/GitHub_Updater/Install.php:259 -#, fuzzy -msgid "Private Bitbucket Repository" -msgstr "Repositórios Privados do Bitbucket" - -#: src/GitHub_Updater/Install.php:267 src/GitHub_Updater/Settings.php:198 -msgid "GitHub Access Token" -msgstr "" - -#: src/GitHub_Updater/Install.php:278 -#, fuzzy -msgid "GitLab Private Token" -msgstr "Configurações do GitHub Privado" - -#: src/GitHub_Updater/Install.php:306 -msgid "Enter branch name or leave empty for `master`" -msgstr "Digite o nome de ramo ou deixe em branco para o 'mestre'" - -#: src/GitHub_Updater/Install.php:348 -#, fuzzy -msgid "Enter GitHub Access Token for private GitHub repositories." -msgstr "" -"Digite seu Token de Acesso do GitHub. Deixe em branco para repositórios " -"públicos." - -#: src/GitHub_Updater/Install.php:362 -#, fuzzy -msgid "Enter GitLab Private Token for private GitLab repositories." -msgstr "" -"Digite seu Token de Acesso do GitHub. Deixe em branco para repositórios " -"públicos." - -#: src/GitHub_Updater/Messages.php:61 -#, fuzzy, php-format -msgid "%s was not checked. GitHub Updater Error Code:" -msgstr "%1$s não foi verificada. GitHub Updater código de erro: %2$s" - -#: src/GitHub_Updater/Messages.php:69 -#, fuzzy, php-format -msgid "GitHub API's rate limit will reset in %s minutes." -msgstr "Limite de taxa do GitHub API irá repor em minutos de %1$s." - -#: src/GitHub_Updater/Messages.php:74 -#, php-format -msgid "" -"It looks like you are running into GitHub API rate limits. Be sure and " -"configure a %sPersonal Access Token%s to avoid this issue." -msgstr "" - -#: src/GitHub_Updater/Messages.php:82 -msgid "There is probably an error on the GitHub Updater Settings page." -msgstr "" - -#: src/GitHub_Updater/Messages.php:95 -msgid "" -"You must set a GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" - -#: src/GitHub_Updater/Plugin.php:149 -#, fuzzy, php-format -msgid "Current branch is `%1$s`, try %2$sanother branch%3$s." -msgstr "A versão está atualizada. Tentar" - -#: src/GitHub_Updater/Plugin.php:199 -#, fuzzy -msgid "View details" -msgstr "Ver versão %4$s detalhada" - -#: src/GitHub_Updater/Settings.php:68 src/GitHub_Updater/Settings.php:528 -msgid "Settings" -msgstr "Configurações" - -#: src/GitHub_Updater/Settings.php:81 src/GitHub_Updater/Settings.php:89 -#: src/GitHub_Updater/Settings.php:172 -msgid "GitHub Updater Settings" -msgstr "Configurações do GitHub Update" - -#. Plugin Name of the plugin/theme -#: src/GitHub_Updater/Settings.php:82 src/GitHub_Updater/Settings.php:90 -#: src/GitHub_Updater/Settings.php:127 -msgid "GitHub Updater" -msgstr "GitHub Updater" - -#: src/GitHub_Updater/Settings.php:131 -msgid "Saved." -msgstr "Salvo." - -#: src/GitHub_Updater/Settings.php:179 -msgid "Enable Plugin Branch Switching" -msgstr "" - -#: src/GitHub_Updater/Settings.php:191 -msgid "Personal GitHub Access Token" -msgstr "" - -#: src/GitHub_Updater/Settings.php:211 -msgid "GitHub Private Settings" -msgstr "Configurações do GitHub Privado" - -#: src/GitHub_Updater/Settings.php:224 -#, fuzzy -msgid "GitLab Private Settings" -msgstr "Configurações do GitHub Privado" - -#: src/GitHub_Updater/Settings.php:233 -#, fuzzy -msgid "GitLab.com Private Token" -msgstr "Configurações do GitHub Privado" - -#: src/GitHub_Updater/Settings.php:244 -msgid "GitLab CE or GitLab Enterprise Private Token" -msgstr "" - -#: src/GitHub_Updater/Settings.php:257 -msgid "Bitbucket Private Settings" -msgstr "Configurações do Bitbucket Privado" - -#: src/GitHub_Updater/Settings.php:264 -msgid "Bitbucket Username" -msgstr "Bitbucket Nome de usuário:" - -#: src/GitHub_Updater/Settings.php:273 -msgid "Bitbucket Password" -msgstr "Bitbucket senha" - -#: src/GitHub_Updater/Settings.php:286 -msgid "Bitbucket Private Repositories" -msgstr "Repositórios Privados do Bitbucket" - -#: src/GitHub_Updater/Settings.php:298 -msgid "No private repositories are installed." -msgstr "Não há repositórios privados instalados." - -#: src/GitHub_Updater/Settings.php:357 -#, fuzzy -msgid "Theme:" -msgstr "Tema:" - -#: src/GitHub_Updater/Settings.php:433 -msgid "Check to enable branch switching from the Plugins page." -msgstr "" - -#: src/GitHub_Updater/Settings.php:440 -msgid "Enter your GitHub Access Token. Leave empty for public repositories." -msgstr "" -"Digite seu Token de Acesso do GitHub. Deixe em branco para repositórios " -"públicos." - -#: src/GitHub_Updater/Settings.php:447 -#, fuzzy -msgid "Enter your personal GitHub Access Token to avoid API access limits." -msgstr "" -"Digite seu Token de Acesso do GitHub. Deixe em branco para repositórios " -"públicos." - -#: src/GitHub_Updater/Settings.php:454 -msgid "" -"Check box if private repository. Leave unchecked for public repositories." -msgstr "" -"Marque se o repositório é privado. Deixe desmarcado se o repositório for " -"publico." - -#: src/GitHub_Updater/Settings.php:461 -msgid "Enter your personal Bitbucket username and password." -msgstr "Digite seu usuário e senha do Bitbucket." - -#: src/GitHub_Updater/Settings.php:468 -msgid "Enter your GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" - -#: src/GitHub_Updater/Theme.php:210 -msgid "Theme is up-to-date!" -msgstr "Tema está atualizado!" - -#: src/GitHub_Updater/Theme.php:215 -#, fuzzy -msgid "Rollback to:" -msgstr "%sReverter para:%s" - -#: src/GitHub_Updater/Theme.php:233 -msgid "No previous tags to rollback to." -msgstr "Nenhuma tag anterior para reverter." - -#: src/GitHub_Updater/Theme.php:241 src/GitHub_Updater/Theme.php:255 -#, fuzzy, php-format -msgid "GitHub Updater shows a new version of %s available." -msgstr "GitHub Updater tem uma nova versão do %1$s disponível." - -#: src/GitHub_Updater/Theme.php:248 -#, fuzzy, php-format -msgid "View version %s details." -msgstr "Ver versão %4$s detalhada" - -#: src/GitHub_Updater/Theme.php:252 -msgid "Automatic update is unavailable for this theme." -msgstr "Atualização automática não está disponível para esse tema." - -#: src/GitHub_Updater/Theme.php:262 src/GitHub_Updater/Theme.php:347 -#, fuzzy, php-format -msgid "View version %1$s details%2$s or %3$supdate now%4$s." -msgstr "Ver versão %4$s detalhada%5$s ou %6$satualizar agora%7$s." - -#: src/GitHub_Updater/Theme.php:340 -#, fuzzy, php-format -msgid "There is a new version of %s available now." -msgstr "Há uma nova versão do" - -#: src/GitHub_Updater/Theme.php:367 -#, fuzzy, php-format -msgid "Current version is up to date. Try %sanother version%s" -msgstr "A versão está atualizada. Tentar" - -#: src/GitHub_Updater/Theme.php:381 -msgid "Choose a Version" -msgstr "Escolha a Versão" - -#: src/GitHub_Updater/Theme.php:384 -msgid "Install" -msgstr "Instalar" - -#: vendor/WPUpdatePhp.php:24 -#, fuzzy -msgid "this plugin" -msgstr "Plugin" - -#: vendor/WPUpdatePhp.php:92 -#, php-format -msgid "Unfortunately, %1$s can not run on PHP versions older than %2$s." -msgstr "" - -#: vendor/WPUpdatePhp.php:94 vendor/WPUpdatePhp.php:110 -#, php-format -msgid "Read more information about %show you can update%s." -msgstr "" - -#: vendor/WPUpdatePhp.php:108 -#, php-format -msgid "%1$s recommends a PHP version greater than %2$s." -msgstr "" - -#. Plugin URI of the plugin/theme -msgid "https://github.com/afragen/github-updater" -msgstr "https://github.com/afragen/github-updater" - -#. Description of the plugin/theme -#, fuzzy -msgid "" -"A plugin to automatically update GitHub, Bitbucket or GitLab hosted plugins " -"and themes. It also allows for remote installation of plugins or themes into " -"WordPress. Plugin class based upon codepress/github-plugin-updater. Theme class " -"based upon Whitelabel Framework modifications." -msgstr "" -"Um plugin para atualizar automaticamente o GitHub ou Bitbucket hospedado " -"plugins e temas para WordPress. Plugin classe baseado codepress/github-plugin-" -"atualizador. Classe de tema com base em modificações de Whitelabel " -"Framework ." - -#. Author of the plugin/theme -msgid "Andy Fragen" -msgstr "Andy Fragen" - -#~ msgid "" -#~ "No changelog is available via GitHub Updater. Create a file CHANGES." -#~ "md or CHANGELOG.md in your repository." -#~ msgstr "" -#~ "No changelog está disponível via GitHub Updater. Crie um arquivo " -#~ "CHANGES.md ou CHANGELOG.md em seu repositório." - -#~ msgid "%sView version %s details%s or %supdate now%s." -#~ msgstr "%sVer versão %s detalhada%s ou %satualizar agora%s." - -#~ msgid "available now." -#~ msgstr "disponível agora." - -#, fuzzy -#~ msgid "View version" -#~ msgstr "Ver versão %4$s detalhada" - -#~ msgid "or" -#~ msgstr "ou" - -#~ msgid "update now" -#~ msgstr "atualize agora" - -#~ msgid "another version?" -#~ msgstr "outra versão?" - -#~ msgid "was not checked." -#~ msgstr "não foi verificada." - -#~ msgid "GitHub Updater Error Code:" -#~ msgstr "Código de erro de GitHub Updater:" - -#~ msgid " or " -#~ msgstr " ou " diff --git a/github/languages/github-updater-pt_PT.mo b/github/languages/github-updater-pt_PT.mo deleted file mode 100644 index 12330efde97b673d51016e71009e107f4ad1dda5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7937 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 diff --git a/github/languages/github-updater-pt_PT.po b/github/languages/github-updater-pt_PT.po deleted file mode 100644 index 5052fc3..0000000 --- a/github/languages/github-updater-pt_PT.po +++ /dev/null @@ -1,332 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: GitHub Updater\n" -"POT-Creation-Date: 2015-06-08 20:21-0800\n" -"PO-Revision-Date: 2015-06-08 20:21-0800\n" -"Last-Translator: Pedro Mendonça \n" -"Language-Team: Pedro Mendonça \n" -"Language: pt_PT\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.1\n" -"X-Poedit-Basepath: ..\n" -"X-Poedit-SourceCharset: UTF-8\n" -"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;" -"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;" -"_nx_noop:3c,1,2;__ngettext_noop:1,2\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Poedit-SearchPath-0: .\n" - -#: mu/ghu-loader.php:66 -msgid "Activated as mu-plugin" -msgstr "Activado como um plugin obrigatório" - -#: src/GitHub_Updater/Base.php:467 -#, php-format -msgid "Renaming %1$s to %2$s" -msgstr "Renomear %1$s para %2$s" - -#: src/GitHub_Updater/Base.php:477 -msgid "Rename successful" -msgstr "Renomeado com sucesso" - -#: src/GitHub_Updater/Base.php:484 -msgid "Unable to rename downloaded repository." -msgstr "Não foi possível renomear o repositório descarregado." - -#: src/GitHub_Updater/Install.php:56 -msgid "A repository URI is required." -msgstr "É necessário um URI do repositório." - -#: src/GitHub_Updater/Install.php:194 src/GitHub_Updater/Settings.php:69 -msgid "Install Plugin" -msgstr "Instalar Plugin" - -#: src/GitHub_Updater/Install.php:197 src/GitHub_Updater/Settings.php:70 -msgid "Install Theme" -msgstr "Instalar Tema" - -#: src/GitHub_Updater/Install.php:214 -msgid "Plugin" -msgstr "Plugin" - -#: src/GitHub_Updater/Install.php:217 -msgid "Theme" -msgstr "Tema" - -#: src/GitHub_Updater/Install.php:228 -#, php-format -msgid "GitHub Updater Install %s" -msgstr "GitHub Updater instalação de %s" - -#: src/GitHub_Updater/Install.php:235 -#, php-format -msgid "%s URI" -msgstr "URI do %s" - -#: src/GitHub_Updater/Install.php:243 -msgid "Remote Repository Host" -msgstr "Alojamento remoto do repositório" - -#: src/GitHub_Updater/Install.php:251 -msgid "Repository Branch" -msgstr "Ramo do repositório" - -#: src/GitHub_Updater/Install.php:259 -msgid "Private Bitbucket Repository" -msgstr "Repositório privado do Bitbucket" - -#: src/GitHub_Updater/Install.php:267 src/GitHub_Updater/Settings.php:198 -msgid "GitHub Access Token" -msgstr "Token de acesso do GitHub" - -#: src/GitHub_Updater/Install.php:278 -msgid "GitLab Private Token" -msgstr "Token privado do GitLab" - -#: src/GitHub_Updater/Install.php:306 -msgid "Enter branch name or leave empty for `master`" -msgstr "Introduza o nome do ramo ou deixe vazio para `master`" - -#: src/GitHub_Updater/Install.php:348 -msgid "Enter GitHub Access Token for private GitHub repositories." -msgstr "" -"Introduza o Token de acesso do GitHub para repositórios privados do GitHub." - -#: src/GitHub_Updater/Install.php:362 -msgid "Enter GitLab Private Token for private GitLab repositories." -msgstr "" -"Introduza o Token privado do GitLab para repositórios privados do GitLab." - -#: src/GitHub_Updater/Messages.php:61 -#, php-format -msgid "%s was not checked. GitHub Updater Error Code:" -msgstr "%s não foi verificado. Erro do GitHub Updater com o código:" - -#: src/GitHub_Updater/Messages.php:69 -#, php-format -msgid "GitHub API's rate limit will reset in %s minutes." -msgstr "A taxa limite da API do GitHub será reposta em %s minutos." - -#: src/GitHub_Updater/Messages.php:74 -#, php-format -msgid "" -"It looks like you are running into GitHub API rate limits. Be sure and " -"configure a %sPersonal Access Token%s to avoid this issue." -msgstr "" -"Parece que se está a aproximar dos limites da API do GitHub. Configure um " -"%sToken pessoal de acesso%s para evitar que isto aconteça." - -#: src/GitHub_Updater/Messages.php:82 -msgid "There is probably an error on the GitHub Updater Settings page." -msgstr "" -"Provavelmente existe um erro na página de definições do GitHub Updater." - -#: src/GitHub_Updater/Messages.php:95 -msgid "" -"You must set a GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" -"Tem que definir um Token privado do GitLab.com, GitLab CE ou GitLab " -"Empresarial." - -#: src/GitHub_Updater/Plugin.php:149 -#, php-format -msgid "Current branch is `%1$s`, try %2$sanother branch%3$s." -msgstr "O ramo actual é `%1$s`, experimente %2$soutro ramo%3$s." - -#: src/GitHub_Updater/Plugin.php:199 -msgid "View details" -msgstr "Ver detalhes" - -#: src/GitHub_Updater/Settings.php:68 src/GitHub_Updater/Settings.php:528 -msgid "Settings" -msgstr "Definições" - -#: src/GitHub_Updater/Settings.php:81 src/GitHub_Updater/Settings.php:89 -#: src/GitHub_Updater/Settings.php:172 -msgid "GitHub Updater Settings" -msgstr "Definições do GitHub Updater" - -#. Plugin Name of the plugin/theme -#: src/GitHub_Updater/Settings.php:82 src/GitHub_Updater/Settings.php:90 -#: src/GitHub_Updater/Settings.php:127 -msgid "GitHub Updater" -msgstr "GitHub Updater" - -#: src/GitHub_Updater/Settings.php:131 -msgid "Saved." -msgstr "Guardado." - -#: src/GitHub_Updater/Settings.php:179 -msgid "Enable Plugin Branch Switching" -msgstr "Permitir mudar ramo do plugin" - -#: src/GitHub_Updater/Settings.php:191 -msgid "Personal GitHub Access Token" -msgstr "Token pessoal de acesso do GitHub" - -#: src/GitHub_Updater/Settings.php:211 -msgid "GitHub Private Settings" -msgstr "Definições privadas do GitHub" - -#: src/GitHub_Updater/Settings.php:224 -msgid "GitLab Private Settings" -msgstr "Definições privadas do GitLab" - -#: src/GitHub_Updater/Settings.php:233 -msgid "GitLab.com Private Token" -msgstr "Token privado do GitLab.com" - -#: src/GitHub_Updater/Settings.php:244 -msgid "GitLab CE or GitLab Enterprise Private Token" -msgstr "Token privado do GitLab CE ou GitLab Empresarial" - -#: src/GitHub_Updater/Settings.php:257 -msgid "Bitbucket Private Settings" -msgstr "Definições privadas do Bitbucket" - -#: src/GitHub_Updater/Settings.php:264 -msgid "Bitbucket Username" -msgstr "Utilizador do Bitbucket" - -#: src/GitHub_Updater/Settings.php:273 -msgid "Bitbucket Password" -msgstr "Senha do Bitbucket" - -#: src/GitHub_Updater/Settings.php:286 -msgid "Bitbucket Private Repositories" -msgstr "Repositórios privados do Bitbucket" - -#: src/GitHub_Updater/Settings.php:298 -msgid "No private repositories are installed." -msgstr "Nenhum repositório privado instalado." - -#: src/GitHub_Updater/Settings.php:357 -msgid "Theme:" -msgstr "Tema:" - -#: src/GitHub_Updater/Settings.php:433 -msgid "Check to enable branch switching from the Plugins page." -msgstr "" -"Seleccione a opção para permitir alternar entre ramos na página de plugins." - -#: src/GitHub_Updater/Settings.php:440 -msgid "Enter your GitHub Access Token. Leave empty for public repositories." -msgstr "" -"Introduza o seu Token de acesso do GitHub. Deixe vazio para repositórios " -"públicos." - -#: src/GitHub_Updater/Settings.php:447 -msgid "Enter your personal GitHub Access Token to avoid API access limits." -msgstr "" -"Introduza o seu Token pessoal de acesso do GitHub para evitar o limite de " -"acessos da API." - -#: src/GitHub_Updater/Settings.php:454 -msgid "" -"Check box if private repository. Leave unchecked for public repositories." -msgstr "" -"Seleccione a opção se for um repositório privado. Não seleccione para " -"repositórios públicos." - -#: src/GitHub_Updater/Settings.php:461 -msgid "Enter your personal Bitbucket username and password." -msgstr "Introduza o seu utilizador e senha do seu Bitbucket" - -#: src/GitHub_Updater/Settings.php:468 -msgid "Enter your GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" -"Introduza o seu Token privado do GitLab.com, GitLab CE ou GitLab Empresarial." - -#: src/GitHub_Updater/Theme.php:210 -msgid "Theme is up-to-date!" -msgstr "O tema está actualizado!" - -#: src/GitHub_Updater/Theme.php:215 -msgid "Rollback to:" -msgstr "Reverter para:" - -#: src/GitHub_Updater/Theme.php:233 -msgid "No previous tags to rollback to." -msgstr "Nenhuma etiqueta anterior para poder reverter." - -#: src/GitHub_Updater/Theme.php:241 src/GitHub_Updater/Theme.php:255 -#, php-format -msgid "GitHub Updater shows a new version of %s available." -msgstr "O GitHub Updater informa que está disponível uma nova versão de %s." - -#: src/GitHub_Updater/Theme.php:248 -#, php-format -msgid "View version %s details." -msgstr "Ver detalhes da versão %s." - -#: src/GitHub_Updater/Theme.php:252 -msgid "Automatic update is unavailable for this theme." -msgstr "Actualizações automáticas indisponíveis para este tema." - -#: src/GitHub_Updater/Theme.php:262 src/GitHub_Updater/Theme.php:347 -#, php-format -msgid "View version %1$s details%2$s or %3$supdate now%4$s." -msgstr "Ver detalhes da versão %1$s%2$s ou %3$sactualize agora%4$s." - -#: src/GitHub_Updater/Theme.php:340 -#, php-format -msgid "There is a new version of %s available now." -msgstr "Está disponível uma nova versão de %s." - -#: src/GitHub_Updater/Theme.php:367 -#, php-format -msgid "Current version is up to date. Try %sanother version%s" -msgstr "Esta é a versão actual. Experimente %soutra versão%s" - -#: src/GitHub_Updater/Theme.php:381 -msgid "Choose a Version" -msgstr "Escolha uma versão" - -#: src/GitHub_Updater/Theme.php:384 -msgid "Install" -msgstr "Instalar" - -#: vendor/WPUpdatePhp.php:24 -msgid "this plugin" -msgstr "este plugin" - -#: vendor/WPUpdatePhp.php:92 -#, php-format -msgid "Unfortunately, %1$s can not run on PHP versions older than %2$s." -msgstr "Infelizmente, o %1$s não corre em versões do PHP anteriores a %2$s." - -#: vendor/WPUpdatePhp.php:94 vendor/WPUpdatePhp.php:110 -#, php-format -msgid "Read more information about %show you can update%s." -msgstr "Leia mais informações sobre %scomo pode actualizar%s." - -#: vendor/WPUpdatePhp.php:108 -#, php-format -msgid "%1$s recommends a PHP version greater than %2$s." -msgstr "%1$s recomenda uma versão de PHP superior a %2$s." - -#. Plugin URI of the plugin/theme -msgid "https://github.com/afragen/github-updater" -msgstr "https://github.com/afragen/github-updater" - -#. Description of the plugin/theme -msgid "" -"A plugin to automatically update GitHub, Bitbucket or GitLab hosted plugins " -"and themes. It also allows for remote installation of plugins or themes into " -"WordPress. Plugin class based upon codepress/github-plugin-updater. Theme class " -"based upon Whitelabel Framework modifications." -msgstr "" -"Um plugin para actualizar automaticamente plugins e temas alojados no " -"GitHub, Bitbucket ou GitLab. Permite a instalação remota de plugins ou temas " -"no WordPress. Classe de plugin baseada em codepress/github-plugin-updater. " -"Classe de tema baseada em modificações de Whitelabel Framework." - -#. Author of the plugin/theme -msgid "Andy Fragen" -msgstr "Andy Fragen" diff --git a/github/languages/github-updater-ro_RO.mo b/github/languages/github-updater-ro_RO.mo deleted file mode 100644 index 627ac29635f335122a540b2b5878b79a233eabda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7721 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 diff --git a/github/languages/github-updater-ro_RO.po b/github/languages/github-updater-ro_RO.po deleted file mode 100644 index d7432fb..0000000 --- a/github/languages/github-updater-ro_RO.po +++ /dev/null @@ -1,327 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: GitHub Updater\n" -"POT-Creation-Date: 2015-06-08 20:21-0800\n" -"PO-Revision-Date: 2015-06-08 20:21-0800\n" -"Last-Translator: \n" -"Language-Team: Corneliu Cirlan\n" -"Language: ro_RO\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.1\n" -"X-Poedit-Basepath: ..\n" -"X-Poedit-WPHeader: github-updater.php\n" -"X-Poedit-SourceCharset: UTF-8\n" -"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;" -"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;" -"_nx_noop:3c,1,2;__ngettext_noop:1,2\n" -"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" -"2:1));\n" -"X-Poedit-SearchPath-0: .\n" -"X-Poedit-SearchPathExcluded-0: *.js\n" - -#: mu/ghu-loader.php:66 -msgid "Activated as mu-plugin" -msgstr "Activat ca mu-plugin" - -#: src/GitHub_Updater/Base.php:467 -#, php-format -msgid "Renaming %1$s to %2$s" -msgstr "Redenumire %1$s in %2$s" - -#: src/GitHub_Updater/Base.php:477 -msgid "Rename successful" -msgstr "Redenumire reusita" - -#: src/GitHub_Updater/Base.php:484 -msgid "Unable to rename downloaded repository." -msgstr "Imposibil de redenumit repozitoriul descarcat" - -#: src/GitHub_Updater/Install.php:56 -msgid "A repository URI is required." -msgstr "URL pentru repozitoriu obligatoriu" - -#: src/GitHub_Updater/Install.php:194 src/GitHub_Updater/Settings.php:69 -msgid "Install Plugin" -msgstr "Instaleaza Modul" - -#: src/GitHub_Updater/Install.php:197 src/GitHub_Updater/Settings.php:70 -msgid "Install Theme" -msgstr "Instaleaza Tema" - -#: src/GitHub_Updater/Install.php:214 -msgid "Plugin" -msgstr "Modul" - -#: src/GitHub_Updater/Install.php:217 -msgid "Theme" -msgstr "Tema" - -#: src/GitHub_Updater/Install.php:228 -#, php-format -msgid "GitHub Updater Install %s" -msgstr "Instalare Github Updater %s" - -#: src/GitHub_Updater/Install.php:235 -#, php-format -msgid "%s URI" -msgstr "%s URI" - -#: src/GitHub_Updater/Install.php:243 -msgid "Remote Repository Host" -msgstr "Gazda repozitoriu distant" - -#: src/GitHub_Updater/Install.php:251 -msgid "Repository Branch" -msgstr "Ramura repozitoriu" - -#: src/GitHub_Updater/Install.php:259 -msgid "Private Bitbucket Repository" -msgstr "Repozitoriu Bitbucket Privat" - -#: src/GitHub_Updater/Install.php:267 src/GitHub_Updater/Settings.php:198 -msgid "GitHub Access Token" -msgstr "Jeton de Acces Github" - -#: src/GitHub_Updater/Install.php:278 -msgid "GitLab Private Token" -msgstr "Jeton Privat Github" - -#: src/GitHub_Updater/Install.php:306 -msgid "Enter branch name or leave empty for `master`" -msgstr "Introdu numele ramurei sau lasa gol pentru 'master'" - -#: src/GitHub_Updater/Install.php:348 -msgid "Enter GitHub Access Token for private GitHub repositories." -msgstr "Introdu Jeton de Acces GitHub pentru repozitoriile GitHub private." - -#: src/GitHub_Updater/Install.php:362 -msgid "Enter GitLab Private Token for private GitLab repositories." -msgstr "Introdu Jeton de Acces GitLab pentru repozitoriile GitLab private." - -#: src/GitHub_Updater/Messages.php:61 -#, php-format -msgid "%s was not checked. GitHub Updater Error Code:" -msgstr "%s nu a fost verificat. Github Updater Cod Eroare:" - -#: src/GitHub_Updater/Messages.php:69 -#, php-format -msgid "GitHub API's rate limit will reset in %s minutes." -msgstr "Rata limitei APIului GitHub se va reseta in %s minute." - -#: src/GitHub_Updater/Messages.php:74 -#, php-format -msgid "" -"It looks like you are running into GitHub API rate limits. Be sure and " -"configure a %sPersonal Access Token%s to avoid this issue." -msgstr "" -"Se pare ca atingi limite APIului GitHub. Asigurate si configura un %sJeton " -"Personal de Access%s pentru a evita acest lucru." - -#: src/GitHub_Updater/Messages.php:82 -msgid "There is probably an error on the GitHub Updater Settings page." -msgstr "Probabil este o eroare pe pagina cu Setarile GitHub Updater" - -#: src/GitHub_Updater/Messages.php:95 -msgid "" -"You must set a GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" -"Trebuie sa setezi un Jeton Privat pentru GitLab.com, GitLab CE sau GitHub " -"Enterprise." - -#: src/GitHub_Updater/Plugin.php:149 -#, php-format -msgid "Current branch is `%1$s`, try %2$sanother branch%3$s." -msgstr "Ramura curenta este `%1$s`, incerca %2$salta ramura%3$s." - -#: src/GitHub_Updater/Plugin.php:199 -msgid "View details" -msgstr "Vezi detalii" - -#: src/GitHub_Updater/Settings.php:68 src/GitHub_Updater/Settings.php:528 -msgid "Settings" -msgstr "Setari" - -#: src/GitHub_Updater/Settings.php:81 src/GitHub_Updater/Settings.php:89 -#: src/GitHub_Updater/Settings.php:172 -msgid "GitHub Updater Settings" -msgstr "Setari GitHub Updater" - -#. Plugin Name of the plugin/theme -#: src/GitHub_Updater/Settings.php:82 src/GitHub_Updater/Settings.php:90 -#: src/GitHub_Updater/Settings.php:127 -msgid "GitHub Updater" -msgstr "GitHub Updater" - -#: src/GitHub_Updater/Settings.php:131 -msgid "Saved." -msgstr "Salvat." - -#: src/GitHub_Updater/Settings.php:179 -msgid "Enable Plugin Branch Switching" -msgstr "Actieaza schimbarea ramurelor pentru Module" - -#: src/GitHub_Updater/Settings.php:191 -msgid "Personal GitHub Access Token" -msgstr "Jeton Personal de Acces GitHub" - -#: src/GitHub_Updater/Settings.php:211 -msgid "GitHub Private Settings" -msgstr "Setari Private GitHub" - -#: src/GitHub_Updater/Settings.php:224 -msgid "GitLab Private Settings" -msgstr "Setari Private GitLab" - -#: src/GitHub_Updater/Settings.php:233 -msgid "GitLab.com Private Token" -msgstr "Jetor Privat GitLab.com" - -#: src/GitHub_Updater/Settings.php:244 -msgid "GitLab CE or GitLab Enterprise Private Token" -msgstr "Jeton Privat GitLab CE sau GltLab Enterprise" - -#: src/GitHub_Updater/Settings.php:257 -msgid "Bitbucket Private Settings" -msgstr "Setari Private Bitbucket" - -#: src/GitHub_Updater/Settings.php:264 -msgid "Bitbucket Username" -msgstr "Utilizator Bitbucket" - -#: src/GitHub_Updater/Settings.php:273 -msgid "Bitbucket Password" -msgstr "Parola Bitbucket" - -#: src/GitHub_Updater/Settings.php:286 -msgid "Bitbucket Private Repositories" -msgstr "Repozitorii Private Bitbucket" - -#: src/GitHub_Updater/Settings.php:298 -msgid "No private repositories are installed." -msgstr "Nici un repozitoriu privat instalat." - -#: src/GitHub_Updater/Settings.php:357 -msgid "Theme:" -msgstr "Teme:" - -#: src/GitHub_Updater/Settings.php:433 -msgid "Check to enable branch switching from the Plugins page." -msgstr " Bifeaza pentru a activa schimbarea ramurelor de pe pagina Modulelor." - -#: src/GitHub_Updater/Settings.php:440 -msgid "Enter your GitHub Access Token. Leave empty for public repositories." -msgstr "Introdu Jetonul de Acces GitHub. Lasa gol pentru repozitorii publice." - -#: src/GitHub_Updater/Settings.php:447 -msgid "Enter your personal GitHub Access Token to avoid API access limits." -msgstr "" -"Introdu Jetonul Personal de Acces GitHub pentru a evita limitele de acces " -"API." - -#: src/GitHub_Updater/Settings.php:454 -msgid "" -"Check box if private repository. Leave unchecked for public repositories." -msgstr "Bifeaza daca repozitoriu privat. Lasa nebifat pentru cele publice." - -#: src/GitHub_Updater/Settings.php:461 -msgid "Enter your personal Bitbucket username and password." -msgstr "Introdu utilizatorul si parola pentru Bitbuchet" - -#: src/GitHub_Updater/Settings.php:468 -msgid "Enter your GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" -"Introdu Jetonul Personal pentru GitLab.com, GitLab CE sau GitLab Enterprise" - -#: src/GitHub_Updater/Theme.php:210 -msgid "Theme is up-to-date!" -msgstr "Tema e la zi!" - -#: src/GitHub_Updater/Theme.php:215 -msgid "Rollback to:" -msgstr "Revenire la:" - -#: src/GitHub_Updater/Theme.php:233 -msgid "No previous tags to rollback to." -msgstr "Nici o eticheta la care sa revii." - -#: src/GitHub_Updater/Theme.php:241 src/GitHub_Updater/Theme.php:255 -#, php-format -msgid "GitHub Updater shows a new version of %s available." -msgstr "GitHub Updater arata o noua versiune pentru %s disponibila." - -#: src/GitHub_Updater/Theme.php:248 -#, php-format -msgid "View version %s details." -msgstr "Vezi detaliile pentru versiunea %s." - -#: src/GitHub_Updater/Theme.php:252 -msgid "Automatic update is unavailable for this theme." -msgstr "Actualizarea automata nu este disponibila pentru aceasta tema." - -#: src/GitHub_Updater/Theme.php:262 src/GitHub_Updater/Theme.php:347 -#, php-format -msgid "View version %1$s details%2$s or %3$supdate now%4$s." -msgstr "Vezi versiunea %1$s detalii%2$s sau %3$sactualizeaza acum%4$s." - -#: src/GitHub_Updater/Theme.php:340 -#, php-format -msgid "There is a new version of %s available now." -msgstr "Exista o noua versiune pentru %s disponibila." - -#: src/GitHub_Updater/Theme.php:367 -#, php-format -msgid "Current version is up to date. Try %sanother version%s" -msgstr "Versiunea curenta este la zi. Incearca %salta versiune%s" - -#: src/GitHub_Updater/Theme.php:381 -msgid "Choose a Version" -msgstr "Alege o Versiune" - -#: src/GitHub_Updater/Theme.php:384 -msgid "Install" -msgstr "Instaleaza" - -#: vendor/WPUpdatePhp.php:24 -msgid "this plugin" -msgstr "acest modul" - -#: vendor/WPUpdatePhp.php:92 -#, php-format -msgid "Unfortunately, %1$s can not run on PHP versions older than %2$s." -msgstr "Din pacate, %1$s nu poate rula pe versiuni PHP mai vechi ca %2$s." - -#: vendor/WPUpdatePhp.php:94 vendor/WPUpdatePhp.php:110 -#, php-format -msgid "Read more information about %show you can update%s." -msgstr "Citeste mai multe informatii despre %scum poti actualiza%s." - -#: vendor/WPUpdatePhp.php:108 -#, php-format -msgid "%1$s recommends a PHP version greater than %2$s." -msgstr "%1$s recomanda o versiune PHP mai mare ca %2$s." - -#. Plugin URI of the plugin/theme -msgid "https://github.com/afragen/github-updater" -msgstr "https://github.com/afragen/github-updater" - -#. Description of the plugin/theme -msgid "" -"A plugin to automatically update GitHub, Bitbucket or GitLab hosted plugins " -"and themes. It also allows for remote installation of plugins or themes into " -"WordPress. Plugin class based upon codepress/github-plugin-updater. Theme class " -"based upon Whitelabel Framework modifications." -msgstr "" -"Un modul pentru a actualiza automat module sau teme gazduite pe GitHub, " -"Bitbucket sau GitLab. Permite, de asemenea, instalari de la distanta a " -"modulelor sau temelor in WordPress. Clasa modulului bazata pe codepress/github-" -"plugin-updater. Clasa temei bazata pe modificarile Whitelabel Framework." - -#. Author of the plugin/theme -msgid "Andy Fragen" -msgstr "Andy Fragen" diff --git a/github/languages/github-updater-ru_RU.mo b/github/languages/github-updater-ru_RU.mo deleted file mode 100644 index 8c792fe274569f1833b41a46f63d90c69dfb2a18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5641 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\n" -"Language-Team: \n" -"Language: ru_RU\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.1\n" -"X-Poedit-Basepath: ..\n" -"X-Poedit-WPHeader: github-updater.php\n" -"X-Poedit-SourceCharset: UTF-8\n" -"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;" -"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;" -"_nx_noop:3c,1,2;__ngettext_noop:1,2\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Poedit-SearchPath-0: .\n" -"X-Poedit-SearchPathExcluded-0: *.js\n" - -#: mu/ghu-loader.php:66 -msgid "Activated as mu-plugin" -msgstr "Активировать в mu-плагина" - -#: src/GitHub_Updater/Base.php:467 -#, php-format -msgid "Renaming %1$s to %2$s" -msgstr "Переименование %1$s в%2$s" - -#: src/GitHub_Updater/Base.php:477 -msgid "Rename successful" -msgstr "Успешно переименовано" - -#: src/GitHub_Updater/Base.php:484 -msgid "Unable to rename downloaded repository." -msgstr "Невозможно переименовать скачанный репозиторий." - -#: src/GitHub_Updater/Install.php:56 -msgid "A repository URI is required." -msgstr "Требуется адрес репозитория (URI)" - -#: src/GitHub_Updater/Install.php:194 src/GitHub_Updater/Settings.php:69 -msgid "Install Plugin" -msgstr "Установите плагин" - -#: src/GitHub_Updater/Install.php:197 src/GitHub_Updater/Settings.php:70 -msgid "Install Theme" -msgstr "Установите тему" - -#: src/GitHub_Updater/Install.php:214 -msgid "Plugin" -msgstr "Плагин" - -#: src/GitHub_Updater/Install.php:217 -msgid "Theme" -msgstr "Тема" - -#: src/GitHub_Updater/Install.php:228 -#, php-format -msgid "GitHub Updater Install %s" -msgstr "GitHub Updater Установка%s" - -#: src/GitHub_Updater/Install.php:235 -#, php-format -msgid "%s URI" -msgstr "%s URI" - -#: src/GitHub_Updater/Install.php:243 -msgid "Remote Repository Host" -msgstr "Хост удаленного репозитория" - -#: src/GitHub_Updater/Install.php:251 -msgid "Repository Branch" -msgstr "Ветка репозитория" - -#: src/GitHub_Updater/Install.php:259 -msgid "Private Bitbucket Repository" -msgstr "Приватный Bitbucket репозиторий" - -#: src/GitHub_Updater/Install.php:267 src/GitHub_Updater/Settings.php:198 -msgid "GitHub Access Token" -msgstr "GitHub Access Token" - -#: src/GitHub_Updater/Install.php:278 -msgid "GitLab Private Token" -msgstr "GitLab Private Token" - -#: src/GitHub_Updater/Install.php:306 -msgid "Enter branch name or leave empty for `master`" -msgstr "Введите имя ветки или оставьте пустым для `master`" - -#: src/GitHub_Updater/Install.php:348 -msgid "Enter GitHub Access Token for private GitHub repositories." -msgstr "Введите GitHub Access Token для приватных репозиториев GitHub." - -#: src/GitHub_Updater/Install.php:362 -msgid "Enter GitLab Private Token for private GitLab repositories." -msgstr "Введите GitLab Private Token для приватных репозиториев GitLab." - -#: src/GitHub_Updater/Messages.php:61 -#, php-format -msgid "%s was not checked. GitHub Updater Error Code:" -msgstr "%s не был проверен. GitHub Updater Error Code:" - -#: src/GitHub_Updater/Messages.php:69 -#, php-format -msgid "GitHub API's rate limit will reset in %s minutes." -msgstr "Ограничение скорости GitHub API будет сброшено через: %s (минут)" - -#: src/GitHub_Updater/Messages.php:74 -#, php-format -msgid "" -"It looks like you are running into GitHub API rate limits. Be sure and " -"configure a %sPersonal Access Token%s to avoid this issue." -msgstr "" - -#: src/GitHub_Updater/Messages.php:82 -msgid "There is probably an error on the GitHub Updater Settings page." -msgstr "" - -#: src/GitHub_Updater/Messages.php:95 -msgid "" -"You must set a GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" - -#: src/GitHub_Updater/Plugin.php:149 -#, php-format -msgid "Current branch is `%1$s`, try %2$sanother branch%3$s." -msgstr "" - -#: src/GitHub_Updater/Plugin.php:199 -msgid "View details" -msgstr "Подробнее" - -#: src/GitHub_Updater/Settings.php:68 src/GitHub_Updater/Settings.php:528 -msgid "Settings" -msgstr "Настройки" - -#: src/GitHub_Updater/Settings.php:81 src/GitHub_Updater/Settings.php:89 -#: src/GitHub_Updater/Settings.php:172 -msgid "GitHub Updater Settings" -msgstr "GitHub Updater Настройки" - -#. Plugin Name of the plugin/theme -#: src/GitHub_Updater/Settings.php:82 src/GitHub_Updater/Settings.php:90 -#: src/GitHub_Updater/Settings.php:127 -msgid "GitHub Updater" -msgstr "GitHub Updater" - -#: src/GitHub_Updater/Settings.php:131 -msgid "Saved." -msgstr "Сохранено" - -#: src/GitHub_Updater/Settings.php:179 -msgid "Enable Plugin Branch Switching" -msgstr "Включить переключатель веток для плагинов" - -#: src/GitHub_Updater/Settings.php:191 -msgid "Personal GitHub Access Token" -msgstr "Персональный GitHub Access Token" - -#: src/GitHub_Updater/Settings.php:211 -msgid "GitHub Private Settings" -msgstr "GitHub Private Настройки" - -#: src/GitHub_Updater/Settings.php:224 -msgid "GitLab Private Settings" -msgstr "GitHub Private Настройки" - -#: src/GitHub_Updater/Settings.php:233 -msgid "GitLab.com Private Token" -msgstr "" - -#: src/GitHub_Updater/Settings.php:244 -msgid "GitLab CE or GitLab Enterprise Private Token" -msgstr "" - -#: src/GitHub_Updater/Settings.php:257 -msgid "Bitbucket Private Settings" -msgstr "" - -#: src/GitHub_Updater/Settings.php:264 -msgid "Bitbucket Username" -msgstr "Bitbucket Имя пользователя" - -#: src/GitHub_Updater/Settings.php:273 -msgid "Bitbucket Password" -msgstr "" - -#: src/GitHub_Updater/Settings.php:286 -msgid "Bitbucket Private Repositories" -msgstr "" - -#: src/GitHub_Updater/Settings.php:298 -msgid "No private repositories are installed." -msgstr "Никакие частные репозитории не установлены." - -#: src/GitHub_Updater/Settings.php:357 -msgid "Theme:" -msgstr "Тема:" - -#: src/GitHub_Updater/Settings.php:433 -msgid "Check to enable branch switching from the Plugins page." -msgstr "" - -#: src/GitHub_Updater/Settings.php:440 -msgid "Enter your GitHub Access Token. Leave empty for public repositories." -msgstr "" - -#: src/GitHub_Updater/Settings.php:447 -msgid "Enter your personal GitHub Access Token to avoid API access limits." -msgstr "" - -#: src/GitHub_Updater/Settings.php:454 -msgid "" -"Check box if private repository. Leave unchecked for public repositories." -msgstr "" - -#: src/GitHub_Updater/Settings.php:461 -msgid "Enter your personal Bitbucket username and password." -msgstr "Введите ваши личные имя пользователя и пароль от Bitbucket." - -#: src/GitHub_Updater/Settings.php:468 -msgid "Enter your GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" - -#: src/GitHub_Updater/Theme.php:210 -msgid "Theme is up-to-date!" -msgstr "Обновление не требуется" - -#: src/GitHub_Updater/Theme.php:215 -msgid "Rollback to:" -msgstr "Откат к:" - -#: src/GitHub_Updater/Theme.php:233 -msgid "No previous tags to rollback to." -msgstr "" - -#: src/GitHub_Updater/Theme.php:241 src/GitHub_Updater/Theme.php:255 -#, php-format -msgid "GitHub Updater shows a new version of %s available." -msgstr "" - -#: src/GitHub_Updater/Theme.php:248 -#, php-format -msgid "View version %s details." -msgstr "" - -#: src/GitHub_Updater/Theme.php:252 -msgid "Automatic update is unavailable for this theme." -msgstr "Автоматическое обновление недоступно для этой темы." - -#: src/GitHub_Updater/Theme.php:262 src/GitHub_Updater/Theme.php:347 -#, php-format -msgid "View version %1$s details%2$s or %3$supdate now%4$s." -msgstr "" - -#: src/GitHub_Updater/Theme.php:340 -#, php-format -msgid "There is a new version of %s available now." -msgstr "" - -#: src/GitHub_Updater/Theme.php:367 -#, php-format -msgid "Current version is up to date. Try %sanother version%s" -msgstr "" - -#: src/GitHub_Updater/Theme.php:381 -msgid "Choose a Version" -msgstr "Выберите версию" - -#: src/GitHub_Updater/Theme.php:384 -msgid "Install" -msgstr "Установить" - -#: vendor/WPUpdatePhp.php:24 -msgid "this plugin" -msgstr "этот плагин" - -#: vendor/WPUpdatePhp.php:92 -#, php-format -msgid "Unfortunately, %1$s can not run on PHP versions older than %2$s." -msgstr "" - -#: vendor/WPUpdatePhp.php:94 vendor/WPUpdatePhp.php:110 -#, php-format -msgid "Read more information about %show you can update%s." -msgstr "" - -#: vendor/WPUpdatePhp.php:108 -#, php-format -msgid "%1$s recommends a PHP version greater than %2$s." -msgstr "" - -#. Plugin URI of the plugin/theme -msgid "https://github.com/afragen/github-updater" -msgstr "https://github.com/afragen/github-updater" - -#. Description of the plugin/theme -msgid "" -"A plugin to automatically update GitHub, Bitbucket or GitLab hosted plugins " -"and themes. It also allows for remote installation of plugins or themes into " -"WordPress. Plugin class based upon codepress/github-plugin-updater. Theme class " -"based upon Whitelabel Framework modifications." -msgstr "" -"Плагин автоматического обновления из GitHub, Bitbucket или GitLab для " -"плагинов и тем. Она также позволяет установить плагин или тему в WordPress. " -"Механизм обновления плагинов основан на codepress / GitHub-плагина-Update . " -"Обновление тем основано Whitelabel Framework модификаций." - -#. Author of the plugin/theme -msgid "Andy Fragen" -msgstr "Andy Fragen" diff --git a/github/languages/github-updater-sv_SE.mo b/github/languages/github-updater-sv_SE.mo deleted file mode 100644 index 92a4aca167e98b4d02156d710a83f3084850ea07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3322 zcmb7`&u<(x6vs^|{jorS@}rcWE``#F&gKVc6>XY|G)>wl+Y%+4iUZQtJLAkwGi#5= zo-}&`BraSK5<=nvry$fThX^4q)e6oW5Xb%x9Jp}e`#j#=6fKn)W#==tpZ%WSd-luy z;|ITDcuwQ@3Vzd%Fg6a>58#F8$fJzC03HP&2RTUN=fLCOhu~|V244a{_x*RlWwd_= zp9T*dWUL0B00VFhyaIj{bn zJ6ihXEO;61Y4Anx4)_-M1^6ns2a-L%gG=C_Ao*pcg1v#u;5_&d_#SuExG7 z;2Yo?NPa1N`%@62?0b;pegK~We+4N{e}Hd-hn^_q-T|LS`+{d3q&T)fh_V7CKYs#} zp3gw?%hw>S|E+KT08(6j1joSNK%|b#1&Yfl{OG|p8A9qFn%{qD?_?+C%*(!${7JgV z9*PP1i){Yw9eKoy>OK3b#7KK*KGssH=;S+WK1< zP8?}|snRWyVFOx;lnczn3#ZIum-PF zc0W|Ej>HTa@PSDMPGybb2FQDNaVgXb6~)+Er7l!l;6?}V7TJGaqT3TB3KWYDI}gGCkU2p2+)&$JR- z`5?F|mCQ>^SG9~1%O|Td)k%z$&ET>yG8494kL9FMF6W=o(Fly?F`B68l_&2dC= z;%Hvn+f{Lz#FlUN_HrJc?(w`Zh+i_5XW;YG^R$rtXR_jc1%l?%HShEjB+ z{P*a*+J@>#P?f-iP0EK;SMshgSfA?YLT=2!skaus8#o2FQG#I5?E4lm%B@w4C>URI32*(}o(5?obrOzt*`LZPHWuf2b8;D#O)eea^ekJ#-)BUsA! zr}fLpsA&3?_luyiAT|5N1)naMNA2b)5+20X0`;v zNr_r5s5Tg>u@zj#R1R_0qTXJHZ0+ELssB-2 F{sB#6%me@c diff --git a/github/languages/github-updater-sv_SE.po b/github/languages/github-updater-sv_SE.po deleted file mode 100644 index b042364..0000000 --- a/github/languages/github-updater-sv_SE.po +++ /dev/null @@ -1,363 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: GitHub Updater\n" -"POT-Creation-Date: 2015-06-08 20:21-0800\n" -"PO-Revision-Date: 2015-06-08 20:21-0800\n" -"Last-Translator: Andréas Lundgren\n" -"Language-Team: Andréas Lundgren\n" -"Language: sv_SE\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.1\n" -"X-Poedit-Basepath: ..\n" -"X-Poedit-SourceCharset: UTF-8\n" -"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;" -"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;" -"_nx_noop:3c,1,2;__ngettext_noop:1,2\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Poedit-SearchPath-0: .\n" - -#: mu/ghu-loader.php:66 -msgid "Activated as mu-plugin" -msgstr "Aktiverad som mu-tillägg" - -#: src/GitHub_Updater/Base.php:467 -#, fuzzy, php-format -msgid "Renaming %1$s to %2$s" -msgstr "Döper om %s till %s" - -#: src/GitHub_Updater/Base.php:477 -msgid "Rename successful" -msgstr "Namnbytet lyckades" - -#: src/GitHub_Updater/Base.php:484 -msgid "Unable to rename downloaded repository." -msgstr "Kunde inte döpa om den" - -#: src/GitHub_Updater/Install.php:56 -msgid "A repository URI is required." -msgstr "" - -#: src/GitHub_Updater/Install.php:194 src/GitHub_Updater/Settings.php:69 -msgid "Install Plugin" -msgstr "Installera tillägg" - -#: src/GitHub_Updater/Install.php:197 src/GitHub_Updater/Settings.php:70 -msgid "Install Theme" -msgstr "Installera tema" - -#: src/GitHub_Updater/Install.php:214 -msgid "Plugin" -msgstr "Tilläggs-" - -#: src/GitHub_Updater/Install.php:217 -msgid "Theme" -msgstr "Tema-" - -#: src/GitHub_Updater/Install.php:228 -#, fuzzy, php-format -msgid "GitHub Updater Install %s" -msgstr "GitHub Updater-installera" - -#: src/GitHub_Updater/Install.php:235 -#, php-format -msgid "%s URI" -msgstr "" - -#: src/GitHub_Updater/Install.php:243 -msgid "Remote Repository Host" -msgstr "Fjärrvärd för repo" - -#: src/GitHub_Updater/Install.php:251 -msgid "Repository Branch" -msgstr "Repo branch" - -#: src/GitHub_Updater/Install.php:259 -msgid "Private Bitbucket Repository" -msgstr "Privat Bitbucket repo" - -#: src/GitHub_Updater/Install.php:267 src/GitHub_Updater/Settings.php:198 -msgid "GitHub Access Token" -msgstr "GitHub Access Token" - -#: src/GitHub_Updater/Install.php:278 -#, fuzzy -msgid "GitLab Private Token" -msgstr "Privata inställningar för GitHub" - -#: src/GitHub_Updater/Install.php:306 -msgid "Enter branch name or leave empty for `master`" -msgstr "Fyll i ett branch-namn eller lämna tomt för master" - -#: src/GitHub_Updater/Install.php:348 -msgid "Enter GitHub Access Token for private GitHub repositories." -msgstr "Fyll i GitHub Access Token för privata GitHub repos." - -#: src/GitHub_Updater/Install.php:362 -#, fuzzy -msgid "Enter GitLab Private Token for private GitLab repositories." -msgstr "Fyll i GitHub Access Token för privata GitHub repos." - -#: src/GitHub_Updater/Messages.php:61 -#, fuzzy, php-format -msgid "%s was not checked. GitHub Updater Error Code:" -msgstr "%1$s har inte kontrollerats. GitHub Updater felkod: %2$s" - -#: src/GitHub_Updater/Messages.php:69 -#, fuzzy, php-format -msgid "GitHub API's rate limit will reset in %s minutes." -msgstr "Gränsen för GitHub API återställs %1$s minuter." - -#: src/GitHub_Updater/Messages.php:74 -#, php-format -msgid "" -"It looks like you are running into GitHub API rate limits. Be sure and " -"configure a %sPersonal Access Token%s to avoid this issue." -msgstr "" - -#: src/GitHub_Updater/Messages.php:82 -msgid "There is probably an error on the GitHub Updater Settings page." -msgstr "" - -#: src/GitHub_Updater/Messages.php:95 -msgid "" -"You must set a GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" - -#: src/GitHub_Updater/Plugin.php:149 -#, fuzzy, php-format -msgid "Current branch is `%1$s`, try %2$sanother branch%3$s." -msgstr "Nuvarande version är aktuell. Testa" - -#: src/GitHub_Updater/Plugin.php:199 -#, fuzzy -msgid "View details" -msgstr " " - -#: src/GitHub_Updater/Settings.php:68 src/GitHub_Updater/Settings.php:528 -msgid "Settings" -msgstr "Inställningar" - -#: src/GitHub_Updater/Settings.php:81 src/GitHub_Updater/Settings.php:89 -#: src/GitHub_Updater/Settings.php:172 -msgid "GitHub Updater Settings" -msgstr "Inställningar för GitHub Updater" - -#. Plugin Name of the plugin/theme -#: src/GitHub_Updater/Settings.php:82 src/GitHub_Updater/Settings.php:90 -#: src/GitHub_Updater/Settings.php:127 -msgid "GitHub Updater" -msgstr "GitHub Updater" - -#: src/GitHub_Updater/Settings.php:131 -msgid "Saved." -msgstr "Sparat." - -#: src/GitHub_Updater/Settings.php:179 -msgid "Enable Plugin Branch Switching" -msgstr "" - -#: src/GitHub_Updater/Settings.php:191 -#, fuzzy -msgid "Personal GitHub Access Token" -msgstr "GitHub Access Token" - -#: src/GitHub_Updater/Settings.php:211 -msgid "GitHub Private Settings" -msgstr "Privata inställningar för GitHub" - -#: src/GitHub_Updater/Settings.php:224 -#, fuzzy -msgid "GitLab Private Settings" -msgstr "Privata inställningar för GitHub" - -#: src/GitHub_Updater/Settings.php:233 -#, fuzzy -msgid "GitLab.com Private Token" -msgstr "Privata inställningar för GitHub" - -#: src/GitHub_Updater/Settings.php:244 -msgid "GitLab CE or GitLab Enterprise Private Token" -msgstr "" - -#: src/GitHub_Updater/Settings.php:257 -msgid "Bitbucket Private Settings" -msgstr "Inställningar för Bitbucket" - -#: src/GitHub_Updater/Settings.php:264 -msgid "Bitbucket Username" -msgstr "Användarnamn för Bitbucket" - -#: src/GitHub_Updater/Settings.php:273 -msgid "Bitbucket Password" -msgstr "Lösenord för Bitbucket" - -#: src/GitHub_Updater/Settings.php:286 -msgid "Bitbucket Private Repositories" -msgstr "Privata inställningar för Bitbucket" - -#: src/GitHub_Updater/Settings.php:298 -msgid "No private repositories are installed." -msgstr "Inga privata repos är installerade." - -#: src/GitHub_Updater/Settings.php:357 -msgid "Theme:" -msgstr "Tema:" - -#: src/GitHub_Updater/Settings.php:433 -msgid "Check to enable branch switching from the Plugins page." -msgstr "" - -#: src/GitHub_Updater/Settings.php:440 -msgid "Enter your GitHub Access Token. Leave empty for public repositories." -msgstr "Fyll i ditt GitHub Access Token. Lämna tomt för publika repos." - -#: src/GitHub_Updater/Settings.php:447 -#, fuzzy -msgid "Enter your personal GitHub Access Token to avoid API access limits." -msgstr "Fyll i ditt GitHub Access Token. Lämna tomt för publika repos." - -#: src/GitHub_Updater/Settings.php:454 -msgid "" -"Check box if private repository. Leave unchecked for public repositories." -msgstr "Kryssa i boxen för privata repos. Lämna okryssad för publika repos." - -#: src/GitHub_Updater/Settings.php:461 -msgid "Enter your personal Bitbucket username and password." -msgstr "Fyll i inloggningsinformation för din Bitbucketanvändare." - -#: src/GitHub_Updater/Settings.php:468 -msgid "Enter your GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" - -#: src/GitHub_Updater/Theme.php:210 -msgid "Theme is up-to-date!" -msgstr "Temat är aktuellt!" - -#: src/GitHub_Updater/Theme.php:215 -#, fuzzy -msgid "Rollback to:" -msgstr "%sGå tillbaka till:%s" - -#: src/GitHub_Updater/Theme.php:233 -msgid "No previous tags to rollback to." -msgstr "Inga föregående taggar att gå tillbaka till." - -#: src/GitHub_Updater/Theme.php:241 src/GitHub_Updater/Theme.php:255 -#, fuzzy, php-format -msgid "GitHub Updater shows a new version of %s available." -msgstr "GitHub Updater visar att det finns en ny version av %1$s tillgänglig." - -#: src/GitHub_Updater/Theme.php:248 -#, fuzzy, php-format -msgid "View version %s details." -msgstr "Visa detaljer för version %4$s" - -#: src/GitHub_Updater/Theme.php:252 -msgid "Automatic update is unavailable for this theme." -msgstr "Automatiska uppdateringar är inte tillgängligt för detta temat." - -#: src/GitHub_Updater/Theme.php:262 src/GitHub_Updater/Theme.php:347 -#, fuzzy, php-format -msgid "View version %1$s details%2$s or %3$supdate now%4$s." -msgstr "" -"Visa detaljer för version %3$s eller uppdatera " -"nu." - -#: src/GitHub_Updater/Theme.php:340 -#, fuzzy, php-format -msgid "There is a new version of %s available now." -msgstr "Det finns en ny version av" - -#: src/GitHub_Updater/Theme.php:367 -#, fuzzy, php-format -msgid "Current version is up to date. Try %sanother version%s" -msgstr "Nuvarande version är aktuell. Testa" - -#: src/GitHub_Updater/Theme.php:381 -msgid "Choose a Version" -msgstr "Välj en version" - -#: src/GitHub_Updater/Theme.php:384 -msgid "Install" -msgstr "Installera" - -#: vendor/WPUpdatePhp.php:24 -#, fuzzy -msgid "this plugin" -msgstr "Tilläggs-" - -#: vendor/WPUpdatePhp.php:92 -#, php-format -msgid "Unfortunately, %1$s can not run on PHP versions older than %2$s." -msgstr "" - -#: vendor/WPUpdatePhp.php:94 vendor/WPUpdatePhp.php:110 -#, php-format -msgid "Read more information about %show you can update%s." -msgstr "" - -#: vendor/WPUpdatePhp.php:108 -#, php-format -msgid "%1$s recommends a PHP version greater than %2$s." -msgstr "" - -#. Plugin URI of the plugin/theme -msgid "https://github.com/afragen/github-updater" -msgstr "https://github.com/afragen/github-updater" - -#. Description of the plugin/theme -#, fuzzy -msgid "" -"A plugin to automatically update GitHub, Bitbucket or GitLab hosted plugins " -"and themes. It also allows for remote installation of plugins or themes into " -"WordPress. Plugin class based upon codepress/github-plugin-updater. Theme class " -"based upon Whitelabel Framework modifications." -msgstr "" -"Ett tillägg för att automatiskt uppdatera teman och tillägg från GitHub " -"eller Bitbucket direkt i WordPress. Tilläggsklassen baserad på codepress/github-" -"plugin-updater. Temaklassen baserad på modifikationer av Whitelabel " -"Framework." - -#. Author of the plugin/theme -msgid "Andy Fragen" -msgstr "Andy Fragen" - -#~ msgid "" -#~ "No changelog is available via GitHub Updater. Create a file CHANGES." -#~ "md or CHANGELOG.md in your repository." -#~ msgstr "" -#~ "Ingen changelog finns tillgänglig via GitHub Updater. Skapa CHANGES." -#~ "md eller CHANGELOG.md i din repo." - -#~ msgid "%sView version %s details%s or %supdate now%s." -#~ msgstr "%sVisa detaljer för version %s %s eller %suppdatera nu%s." - -#~ msgid "URI" -#~ msgstr "URI" - -#~ msgid "available now." -#~ msgstr "tillgänglig." - -#~ msgid "View version" -#~ msgstr "Visa detaljer för version" - -#~ msgid "or" -#~ msgstr "eller" - -#~ msgid "update now" -#~ msgstr "uppdatera nu" - -#~ msgid "another version?" -#~ msgstr "en annan version?" - -#~ msgid "was not checked." -#~ msgstr "kunde inte kontrolleras. " - -#~ msgid "GitHub Updater Error Code:" -#~ msgstr "GitHub Updater felkod:" diff --git a/github/languages/github-updater-uk.mo b/github/languages/github-updater-uk.mo deleted file mode 100644 index 031cd4d2c0bb8d9f51a72513a47e7d3a10faee18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3712 zcmb7G+iw(A7(XhgR6)f%q8>t|5SZ<5LBuW9aHmqRDTR>uu*}Y$cE|3{Y-Y}sF2QhV zxR@X)f#QonjPcF5lom^&nWKXaIi!t_RMX!PpAmTfk?5`+;+SXXE}Cz=zPEipOsNXQTfUkOTh&E&|S& z$=HLyr9jHF75D_OBgS{)`6BRPj7uQ?*n9YS3OEF$^&bP9f#-lrfZqVW!XEztE=2!4 z7C#NV4%`L&4M_1;%!=%{0AE8t04@f82|Nz`8TbOwYGSMxxF5I|_!lq_G(jry@I8?B ze-lV~%y~4*ZzXU6`dff61B*b4^8s)Z@H!BGY&OVA0OtXh0y|<1fKQ@-9{3z^42YE2 z4?yDY*SLQZ*opouB(Vgz69_42-&9wsAw4hRB_3eT9>WV7^aH9ipVWCCFKK`t(grBh zH9_fhY(VXyJrh5qz3M~t01bM-G)8%IytEI}1n~~~7$l${(hpl>NqfMQBF9ai7XzbI z2>NV?t#NW?zR@%L1loagi>9G z)h{IPGJSuK>*X4UJROdAi<0Zx()DcN-(h;YkkWSg8mD&n!gI``VC(Y2>gQQ^klVey z6#Mh4{>lm7Da-+Z6fH8u&M3iBkS$;bH8X@wz?19xf}4D&@O;~K*ak-mk7qp-YdHnu zSX$8TM6o2x+STr&>BDSyY+ZH(k8iT&<{-=0SeEd8-sAQQr~`LTV=^WZ^ny zf!7%f;!ShY$?;N5XM)Ayy5h~(*owz@=sI~-v$)G^W*v?%%|e02$h)GVSGzq_N4Cuc zxnjU}160=R!;i~7w@}EMU|+h4$RMg_Bdy%@Adx77$R$|pyjv7qXs1^9GT-d_l64DB zvma>YdV>N+Vr7*1T3raX9p!|hTKZ9b`d4eQWJuQ_WiDWPFwJ&2TA7q_H==?ic|jUHhZ?>3p{L4VWMj;$N&X{Qp&rgbiq?!bGwgfyiXlr5!# zX*+G)%A1}qWc!YujmE0F9c9rgJY$1nxjCH7G+&jqWz#NWlW>F=rPt+(oGp1Ou_}?m zOw={jn!YHRGN0y&M16ESPK_njMZwZMidI{*MU?5@@H=f^rg+Ljq4 zurN|>ID_dG)-swCzLhbh^su1T6!m7jfTr@YSct83GqTdnn%j)yx}_+lGZ=N2M{zP4 zrws(HQN_EucVUg?J2%!5vOKyL3=92-{eUS zbM)V6Z>>(PZeKx7y&}0fmE`;OMN43lT!J+ztZ7}+)~H4z?C z<7y-vQX{HDZ62Of6AhQVI-@4lXgJK(=ivcWQ5V&inxvH@u%1#^qgCNiSdDQEOyV6; zSIA0Dh9^0Vt5G!-9t;m5$~7|J7`TGD@JKiuo(|7)xEh12@y720Oe=^u1S&Y52JQ~)NaNxAs#3oUnfe4tUV+^)9SS{A(K7p(e zHO`!3A5|5kg0)}6DY}&RGR+vWn3|px*q9!1EWy=To!mGjM|5eGSP<$8OP6HUg7N*oCC7+$cOkCbFqL_2^xp>gU$k)f>uq-}Fp05(+JVwoeW3ZCL=}BtZ~3s^-N!B8 zV|7Y%OR}YtG*0w`kAOU?71SS|&{XKttWQ=rMB(X(Rl?KywEg%I zR*lq{jx;erGD4k5+>m%hjbiJ=NMkfsDjkQ|HAxro>W8o@=aFfdMi;>t{G4k{_7tK+ zgOse+d~_P8`KxepPR?j8)C9xJ*a0q<=(a*mbit5BaZZNAW0WLQpTZ(KQbZkug;19{ zuB+Qr&mi{;vFA%s8h0->gEJ5q4yBp;j9MfTeSRZS!BWH37am{GxFF)51b#&mh?92h aPFq3@T)+o$dh}hR{ZAtWME?JONB#v)*#5r& diff --git a/github/languages/github-updater-uk.po b/github/languages/github-updater-uk.po deleted file mode 100644 index dceea9d..0000000 --- a/github/languages/github-updater-uk.po +++ /dev/null @@ -1,365 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: GitHub Updater\n" -"POT-Creation-Date: 2015-06-08 20:21-0800\n" -"PO-Revision-Date: 2015-06-08 20:21-0800\n" -"Last-Translator: Andrii Ryzhkv\n" -"Language-Team: Andrii Ryzhkv\n" -"Language: uk\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.1\n" -"X-Poedit-Basepath: ..\n" -"X-Poedit-SourceCharset: UTF-8\n" -"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;" -"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;" -"_nx_noop:3c,1,2;__ngettext_noop:1,2\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Poedit-SearchPath-0: .\n" - -#: mu/ghu-loader.php:66 -msgid "Activated as mu-plugin" -msgstr "Активувати як mu-plugin" - -#: src/GitHub_Updater/Base.php:467 -#, fuzzy, php-format -msgid "Renaming %1$s to %2$s" -msgstr "Перейменування %s в %s" - -#: src/GitHub_Updater/Base.php:477 -msgid "Rename successful" -msgstr "Перейменування успішне" - -#: src/GitHub_Updater/Base.php:484 -msgid "Unable to rename downloaded repository." -msgstr "Неможливо перейменувати скачане сховище." - -#: src/GitHub_Updater/Install.php:56 -#, fuzzy -msgid "A repository URI is required." -msgstr "Неможливо перейменувати скачане сховище." - -#: src/GitHub_Updater/Install.php:194 src/GitHub_Updater/Settings.php:69 -msgid "Install Plugin" -msgstr "Встановити плагін" - -#: src/GitHub_Updater/Install.php:197 src/GitHub_Updater/Settings.php:70 -msgid "Install Theme" -msgstr "Інсталювати тему" - -#: src/GitHub_Updater/Install.php:214 -msgid "Plugin" -msgstr "Плагін" - -#: src/GitHub_Updater/Install.php:217 -msgid "Theme" -msgstr "тему:" - -#: src/GitHub_Updater/Install.php:228 -#, fuzzy, php-format -msgid "GitHub Updater Install %s" -msgstr "GitHub Updater" - -#: src/GitHub_Updater/Install.php:235 -#, fuzzy, php-format -msgid "%s URI" -msgstr "%sВідкат до:%s" - -#: src/GitHub_Updater/Install.php:243 -msgid "Remote Repository Host" -msgstr "Віддаленого сховища хост" - -#: src/GitHub_Updater/Install.php:251 -msgid "Repository Branch" -msgstr "Репозиторій відділення" - -#: src/GitHub_Updater/Install.php:259 -#, fuzzy -msgid "Private Bitbucket Repository" -msgstr "Приватні сховища Bitbucket" - -#: src/GitHub_Updater/Install.php:267 src/GitHub_Updater/Settings.php:198 -msgid "GitHub Access Token" -msgstr "" - -#: src/GitHub_Updater/Install.php:278 -#, fuzzy -msgid "GitLab Private Token" -msgstr "Налаштування приватного GitHub" - -#: src/GitHub_Updater/Install.php:306 -msgid "Enter branch name or leave empty for `master`" -msgstr "Введіть ім'я відділення або Залиште пустим для 'майстер'" - -#: src/GitHub_Updater/Install.php:348 -#, fuzzy -msgid "Enter GitHub Access Token for private GitHub repositories." -msgstr "Введіть маркер доступу GitHub . Залиште порожнім для публічних сховищ." - -#: src/GitHub_Updater/Install.php:362 -#, fuzzy -msgid "Enter GitLab Private Token for private GitLab repositories." -msgstr "Введіть маркер доступу GitHub. Залиште порожнім для публічних сховищ." - -#: src/GitHub_Updater/Messages.php:61 -#, fuzzy, php-format -msgid "%s was not checked. GitHub Updater Error Code:" -msgstr "%1$s не перевірив. GitHub Updater код помилки: %2$s" - -#: src/GitHub_Updater/Messages.php:69 -#, fuzzy, php-format -msgid "GitHub API's rate limit will reset in %s minutes." -msgstr "Обмеження частоти GitHub API буде скинути в %1$s хвилин." - -#: src/GitHub_Updater/Messages.php:74 -#, php-format -msgid "" -"It looks like you are running into GitHub API rate limits. Be sure and " -"configure a %sPersonal Access Token%s to avoid this issue." -msgstr "" - -#: src/GitHub_Updater/Messages.php:82 -msgid "There is probably an error on the GitHub Updater Settings page." -msgstr "" - -#: src/GitHub_Updater/Messages.php:95 -msgid "" -"You must set a GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" - -#: src/GitHub_Updater/Plugin.php:149 -#, fuzzy, php-format -msgid "Current branch is `%1$s`, try %2$sanother branch%3$s." -msgstr "Поточна версія остання. Спробуйте" - -#: src/GitHub_Updater/Plugin.php:199 -#, fuzzy -msgid "View details" -msgstr "Переглянути подробиці версії %4$s" - -#: src/GitHub_Updater/Settings.php:68 src/GitHub_Updater/Settings.php:528 -msgid "Settings" -msgstr "Налаштування" - -#: src/GitHub_Updater/Settings.php:81 src/GitHub_Updater/Settings.php:89 -#: src/GitHub_Updater/Settings.php:172 -msgid "GitHub Updater Settings" -msgstr "Налаштування GitHub Updater" - -#. Plugin Name of the plugin/theme -#: src/GitHub_Updater/Settings.php:82 src/GitHub_Updater/Settings.php:90 -#: src/GitHub_Updater/Settings.php:127 -msgid "GitHub Updater" -msgstr "GitHub Updater" - -#: src/GitHub_Updater/Settings.php:131 -msgid "Saved." -msgstr "Збережено." - -#: src/GitHub_Updater/Settings.php:179 -msgid "Enable Plugin Branch Switching" -msgstr "" - -#: src/GitHub_Updater/Settings.php:191 -msgid "Personal GitHub Access Token" -msgstr "" - -#: src/GitHub_Updater/Settings.php:211 -msgid "GitHub Private Settings" -msgstr "Налаштування приватного GitHub" - -#: src/GitHub_Updater/Settings.php:224 -#, fuzzy -msgid "GitLab Private Settings" -msgstr "Налаштування приватного GitHub" - -#: src/GitHub_Updater/Settings.php:233 -#, fuzzy -msgid "GitLab.com Private Token" -msgstr "Налаштування приватного GitHub" - -#: src/GitHub_Updater/Settings.php:244 -msgid "GitLab CE or GitLab Enterprise Private Token" -msgstr "" - -#: src/GitHub_Updater/Settings.php:257 -msgid "Bitbucket Private Settings" -msgstr "Налаштування приватного Bitbucket" - -#: src/GitHub_Updater/Settings.php:264 -msgid "Bitbucket Username" -msgstr "Bitbucket ім'я користувача" - -#: src/GitHub_Updater/Settings.php:273 -msgid "Bitbucket Password" -msgstr "Bitbucket пароль" - -#: src/GitHub_Updater/Settings.php:286 -msgid "Bitbucket Private Repositories" -msgstr "Приватні сховища Bitbucket" - -#: src/GitHub_Updater/Settings.php:298 -msgid "No private repositories are installed." -msgstr "Жодне приватне сховище не встановлене." - -#: src/GitHub_Updater/Settings.php:357 -msgid "Theme:" -msgstr "тему:" - -#: src/GitHub_Updater/Settings.php:433 -msgid "Check to enable branch switching from the Plugins page." -msgstr "" - -#: src/GitHub_Updater/Settings.php:440 -msgid "Enter your GitHub Access Token. Leave empty for public repositories." -msgstr "Введіть маркер доступу GitHub. Залиште порожнім для публічних сховищ." - -#: src/GitHub_Updater/Settings.php:447 -#, fuzzy -msgid "Enter your personal GitHub Access Token to avoid API access limits." -msgstr "Введіть маркер доступу GitHub. Залиште порожнім для публічних сховищ." - -#: src/GitHub_Updater/Settings.php:454 -msgid "" -"Check box if private repository. Leave unchecked for public repositories." -msgstr "" -"Позначте, якщо сховище приватне. Залиште не позначеним для публічних сховищ." - -#: src/GitHub_Updater/Settings.php:461 -msgid "Enter your personal Bitbucket username and password." -msgstr "Введіть ваші особисті BitBucket ім'я користувача та пароль." - -#: src/GitHub_Updater/Settings.php:468 -msgid "Enter your GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" - -#: src/GitHub_Updater/Theme.php:210 -msgid "Theme is up-to-date!" -msgstr "Тема не має оновлень!" - -#: src/GitHub_Updater/Theme.php:215 -#, fuzzy -msgid "Rollback to:" -msgstr "%sВідкат до:%s" - -#: src/GitHub_Updater/Theme.php:233 -msgid "No previous tags to rollback to." -msgstr "Немає теґів для відкату назад." - -#: src/GitHub_Updater/Theme.php:241 src/GitHub_Updater/Theme.php:255 -#, fuzzy, php-format -msgid "GitHub Updater shows a new version of %s available." -msgstr "GitHub Updater показує, що доступна нова версія %1$s. " - -#: src/GitHub_Updater/Theme.php:248 -#, fuzzy, php-format -msgid "View version %s details." -msgstr "Переглянути подробиці версії %4$s" - -#: src/GitHub_Updater/Theme.php:252 -msgid "Automatic update is unavailable for this theme." -msgstr "Автоматичне оновлення недоступно для цієї теми." - -#: src/GitHub_Updater/Theme.php:262 src/GitHub_Updater/Theme.php:347 -#, fuzzy, php-format -msgid "View version %1$s details%2$s or %3$supdate now%4$s." -msgstr "%4$sПереглянути подробиці версії %5$s або %6$sоновити зараз%7$s ." - -#: src/GitHub_Updater/Theme.php:340 -#, fuzzy, php-format -msgid "There is a new version of %s available now." -msgstr "Нова версія" - -#: src/GitHub_Updater/Theme.php:367 -#, fuzzy, php-format -msgid "Current version is up to date. Try %sanother version%s" -msgstr "Поточна версія остання. Спробуйте" - -#: src/GitHub_Updater/Theme.php:381 -msgid "Choose a Version" -msgstr "Вибрати версію" - -#: src/GitHub_Updater/Theme.php:384 -msgid "Install" -msgstr "Встановити" - -#: vendor/WPUpdatePhp.php:24 -#, fuzzy -msgid "this plugin" -msgstr "Плагін" - -#: vendor/WPUpdatePhp.php:92 -#, php-format -msgid "Unfortunately, %1$s can not run on PHP versions older than %2$s." -msgstr "" - -#: vendor/WPUpdatePhp.php:94 vendor/WPUpdatePhp.php:110 -#, php-format -msgid "Read more information about %show you can update%s." -msgstr "" - -#: vendor/WPUpdatePhp.php:108 -#, php-format -msgid "%1$s recommends a PHP version greater than %2$s." -msgstr "" - -#. Plugin URI of the plugin/theme -msgid "https://github.com/afragen/github-updater" -msgstr "https://github.com/afragen/github-updater" - -#. Description of the plugin/theme -#, fuzzy -msgid "" -"A plugin to automatically update GitHub, Bitbucket or GitLab hosted plugins " -"and themes. It also allows for remote installation of plugins or themes into " -"WordPress. Plugin class based upon codepress/github-plugin-updater. Theme class " -"based upon Whitelabel Framework modifications." -msgstr "" -"Плаґін для автоматичного оновлення плаґінів та тем WordPress, які " -"розміщуються на GitHub або BitBucket. Клас плаґіну основано на codepress / GitHub-" -"Plugin-Updater . Клас теми основано на модифікаціях Whitelabel Framework." - -#. Author of the plugin/theme -msgid "Andy Fragen" -msgstr "Енді Фраген" - -#~ msgid "" -#~ "No changelog is available via GitHub Updater. Create a file CHANGES." -#~ "md or CHANGELOG.md in your repository." -#~ msgstr "" -#~ "Немає доступних змін через GitHub Updater. Створіть файл CHANGES." -#~ "md або CHANGELOG.md у вашому сховищі." - -#~ msgid "%sView version %s details%s or %supdate now%s." -#~ msgstr "%sПереглянути подробиці версії %s %s або %sоновити зараз%s ." - -#~ msgid "available now." -#~ msgstr "зараз доступна." - -#, fuzzy -#~ msgid "View version" -#~ msgstr "Переглянути подробиці версії %4$s" - -#~ msgid "or" -#~ msgstr "або" - -#~ msgid "update now" -#~ msgstr "оновити зараз" - -#~ msgid "another version?" -#~ msgstr "іншу версію?" - -#~ msgid "was not checked." -#~ msgstr "не було підтверджено." - -#~ msgid "GitHub Updater Error Code:" -#~ msgstr "GitHub Updater код помилки:" - -#~ msgid " or " -#~ msgstr " або " diff --git a/github/languages/github-updater.pot b/github/languages/github-updater.pot deleted file mode 100644 index 9d4018c..0000000 --- a/github/languages/github-updater.pot +++ /dev/null @@ -1,312 +0,0 @@ -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: GitHub Updater\n" -"POT-Creation-Date: 2015-06-08 20:18-0800\n" -"PO-Revision-Date: 2015-05-20 19:10-0800\n" -"Last-Translator: \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.1\n" -"X-Poedit-Basepath: ..\n" -"X-Poedit-WPHeader: github-updater.php\n" -"X-Poedit-SourceCharset: UTF-8\n" -"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;" -"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;" -"_nx_noop:3c,1,2;__ngettext_noop:1,2\n" -"X-Poedit-SearchPath-0: .\n" -"X-Poedit-SearchPathExcluded-0: *.js\n" - -#: mu/ghu-loader.php:66 -msgid "Activated as mu-plugin" -msgstr "" - -#: src/GitHub_Updater/Base.php:467 -#, php-format -msgid "Renaming %1$s to %2$s" -msgstr "" - -#: src/GitHub_Updater/Base.php:477 -msgid "Rename successful" -msgstr "" - -#: src/GitHub_Updater/Base.php:484 -msgid "Unable to rename downloaded repository." -msgstr "" - -#: src/GitHub_Updater/Install.php:56 -msgid "A repository URI is required." -msgstr "" - -#: src/GitHub_Updater/Install.php:194 src/GitHub_Updater/Settings.php:69 -msgid "Install Plugin" -msgstr "" - -#: src/GitHub_Updater/Install.php:197 src/GitHub_Updater/Settings.php:70 -msgid "Install Theme" -msgstr "" - -#: src/GitHub_Updater/Install.php:214 -msgid "Plugin" -msgstr "" - -#: src/GitHub_Updater/Install.php:217 -msgid "Theme" -msgstr "" - -#: src/GitHub_Updater/Install.php:228 -#, php-format -msgid "GitHub Updater Install %s" -msgstr "" - -#: src/GitHub_Updater/Install.php:235 -#, php-format -msgid "%s URI" -msgstr "" - -#: src/GitHub_Updater/Install.php:243 -msgid "Remote Repository Host" -msgstr "" - -#: src/GitHub_Updater/Install.php:251 -msgid "Repository Branch" -msgstr "" - -#: src/GitHub_Updater/Install.php:259 -msgid "Private Bitbucket Repository" -msgstr "" - -#: src/GitHub_Updater/Install.php:267 src/GitHub_Updater/Settings.php:198 -msgid "GitHub Access Token" -msgstr "" - -#: src/GitHub_Updater/Install.php:278 -msgid "GitLab Private Token" -msgstr "" - -#: src/GitHub_Updater/Install.php:306 -msgid "Enter branch name or leave empty for `master`" -msgstr "" - -#: src/GitHub_Updater/Install.php:348 -msgid "Enter GitHub Access Token for private GitHub repositories." -msgstr "" - -#: src/GitHub_Updater/Install.php:362 -msgid "Enter GitLab Private Token for private GitLab repositories." -msgstr "" - -#: src/GitHub_Updater/Messages.php:61 -#, php-format -msgid "%s was not checked. GitHub Updater Error Code:" -msgstr "" - -#: src/GitHub_Updater/Messages.php:69 -#, php-format -msgid "GitHub API's rate limit will reset in %s minutes." -msgstr "" - -#: src/GitHub_Updater/Messages.php:74 -#, php-format -msgid "" -"It looks like you are running into GitHub API rate limits. Be sure and " -"configure a %sPersonal Access Token%s to avoid this issue." -msgstr "" - -#: src/GitHub_Updater/Messages.php:82 -msgid "There is probably an error on the GitHub Updater Settings page." -msgstr "" - -#: src/GitHub_Updater/Messages.php:95 -msgid "" -"You must set a GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" - -#: src/GitHub_Updater/Plugin.php:149 -#, php-format -msgid "Current branch is `%1$s`, try %2$sanother branch%3$s." -msgstr "" - -#: src/GitHub_Updater/Plugin.php:199 -msgid "View details" -msgstr "" - -#: src/GitHub_Updater/Settings.php:68 src/GitHub_Updater/Settings.php:528 -msgid "Settings" -msgstr "" - -#: src/GitHub_Updater/Settings.php:81 src/GitHub_Updater/Settings.php:89 -#: src/GitHub_Updater/Settings.php:172 -msgid "GitHub Updater Settings" -msgstr "" - -#. Plugin Name of the plugin/theme -#: src/GitHub_Updater/Settings.php:82 src/GitHub_Updater/Settings.php:90 -#: src/GitHub_Updater/Settings.php:127 -msgid "GitHub Updater" -msgstr "" - -#: src/GitHub_Updater/Settings.php:131 -msgid "Saved." -msgstr "" - -#: src/GitHub_Updater/Settings.php:179 -msgid "Enable Plugin Branch Switching" -msgstr "" - -#: src/GitHub_Updater/Settings.php:191 -msgid "Personal GitHub Access Token" -msgstr "" - -#: src/GitHub_Updater/Settings.php:211 -msgid "GitHub Private Settings" -msgstr "" - -#: src/GitHub_Updater/Settings.php:224 -msgid "GitLab Private Settings" -msgstr "" - -#: src/GitHub_Updater/Settings.php:233 -msgid "GitLab.com Private Token" -msgstr "" - -#: src/GitHub_Updater/Settings.php:244 -msgid "GitLab CE or GitLab Enterprise Private Token" -msgstr "" - -#: src/GitHub_Updater/Settings.php:257 -msgid "Bitbucket Private Settings" -msgstr "" - -#: src/GitHub_Updater/Settings.php:264 -msgid "Bitbucket Username" -msgstr "" - -#: src/GitHub_Updater/Settings.php:273 -msgid "Bitbucket Password" -msgstr "" - -#: src/GitHub_Updater/Settings.php:286 -msgid "Bitbucket Private Repositories" -msgstr "" - -#: src/GitHub_Updater/Settings.php:298 -msgid "No private repositories are installed." -msgstr "" - -#: src/GitHub_Updater/Settings.php:357 -msgid "Theme:" -msgstr "" - -#: src/GitHub_Updater/Settings.php:433 -msgid "Check to enable branch switching from the Plugins page." -msgstr "" - -#: src/GitHub_Updater/Settings.php:440 -msgid "Enter your GitHub Access Token. Leave empty for public repositories." -msgstr "" - -#: src/GitHub_Updater/Settings.php:447 -msgid "Enter your personal GitHub Access Token to avoid API access limits." -msgstr "" - -#: src/GitHub_Updater/Settings.php:454 -msgid "" -"Check box if private repository. Leave unchecked for public repositories." -msgstr "" - -#: src/GitHub_Updater/Settings.php:461 -msgid "Enter your personal Bitbucket username and password." -msgstr "" - -#: src/GitHub_Updater/Settings.php:468 -msgid "Enter your GitLab.com, GitLab CE, or GitLab Enterprise Private Token." -msgstr "" - -#: src/GitHub_Updater/Theme.php:210 -msgid "Theme is up-to-date!" -msgstr "" - -#: src/GitHub_Updater/Theme.php:215 -msgid "Rollback to:" -msgstr "" - -#: src/GitHub_Updater/Theme.php:233 -msgid "No previous tags to rollback to." -msgstr "" - -#: src/GitHub_Updater/Theme.php:241 src/GitHub_Updater/Theme.php:255 -#, php-format -msgid "GitHub Updater shows a new version of %s available." -msgstr "" - -#: src/GitHub_Updater/Theme.php:248 -#, php-format -msgid "View version %s details." -msgstr "" - -#: src/GitHub_Updater/Theme.php:252 -msgid "Automatic update is unavailable for this theme." -msgstr "" - -#: src/GitHub_Updater/Theme.php:262 src/GitHub_Updater/Theme.php:347 -#, php-format -msgid "View version %1$s details%2$s or %3$supdate now%4$s." -msgstr "" - -#: src/GitHub_Updater/Theme.php:340 -#, php-format -msgid "There is a new version of %s available now." -msgstr "" - -#: src/GitHub_Updater/Theme.php:367 -#, php-format -msgid "Current version is up to date. Try %sanother version%s" -msgstr "" - -#: src/GitHub_Updater/Theme.php:381 -msgid "Choose a Version" -msgstr "" - -#: src/GitHub_Updater/Theme.php:384 -msgid "Install" -msgstr "" - -#: vendor/WPUpdatePhp.php:24 -msgid "this plugin" -msgstr "" - -#: vendor/WPUpdatePhp.php:92 -#, php-format -msgid "Unfortunately, %1$s can not run on PHP versions older than %2$s." -msgstr "" - -#: vendor/WPUpdatePhp.php:94 vendor/WPUpdatePhp.php:110 -#, php-format -msgid "Read more information about %show you can update%s." -msgstr "" - -#: vendor/WPUpdatePhp.php:108 -#, php-format -msgid "%1$s recommends a PHP version greater than %2$s." -msgstr "" - -#. Plugin URI of the plugin/theme -msgid "https://github.com/afragen/github-updater" -msgstr "" - -#. Description of the plugin/theme -msgid "" -"A plugin to automatically update GitHub, Bitbucket or GitLab hosted plugins " -"and themes. It also allows for remote installation of plugins or themes into " -"WordPress. Plugin class based upon codepress/github-plugin-updater. Theme class " -"based upon Whitelabel Framework modifications." -msgstr "" - -#. Author of the plugin/theme -msgid "Andy Fragen" -msgstr "" diff --git a/github/mu/ghu-loader.php b/github/mu/ghu-loader.php deleted file mode 100644 index b519d45..0000000 --- a/github/mu/ghu-loader.php +++ /dev/null @@ -1,82 +0,0 @@ - __('Activated as mu-plugin', 'github-updater' ) ), $actions ); -} - -/* - * Deactivate normal plugin as it's loaded as mu-plugin. - */ -add_action( 'activated_plugin', 'ghu_deactivate', 10, 2 ); - -/* - * Remove links and checkbox from Plugins page so user can't delete main plugin. - */ -add_filter( 'network_admin_plugin_action_links_' . $ghu_plugin_file, 'ghu_mu_plugin_active' ); -add_filter( 'plugin_action_links_' . $ghu_plugin_file, 'ghu_mu_plugin_active' ); -add_action( 'after_plugin_row_' . $ghu_plugin_file, - function() { - print(''); - } ); diff --git a/github/readme.txt b/github/readme.txt deleted file mode 100644 index 800348a..0000000 --- a/github/readme.txt +++ /dev/null @@ -1,45 +0,0 @@ -=== GitHub Updater === -Contributors: afragen, garyj, sethmatics -Donate link: http://bit.ly/github-updater -Tags: plugin, theme, update, updater, github, bitbucket, gitlab, remote install -Requires at least: 3.8 -Tested up to: 4.3 -Stable tag: master -License: GPLv2 or later -License URI: http://www.gnu.org/licenses/gpl-2.0.html - -== Description == - -This plugin was designed to simply update any GitHub hosted WordPress plugin or theme. Currently, plugins or themes hosted on GitHub, Bitbucket, or GitLab are also supported. Additionally, self-hosted installations of GitHub or GitLab are supported. It also allows for remote installation of plugins or themes into WordPress. - -Your plugin or theme **must** contain a header in the style.css header or in the plugin's header denoting the location on GitHub. The format is as follows. - -`GitHub Plugin URI: afragen/github-updater` -`GitHub Plugin URI: https://github.com/afragen/github-updater` - -or - -`GitHub Theme URI: afragen/test-child` -`GitHub Theme URI: https://github.com/afragen/test-child` - -...where the above URI leads to the __owner/repository__ of your theme or plugin. The URI may be in the format `https://github.com//` or the short format `/`. You do not need both. Only one Plugin or Theme URI is required. You **must not** include any extensions like `.git`. - -The following headers are available for use depending upon your hosting source. - -### GitHub -* GitHub Plugin URI -* GitHub Theme URI -* GitHub Branch -* GitHub Enterprise - -###Bitbucket -* Bitbucket Plugin URI -* Bitbucket Theme URI -* Bitbucket Branch - -###GitLab -* GitLab Plugin URI -* GitLab Theme URI -* GitLab Branch -* GitLab Enterprise -* GitLab CE diff --git a/github/src/GitHub_Updater/API.php b/github/src/GitHub_Updater/API.php deleted file mode 100644 index 8563278..0000000 --- a/github/src/GitHub_Updater/API.php +++ /dev/null @@ -1,182 +0,0 @@ -type->type ) { - case ( stristr( $this->type->type, 'github' ) ): - $arr['repo'] = 'github'; - $arr['base_uri'] = 'https://api.github.com'; - $arr['base_download'] = 'https://github.com'; - break; - case( stristr( $this->type->type, 'bitbucket' ) ): - $arr['repo'] = 'bitbucket'; - $arr['base_uri'] = 'https://bitbucket.org/api'; - $arr['base_download'] = 'https://bitbucket.org'; - break; - case (stristr( $this->type->type, 'gitlab' ) ): - $arr['repo'] = 'gitlab'; - $arr['base_uri'] = 'https://gitlab.com/api/v3'; - $arr['base_download'] = 'https://gitlab.com'; - break; - default: - $arr = array(); - } - - return $arr; - } - - /** - * Call the API and return a json decoded body. - * Create error messages. - * - * @see http://developer.github.com/v3/ - * - * @param string $url - * - * @return boolean|object - */ - protected function api( $url ) { - $type = $this->return_repo_type(); - $response = wp_remote_get( $this->_get_api_url( $url ) ); - $code = (integer) wp_remote_retrieve_response_code( $response ); - $allowed_codes = array( 200, 404 ); - - if ( is_wp_error( $response ) ) { - return false; - } - if ( ! in_array( $code, $allowed_codes, false ) ) { - self::$error_code = array_merge( - self::$error_code, - array( $this->type->repo => array( - 'repo' => $this->type->repo, - 'code' => $code, - 'name' => $this->type->name, - ) - ) ); - if ( 'github' === $type['repo'] ) { - GitHub_API::_ratelimit_reset( $response, $this->type->repo ); - } - Messages::create_error_message( $type['repo'] ); - return false; - } - - return json_decode( wp_remote_retrieve_body( $response ) ); - } - - /** - * Return API url. - * - * @param string $endpoint - * - * @return string $endpoint - */ - private function _get_api_url( $endpoint ) { - $type = $this->return_repo_type(); - $segments = array( - 'owner' => $this->type->owner, - 'repo' => $this->type->repo, - ); - - /* - * Add or filter the available segments that are used to replace placeholders. - * - * @param array $segments list of segments. - */ - $segments = apply_filters( 'github_updater_api_segments', $segments ); - - foreach ( $segments as $segment => $value ) { - $endpoint = str_replace( '/:' . sanitize_key( $segment ), '/' . sanitize_text_field( $value ), $endpoint ); - } - - switch ( $type['repo'] ) { - case 'github': - $endpoint = GitHub_API::add_endpoints( $this, $endpoint ); - if ( $this->type->enterprise ) { - return $endpoint; - } - break; - case 'gitlab': - $endpoint = GitLab_API::add_endpoints( $this, $endpoint ); - if ( $this->type->enterprise ) { - return $endpoint; - } - break; - default: - } - - return $type['base_uri'] . $endpoint; - } - - /** - * Validate wp_remote_get response. - * - * @param $response - * - * @return bool true if invalid - */ - protected function validate_response( $response ) { - if ( empty( $response ) || isset( $response->message ) ) { - return true; - } - - return false; - } - -} diff --git a/github/src/GitHub_Updater/Autoloader.php b/github/src/GitHub_Updater/Autoloader.php deleted file mode 100644 index 84c76c0..0000000 --- a/github/src/GitHub_Updater/Autoloader.php +++ /dev/null @@ -1,87 +0,0 @@ - - * @author Barry Hughes - * @license GPL-2.0+ - * @link http://github.com/afragen/autoloader - * @copyright 2015 Andy Fragen - * @version 2.0.0 - */ -class Autoloader { - /** - * Roots to scan when autoloading. - * - * @var array - */ - protected $roots = array(); - - /** - * List of classnames and locations in filesystem, for situations - * where they deviate from convention etc. - * - * @var array - */ - protected $map = array(); - - - /** - * Constructor - * - * @param array $roots - * @param array $static_map - */ - public function __construct( array $roots, array $static_map = null ) { - $this->roots = $roots; - if ( null !== $static_map ) { - $this->map = $static_map; - } - spl_autoload_register( array( $this, 'autoload' ) ); - } - - /** - * Load classes - * - * @param $class - */ - protected function autoload( $class ) { - // Check for a static mapping first of all - if ( isset( $this->map[ $class ] ) && file_exists( $this->map[ $class ] ) ) { - include $this->map[ $class ]; - return; - } - - // Else scan the namespace roots - foreach ( $this->roots as $namespace => $root_dir ) { - // If the class doesn't belong to this namespace, move on to the next root - if ( 0 !== strpos( $class, $namespace ) ) { - continue; - } - - // Determine the possible path to the class - $path = substr( $class, strlen( $namespace ) + 1 ); - $path = str_replace( '\\', DIRECTORY_SEPARATOR, $path ); - $path = $root_dir . DIRECTORY_SEPARATOR . $path . '.php'; - - // Test for its existence and load if present - if ( file_exists( $path ) ) { - include $path; - } - } - } -} diff --git a/github/src/GitHub_Updater/Base.php b/github/src/GitHub_Updater/Base.php deleted file mode 100644 index 4d165d2..0000000 --- a/github/src/GitHub_Updater/Base.php +++ /dev/null @@ -1,1007 +0,0 @@ -type-repo => $code ) - */ - protected static $error_code = array(); - - /** - * Holds git server types. - * - * @var array - */ - protected static $git_servers = array( - 'github' => 'GitHub', - 'bitbucket' => 'Bitbucket', - 'gitlab' => 'GitLab', - ); - - /** - * Holds extra repo header types. - * - * @var array - */ - protected static $extra_repo_headers = array( - 'branch' => 'Branch', - 'enterprise' => 'Enterprise', - 'gitlab_ce' => 'CE', - ); - - /** - * Constructor. - * Loads options to private static variable. - */ - public function __construct() { - self::$options = get_site_option( 'github_updater', array() ); - $this->add_headers(); - - /* - * Calls in init hook for user capabilities. - */ - add_action( 'init', array( &$this, 'init' ) ); - add_action( 'init', array( &$this, 'remote_update' ) ); - } - - /** - * Instantiate Plugin, Theme, and Settings for proper user capabilities. - */ - public function init() { - if ( current_user_can( 'update_plugins' ) ) { - new Plugin(); - } - if ( current_user_can( 'update_themes' ) ) { - new Theme(); - } - if ( is_admin() && ( current_user_can( 'update_plugins' ) || current_user_can( 'update_themes' ) ) ) { - new Settings(); - } - } - - /** - * Load class for remote updating compatibility. - * - * @return \Fragen\GitHub_Updater\Remote_Update - */ - public function remote_update() { - if ( current_user_can( 'update_plugins' ) || current_user_can( 'update_themes' ) ) { - return new Remote_Update(); - } - } - - /** - * Add extra headers via filter hooks. - */ - public function add_headers() { - add_filter( 'extra_plugin_headers', array( &$this, 'add_plugin_headers' ) ); - add_filter( 'extra_theme_headers', array( &$this, 'add_theme_headers' ) ); - } - - /** - * Add extra headers to get_plugins(). - * - * @param $extra_headers - * - * @return array - */ - public function add_plugin_headers( $extra_headers ) { - $ghu_extra_headers = array( - 'Requires WP' => 'Requires WP', - 'Requires PHP' => 'Requires PHP', - ); - - foreach ( self::$git_servers as $server ) { - $ghu_extra_headers[ $server . 'Plugin URI' ] = $server . ' Plugin URI'; - foreach ( self::$extra_repo_headers as $header ) { - $ghu_extra_headers[ $server . ' ' . $header ] = $server . ' ' . $header; - } - } - - self::$extra_headers = array_unique( array_merge( self::$extra_headers, $ghu_extra_headers ) ); - $extra_headers = array_merge( (array) $extra_headers, (array) $ghu_extra_headers ); - - return $extra_headers; - } - - /** - * Add extra headers to wp_get_themes(). - * - * @param $extra_headers - * - * @return array - */ - public function add_theme_headers( $extra_headers ) { - $ghu_extra_headers = array( - 'Requires WP' => 'Requires WP', - 'Requires PHP' => 'Requires PHP', - ); - - foreach ( self::$git_servers as $server ) { - $ghu_extra_headers[ $server . ' Theme URI' ] = $server . ' Theme URI'; - foreach ( self::$extra_repo_headers as $header ) { - $ghu_extra_headers[ $server . ' ' . $header ] = $server . ' ' . $header; - } - } - - self::$extra_headers = array_unique( array_merge( self::$extra_headers, $ghu_extra_headers ) ); - $extra_headers = array_merge( (array) $extra_headers, (array) $ghu_extra_headers ); - - return $extra_headers; - } - - /** - * Get details of Git-sourced plugins from those that are installed. - * - * @return array Indexed array of associative arrays of plugin details. - */ - protected function get_plugin_meta() { - /* - * Ensure get_plugins() function is available. - */ - include_once( ABSPATH . '/wp-admin/includes/plugin.php' ); - - $plugins = get_plugins(); - $git_plugins = array(); - $update_plugins = get_site_transient( 'update_plugins' ); - if ( empty( $update_plugins) ) { - wp_update_plugins(); - $update_plugins = get_site_transient( 'update_plugins' ); - } - $all_plugins = $update_plugins ? array_merge( (array) $update_plugins->response, (array) $update_plugins->no_update ) : array(); - - foreach ( (array) $plugins as $plugin => $headers ) { - $git_plugin = array(); - - if ( empty( $headers['GitHub Plugin URI'] ) && - empty( $headers['Bitbucket Plugin URI'] ) && - empty( $headers['GitLab Plugin URI'] ) - ) { - continue; - } - - foreach ( (array) self::$extra_headers as $value ) { - $repo_enterprise_uri = null; - - if ( empty( $headers[ $value ] ) || - false === stristr( $value, 'Plugin' ) - ) { - continue; - } - - $header_parts = explode( ' ', $value ); - $repo_parts = $this->_get_repo_parts( $header_parts[0], 'plugin' ); - - if ( $repo_parts['bool'] ) { - $header = $this->parse_header_uri( $headers[ $value ] ); - } - - $self_hosted_parts = array_diff( array_keys( self::$extra_repo_headers ), array( 'branch' ) ); - foreach ( $self_hosted_parts as $part ) { - if ( array_key_exists( $repo_parts[ $part ], $headers ) && - ! empty( $headers[ $repo_parts[ $part ] ] ) - ) { - $repo_enterprise_uri = $headers[ $repo_parts[ $part ] ]; - } - } - - if ( ! empty( $repo_enterprise_uri ) ) { - $repo_enterprise_uri = trim( $repo_enterprise_uri, '/' ); - switch( $header_parts[0] ) { - case 'GitHub': - $repo_enterprise_uri = $repo_enterprise_uri . '/api/v3'; - break; - case 'GitLab': - $repo_enterprise_uri = $repo_enterprise_uri . '/api/v3'; - break; - } - } - - $git_plugin['type'] = $repo_parts['type']; - $git_plugin['uri'] = $repo_parts['base_uri'] . $header['owner_repo']; - $git_plugin['enterprise'] = $repo_enterprise_uri; - $git_plugin['owner'] = $header['owner']; - $git_plugin['repo'] = $header['repo']; - $git_plugin['extended_repo'] = implode( '-', array( $repo_parts['git_server'], $header['owner'], $header['repo'] ) ); - $git_plugin['branch'] = $headers[ $repo_parts['branch'] ]; - $git_plugin['slug'] = $plugin; - $git_plugin['local_path'] = WP_PLUGIN_DIR . '/' . $header['repo'] . '/'; - $git_plugin['local_path_extended'] = WP_PLUGIN_DIR . '/' . $git_plugin['extended_repo'] . '/'; - - $plugin_data = get_plugin_data( WP_PLUGIN_DIR . '/' . $git_plugin['slug'] ); - $git_plugin['author'] = $plugin_data['AuthorName']; - $git_plugin['name'] = $plugin_data['Name']; - $git_plugin['local_version'] = strtolower( $plugin_data['Version'] ); - $git_plugin['sections']['description'] = $plugin_data['Description']; - $git_plugin['dot_org'] = false; - } - if ( isset( $all_plugins[ $plugin ]->id) && 'master' === $git_plugin['branch'] ) { - $git_plugin['dot_org'] = true; - } - - $git_plugins[ $git_plugin['repo'] ] = (object) $git_plugin; - } - - return $git_plugins; - } - - /** - * Reads in WP_Theme class of each theme. - * Populates variable array. - */ - protected function get_theme_meta() { - $git_themes = array(); - $themes = wp_get_themes( array( 'errors' => null ) ); - - foreach ( (array) $themes as $theme ) { - $git_theme = array(); - $repo_uri = null; - $repo_enterprise_uri = null; - - foreach ( (array) self::$extra_headers as $value ) { - - $repo_uri = $theme->get( $value ); - if ( empty( $repo_uri ) || - false === stristr( $value, 'Theme' ) - ) { - continue; - } - - $header_parts = explode( ' ', $value ); - $repo_parts = $this->_get_repo_parts( $header_parts[0], 'theme' ); - - if ( $repo_parts['bool'] ) { - $header = $this->parse_header_uri( $repo_uri ); - } - - $self_hosted_parts = array_diff( array_keys( self::$extra_repo_headers ), array( 'branch' ) ); - foreach ( $self_hosted_parts as $part ) { - $self_hosted = $theme->get( $repo_parts[ $part ] ); - - if ( ! empty( $self_hosted ) ) { - $repo_enterprise_uri = $self_hosted; - } - } - - if ( ! empty( $repo_enterprise_uri ) ) { - $repo_enterprise_uri = trim( $repo_enterprise_uri, '/' ); - switch( $header_parts[0] ) { - case 'GitHub': - $repo_enterprise_uri = $repo_enterprise_uri . '/api/v3'; - break; - case 'GitLab': - $repo_enterprise_uri = $repo_enterprise_uri . '/api/v3'; - break; - } - } - - $git_theme['type'] = $repo_parts['type']; - $git_theme['uri'] = $repo_parts['base_uri'] . $header['owner_repo']; - $git_theme['enterprise'] = $repo_enterprise_uri; - $git_theme['owner'] = $header['owner']; - $git_theme['repo'] = $header['repo']; - $git_theme['extended_repo'] = $header['repo']; - $git_theme['name'] = $theme->get( 'Name' ); - $git_theme['theme_uri'] = $theme->get( 'ThemeURI' ); - $git_theme['author'] = $theme->get( 'Author' ); - $git_theme['local_version'] = strtolower( $theme->get( 'Version' ) ); - $git_theme['sections']['description'] = $theme->get( 'Description' ); - $git_theme['local_path'] = get_theme_root() . '/' . $git_theme['repo'] .'/'; - $git_theme['local_path_extended'] = null; - $git_theme['branch'] = $theme->get( $repo_parts['branch'] ); - } - - /* - * Exit if not git hosted theme. - */ - if ( empty( $git_theme ) ) { - continue; - } - - $git_themes[ $git_theme['repo'] ] = (object) $git_theme; - } - - return $git_themes; - } - - /** - * Set default values for plugin/theme. - * - * @param $type - */ - protected function set_defaults( $type ) { - if ( ! isset( self::$options['branch_switch'] ) ) { - self::$options['branch_switch'] = null; - } - if ( ! isset( self::$options[ $this->$type->repo ] ) ) { - self::$options[ $this->$type->repo ] = null; - add_site_option( 'github_updater', self::$options ); - } - - $this->$type->remote_version = '0.0.0'; - $this->$type->newest_tag = '0.0.0'; - $this->$type->download_link = null; - $this->$type->tags = array(); - $this->$type->rollback = array(); - $this->$type->branches = array(); - $this->$type->requires = null; - $this->$type->tested = null; - $this->$type->donate = null; - $this->$type->contributors = array(); - $this->$type->downloaded = 0; - $this->$type->last_updated = null; - $this->$type->rating = 0; - $this->$type->num_ratings = 0; - $this->$type->transient = array(); - $this->$type->repo_meta = array(); - $this->$type->private = true; - $this->$type->watchers = 0; - $this->$type->forks = 0; - $this->$type->open_issues = 0; - $this->$type->score = 0; - $this->$type->requires_wp_version = '3.8.0'; - $this->$type->requires_php_version = '5.3'; - } - - /** - * Rename the zip folder to be the same as the existing repository folder. - * - * Github delivers zip files as --.zip - * - * @global object $wp_filesystem - * - * @param string $source - * @param string $remote_source - * @param object $upgrader - * - * @return string $source|$corrected_source - */ - public function upgrader_source_selection( $source, $remote_source , $upgrader ) { - - require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; - global $wp_filesystem; - $repo = null; - $matched = false; - $source_base = basename( $source ); - - /* - * Check for upgrade process, return if both are false or - * not of same updater. - */ - if ( ( ! $upgrader instanceof \Plugin_Upgrader && ! $upgrader instanceof \Theme_Upgrader ) || - ( $upgrader instanceof \Plugin_Upgrader && ! $this instanceof Plugin ) || - ( $upgrader instanceof \Theme_Upgrader && ! $this instanceof Theme ) - ) { - return $source; - } - - /* - * Re-create $upgrader object for iThemes Sync - * and possibly other remote upgrade services. - */ - if ( $upgrader instanceof \Plugin_Upgrader && - isset( $upgrader->skin->plugin_info ) - ) { - $_upgrader = new \Plugin_Upgrader( $skin = new \Bulk_Plugin_Upgrader_Skin() ); - $_upgrader->skin->plugin_info = $upgrader->skin->plugin_info; - $upgrader = new \Plugin_Upgrader( $skin = new \Bulk_Plugin_Upgrader_Skin() ); - $upgrader->skin->plugin_info = $_upgrader->skin->plugin_info; - } - if ( $upgrader instanceof \Theme_Upgrader && - isset( $upgrader->skin->theme_info ) - ) { - $_upgrader = new \Theme_Upgrader( $skin = new \Bulk_Theme_Upgrader_Skin() ); - $_upgrader->skin->theme_info = $upgrader->skin->theme_info; - $upgrader = new \Theme_Upgrader( $skin = new \Bulk_Theme_Upgrader_Skin() ); - $upgrader->skin->theme_info = $_upgrader->skin->theme_info; - } - - /* - * Get repo for remote install update process. - */ - if ( ! empty( self::$options['github_updater_install_repo'] ) ) { - $repo = self::$options['github_updater_install_repo']; - } - - /* - * Get/set $repo for updating. - */ - if ( empty( $repo ) ) { - $updates = $this->get_updating_repos(); - foreach ( $updates as $extended => $update ) { - - /* - * Plugin renaming. - */ - if ( $upgrader instanceof \Plugin_Upgrader ) { - - if ( $upgrader->skin instanceof \Plugin_Upgrader_Skin && - $update === dirname( $upgrader->skin->plugin ) || - $extended === dirname( $upgrader->skin->plugin ) - ) { - $matched = true; - } else { - foreach ( self::$git_servers as $git ) { - $header = $this->parse_header_uri( $upgrader->skin->plugin_info[ $git . ' Plugin URI' ] ); - if ( $update === $header['repo'] ) { - $matched = true; - break; - } - } - } - - if ( $matched ) { - if ( ( ! defined( 'GITHUB_UPDATER_EXTENDED_NAMING' ) || - ( defined( 'GITHUB_UPDATER_EXTENDED_NAMING' ) && ! GITHUB_UPDATER_EXTENDED_NAMING ) ) || - ( $this->config[ $update ]->dot_org && - ( ( ! $this->tag && 'master' === $this->config[ $update ]->branch ) || - ( $this->tag && 'master' === $this->tag) ) ) - ) { - $repo = $update; - } else { - $repo = $extended; - } - break; - } - } - - /* - * Theme renaming. - */ - if ( $upgrader instanceof \Theme_Upgrader && - ( ( $upgrader->skin instanceof \Bulk_Theme_Upgrader_Skin && - $update === $upgrader->skin->theme_info->stylesheet ) || - ( $upgrader->skin instanceof \Theme_Upgrader_Skin && - $update === $upgrader->skin->theme ) ) - ) { - $repo = $update; - break; - } - } - - /* - * Return already corrected $source or wp.org $source. - */ - if ( empty( $repo ) ) { - return $source; - } - } - - $corrected_source = trailingslashit( $remote_source ) . trailingslashit( $repo ); - - $upgrader->skin->feedback( - sprintf( - __( 'Renaming %1$s to %2$s', 'github-updater' ) . '…', - '' . $source_base . '', - '' . basename( $corrected_source ) . '' - ) - ); - - /* - * If we can rename, do so and return the new name. - */ - if ( $wp_filesystem->move( $source, $corrected_source, true ) ) { - $upgrader->skin->feedback( __( 'Rename successful', 'github-updater' ) . '…' ); - return $corrected_source; - } - - /* - * Otherwise, return an error. - */ - $upgrader->skin->feedback( __( 'Unable to rename downloaded repository.', 'github-updater' ) ); - return new \WP_Error(); - } - - /** - * Get dashboard update requested repos and return array of slugs. - * Really does need $_REQUEST for remote update services. - * - * @return array - */ - protected function get_updating_repos() { - $updates = array(); - $request = array_map( 'wp_filter_kses', $_REQUEST ); - $request = apply_filters( 'github_updater_remote_update_request', $request ); - - $request['plugins'] = isset( $request['plugins'] ) ? $request['plugins'] : array(); - $request['plugin'] = isset( $request['plugin'] ) ? (array) $request['plugin'] : array(); - $request['themes'] = isset( $request['themes'] ) ? $request['themes'] : array(); - $request['theme'] = isset( $request['theme'] ) ? (array) $request['theme'] : array(); - - if ( ! empty( $request['plugins'] ) ) { - $request['plugins'] = explode( ',', $request['plugins'] ); - } - if ( ! empty( $request['themes']) ) { - $request['themes'] = explode( ',', $request['themes'] ); - } - - foreach ( array_merge( $request['plugin'], $request['plugins'] ) as $update ) { - $plugin_repo = explode( '/', $update ); - $updates[] = $plugin_repo[0]; - } - - foreach ( array_merge( $request['theme'], $request['themes'] ) as $update ) { - $updates[] = $update; - } - - /* - * Add `git-owner-repo` to index for future renaming option. - */ - foreach ( $updates as $key => $value ) { - $repo = $this->get_repo_slugs( $value ); - if ( $repo['repo'] === $value || $repo['extended_repo'] === $value ) { - unset( $updates[ $key ] ); - $updates[ $repo['extended_repo'] ] = $repo['repo']; - } - } - - return $updates; - } - - /** - * Set array with normal and extended repo names. - * - * @param $slug - * - * @return array - */ - protected function get_repo_slugs( $slug ) { - $arr = array(); - foreach ( $this->config as $repo ) { - if ( $slug === $repo->repo || $slug === $repo->extended_repo ) { - $arr['repo'] = $repo->repo; - $arr['extended_repo'] = $repo->extended_repo; - } - } - - return $arr; - } - - /** - * Take remote file contents as string and parse headers. - * - * @param $contents - * @param $type - * - * @return array - */ - protected function get_file_headers( $contents, $type ) { - - $default_plugin_headers = array( - 'Name' => 'Plugin Name', - 'PluginURI' => 'Plugin URI', - 'Version' => 'Version', - 'Description' => 'Description', - 'Author' => 'Author', - 'AuthorURI' => 'Author URI', - 'TextDomain' => 'Text Domain', - 'DomainPath' => 'Domain Path', - 'Network' => 'Network', - ); - - $default_theme_headers = array( - 'Name' => 'Theme Name', - 'ThemeURI' => 'Theme URI', - 'Description' => 'Description', - 'Author' => 'Author', - 'AuthorURI' => 'Author URI', - 'Version' => 'Version', - 'Template' => 'Template', - 'Status' => 'Status', - 'Tags' => 'Tags', - 'TextDomain' => 'Text Domain', - 'DomainPath' => 'Domain Path', - ); - - if ( false !== strpos( $type, 'plugin' ) ) { - $all_headers = $default_plugin_headers; - } - - if ( false !== strpos( $type, 'theme' ) ) { - $all_headers = $default_theme_headers; - } - - /* - * Make sure we catch CR-only line endings. - */ - $file_data = str_replace( "\r", "\n", $contents ); - - /* - * Merge extra headers and default headers. - */ - $all_headers = array_merge( self::$extra_headers, (array) $all_headers ); - $all_headers = array_unique( $all_headers ); - - foreach ( $all_headers as $field => $regex ) { - if ( preg_match( '/^[ \t\/*#@]*' . preg_quote( $regex, '/' ) . ':(.*)$/mi', $file_data, $match ) && $match[1] ) { - $all_headers[ $field ] = _cleanup_header_comment( $match[1] ); - } else { - $all_headers[ $field ] = ''; - } - } - - return $all_headers; - } - - /** - * Get filename of changelog and return. - * - * @param $type - * - * @return bool or variable - */ - protected function get_changelog_filename( $type ) { - $changelogs = array( 'CHANGES.md', 'CHANGELOG.md', 'changes.md', 'changelog.md' ); - $changes = null; - $local_files = null; - - if ( is_dir( $this->$type->local_path ) ) { - $local_files = scandir( $this->$type->local_path ); - } elseif ( is_dir( $this->$type->local_path_extended ) ) { - $local_files = scandir( $this->$type->local_path_extended ); - } - - $changes = array_intersect( (array) $local_files, $changelogs ); - $changes = array_pop( $changes ); - - if ( ! empty( $changes ) ) { - return $changes; - } - - return false; - } - - - /** - * Function to check if plugin or theme object is able to be updated. - * - * @param $type - * - * @return bool - */ - public function can_update( $type ) { - global $wp_version; - - $remote_is_newer = version_compare( $type->remote_version, $type->local_version, '>' ); - $wp_version_ok = version_compare( $wp_version, $type->requires_wp_version,'>=' ); - $php_version_ok = version_compare( PHP_VERSION, $type->requires_php_version, '>=' ); - - return $remote_is_newer && $wp_version_ok && $php_version_ok; - } - - /** - * Parse URI param returning array of parts. - * - * @param $repo_header - * - * @return array - */ - protected function parse_header_uri( $repo_header ) { - $header_parts = parse_url( $repo_header ); - $header['scheme'] = isset( $header_parts['scheme'] ) ? $header_parts['scheme'] : null; - $header['host'] = isset( $header_parts['host'] ) ? $header_parts['host'] : null; - $owner_repo = trim( $header_parts['path'], '/' ); // strip surrounding slashes - $owner_repo = str_replace( '.git', '', $owner_repo ); //strip incorrect URI ending - $header['path'] = $owner_repo; - $owner_repo = explode( '/', $owner_repo ); - $header['owner'] = $owner_repo[0]; - $header['repo'] = $owner_repo[1]; - $header['owner_repo'] = isset( $header['owner'] ) ? $header['owner'] . '/' . $header['repo'] : null; - $header['base_uri'] = str_replace( $header_parts['path'], '', $repo_header ); - $header['uri'] = isset( $header['scheme'] ) ? trim( $repo_header, '/' ) : null; - - $header = Settings::sanitize( $header ); - - return $header; - } - - /** - * Create repo parts. - * - * @param $repo - * @param $type - * - * @return mixed - */ - private function _get_repo_parts( $repo, $type ) { - $arr['bool'] = false; - $pattern = '/' . strtolower( $repo ) . '_/'; - $type = preg_replace( $pattern, '', $type ); - $repo_types = array( - 'GitHub' => 'github_' . $type, - 'Bitbucket' => 'bitbucket_'. $type, - 'GitLab' => 'gitlab_' . $type, - ); - $repo_base_uris = array( - 'GitHub' => 'https://github.com/', - 'Bitbucket' => 'https://bitbucket.org/', - 'GitLab' => 'https://gitlab.com/', - ); - - if ( array_key_exists( $repo, $repo_types ) ) { - $arr['type'] = $repo_types[ $repo ]; - $arr['git_server'] = strtolower( $repo ); - $arr['base_uri'] = $repo_base_uris[ $repo ]; - $arr['bool'] = true; - foreach ( self::$extra_repo_headers as $key => $value ) { - $arr[ $key ] = $repo . ' ' . $value; - } - } - - return $arr; - } - - /** - * Used to set_site_transient and checks/stores transient id in array. - * - * @param $id - * @param $response - * - * @return bool - */ - protected function set_transient( $id, $response ) { - $transient = 'ghu-' . md5( $this->type->repo . $id ); - if ( ! in_array( $transient, self::$transients, true ) ) { - self::$transients[] = $transient; - } - set_site_transient( $transient, $response, ( self::$hours * HOUR_IN_SECONDS ) ); - - return true; - } - - /** - * Returns site_transient and checks/stores transient id in array. - * - * @param $id - * - * @return mixed - */ - protected function get_transient( $id ) { - $transient = 'ghu-' . md5( $this->type->repo . $id ); - if ( ! in_array( $transient, self::$transients, true ) ) { - self::$transients[] = $transient; - } - - return get_site_transient( $transient ); - } - - /** - * Delete all transients from array of transient ids. - * - * @param $type - * - * @return bool|void - */ - protected function delete_all_transients( $type ) { - $transients = get_site_transient( 'ghu-' . $type ); - if ( ! $transients ) { - return false; - } - - foreach ( $transients as $transient ) { - delete_site_transient( $transient ); - } - delete_site_transient( 'ghu-' . $type ); - } - - /** - * Create transient of $type transients for force-check. - * - * @param $type - * - * @return void|bool - */ - protected function make_force_check_transient( $type ) { - $transient = get_site_transient( 'ghu-' . $type ); - if ( $transient ) { - return false; - } - set_site_transient( 'ghu-' . $type , self::$transients, self::$hours * HOUR_IN_SECONDS ); - self::$transients = array(); - } - - /** - * Set repo object file info. - * - * @param $response - * - * @param $repo - */ - protected function set_file_info( $response, $repo ) { - $repo_parts = $this->_get_repo_parts( $repo, $this->type->type ); - $this->type->transient = $response; - $this->type->remote_version = strtolower( $response['Version'] ); - $this->type->branch = ! empty( $response[ $repo_parts['branch'] ] ) ? $response[$repo_parts['branch'] ] : 'master'; - $this->type->requires_php_version = ! empty( $response['Requires PHP'] ) ? $response['Requires PHP'] : $this->type->requires_php_version; - $this->type->requires_wp_version = ! empty( $response['Requires WP'] ) ? $response['Requires WP'] : $this->type->requires_wp_version; - } - - /** - * Parse tags and set object data. - * - * @param $response - * @param $repo_type - * - * @return bool - */ - protected function parse_tags( $response, $repo_type ) { - $tags = array(); - $rollback = array(); - if ( false !== $response ) { - switch ( $repo_type['repo'] ) { - case 'github': - foreach ( (array) $response as $tag ) { - if ( isset( $tag->name ) && isset( $tag->zipball_url ) ) { - $tags[] = $tag->name; - $rollback[ $tag->name ] = $tag->zipball_url; - } - } - break; - case 'bitbucket': - foreach ( (array) $response as $num => $tag ) { - $download_base = implode( '/', array( $repo_type['base_download'], $this->type->owner, $this->type->repo, 'get/' ) ); - if ( isset( $num ) ) { - $tags[] = $num; - $rollback[ $num ] = $download_base . $num . '.zip'; - } - } - break; - case 'gitlab': - foreach ( (array) $response as $tag ) { - $download_link = implode( '/', array( $repo_type['base_download'], $this->type->owner, $this->type->repo, 'repository/archive.zip' ) ); - $download_link = add_query_arg( 'ref', $tag->name, $download_link ); - if ( isset( $tag->name) ) { - $tags[] = $tag->name; - $rollback[ $tag->name ] = $download_link; - } - } - break; - } - - } - if ( empty( $tags ) ) { - return false; - } - - usort( $tags, 'version_compare' ); - krsort( $rollback ); - - $newest_tag = null; - $newest_tag_key = key( array_slice( $tags, -1, 1, true ) ); - $newest_tag = $tags[ $newest_tag_key ]; - - $this->type->newest_tag = $newest_tag; - $this->type->tags = $tags; - $this->type->rollback = $rollback; - - return true; - } - - /** - * Set data from readme.txt. - * Prefer changelog from CHANGES.md. - * - * @param $response - * - * @return bool - */ - protected function set_readme_info( $response ) { - $readme = array(); - foreach ( $this->type->sections as $section => $value ) { - if ( 'description' === $section ) { - continue; - } - $readme['sections/' . $section ] = $value; - } - foreach ( $readme as $key => $value ) { - $key = explode( '/', $key ); - if ( ! empty( $value ) && 'sections' === $key[0] ) { - unset( $response['sections'][ $key[1] ] ); - } - } - - unset( $response['sections']['screenshots'] ); - unset( $response['sections']['installation'] ); - $this->type->sections = array_merge( (array) $this->type->sections, (array) $response['sections'] ); - $this->type->tested = $response['tested_up_to']; - $this->type->requires = $response['requires_at_least']; - $this->type->donate = $response['donate_link']; - $this->type->contributors = $response['contributors']; - - return true; - } - - /** - * Create some sort of rating from 0 to 100 for use in star ratings. - * I'm really just making this up, more based upon popularity. - * - * @param $repo_meta - * - * @return integer - */ - protected function make_rating( $repo_meta ) { - $watchers = empty( $repo_meta->watchers ) ? $this->type->watchers : $repo_meta->watchers; - $forks = empty( $repo_meta->forks ) ? $this->type->forks : $repo_meta->forks; - $open_issues = empty( $repo_meta->open_issues ) ? $this->type->open_issues : $repo_meta->open_issues; - $score = empty( $repo_meta->score ) ? $this->type->score : $repo_meta->score; //what is this anyway? - - $rating = round( $watchers + ( $forks * 1.5 ) - $open_issues + $score ); - - if ( 100 < $rating ) { - return 100; - } - - return (integer) $rating; - } - -} diff --git a/github/src/GitHub_Updater/Bitbucket_API.php b/github/src/GitHub_Updater/Bitbucket_API.php deleted file mode 100644 index 8191a57..0000000 --- a/github/src/GitHub_Updater/Bitbucket_API.php +++ /dev/null @@ -1,357 +0,0 @@ -type = $type; - parent::$hours = 12; - add_filter( 'http_request_args', array( $this, 'maybe_authenticate_http' ), 10, 2 ); - - if ( ! isset( self::$options['bitbucket_username'] ) ) { - self::$options['bitbucket_username'] = null; - } - if ( ! isset( self::$options['bitbucket_password'] ) ) { - self::$options['bitbucket_password'] = null; - } - add_site_option( 'github_updater', self::$options ); - } - - /** - * Read the remote file and parse headers. - * - * @param $file - * - * @return bool - */ - public function get_remote_info( $file ) { - $response = $this->get_transient( $file ); - - if ( ! $response ) { - if ( empty( $this->type->branch ) ) { - $this->type->branch = 'master'; - } - $response = $this->api( '/1.0/repositories/:owner/:repo/src/' . trailingslashit( $this->type->branch ) . $file ); - - if ( $response ) { - $contents = $response->data; - $response = $this->get_file_headers( $contents, $this->type->type ); - $this->set_transient( $file, $response ); - } - } - - if ( $this->validate_response( $response ) || ! is_array( $response ) ) { - return false; - } - - $this->set_file_info( $response, 'Bitbucket' ); - - return true; - } - - /** - * Get the remote info to for tags. - * - * @return bool - */ - public function get_remote_tag() { - $repo_type = $this->return_repo_type(); - $response = $this->get_transient( 'tags' ); - - if ( ! $response ) { - $response = $this->api( '/1.0/repositories/:owner/:repo/tags' ); - $arr_resp = (array) $response; - - if ( ! $response || ! $arr_resp ) { - $response->message = 'No tags found'; - } - - if ( $response ) { - $this->set_transient( 'tags', $response ); - } - } - - if ( $this->validate_response( $response ) ) { - return false; - } - - $this->parse_tags( $response, $repo_type ); - - return true; - } - - /** - * Read the remote CHANGES.md file - * - * @param $changes - * - * @return bool - */ - public function get_remote_changes( $changes ) { - $response = $this->get_transient( 'changes' ); - - if ( ! $response ) { - if ( ! isset( $this->type->branch ) ) { - $this->type->branch = 'master'; - } - $response = $this->api( '/1.0/repositories/:owner/:repo/src/' . trailingslashit( $this->type->branch ) . $changes ); - - if ( ! $response ) { - $response = new \stdClass(); - $response->message = 'No changelog found'; - } - - if ( $response ) { - $this->set_transient( 'changes', $response ); - } - } - - if ( $this->validate_response( $response ) ) { - return false; - } - - $changelog = $this->get_transient( 'changelog' ); - - if ( ! $changelog ) { - $parser = new \Parsedown; - $changelog = $parser->text( $response->data ); - $this->set_transient( 'changelog', $changelog ); - } - - $this->type->sections['changelog'] = $changelog; - } - - /** - * Read and parse remote readme.txt. - * - * @return bool - */ - public function get_remote_readme() { - if ( ! file_exists( $this->type->local_path . 'readme.txt' ) && - ! file_exists( $this->type->local_path_extended . 'readme.txt' ) - ) { - return false; - } - - $response = $this->get_transient( 'readme' ); - - if ( ! $response ) { - if ( ! isset( $this->type->branch ) ) { - $this->type->branch = 'master'; - } - $response = $this->api( '/1.0/repositories/:owner/:repo/src/' . trailingslashit( $this->type->branch ) . 'readme.txt' ); - - if ( ! $response ) { - $response = new \stdClass(); - $response->message = 'No readme found'; - } - - } - - if ( $response && isset( $response->data ) ) { - $parser = new Readme_Parser; - $response = $parser->parse_readme( $response->data ); - $this->set_transient( 'readme', $response ); - } - - if ( $this->validate_response( $response ) ) { - return false; - } - - $this->set_readme_info( $response ); - - return true; - } - - /** - * Read the repository meta from API - * - * @return bool - */ - public function get_repo_meta() { - $response = $this->get_transient( 'meta' ); - - if ( ! $response ) { - $response = $this->api( '/2.0/repositories/:owner/:repo' ); - - if ( $response ) { - $this->set_transient( 'meta', $response ); - } - } - - if ( $this->validate_response( $response ) ) { - return false; - } - - $this->type->repo_meta = $response; - $this->_add_meta_repo_object(); - $this->get_remote_branches(); - - return true; - } - - /** - * Create array of branches and download links as array. - * - * @return bool - */ - public function get_remote_branches() { - $branches = array(); - $response = $this->get_transient( 'branches' ); - - if ( ! $response ) { - $response = $this->api( '/1.0/repositories/:owner/:repo/branches' ); - - if ( $response ) { - foreach ( $response as $branch ) { - $branches[ $branch->branch ] = $this->construct_download_link( false, $branch->branch ); - } - $this->type->branches = $branches; - $this->set_transient( 'branches', $branches ); - return true; - } - } - - if ( $this->validate_response( $response ) ) { - return false; - } - - $this->type->branches = $response; - - return true; - } - - /** - * Construct $this->type->download_link using Bitbucket API - * - * @param boolean $rollback for theme rollback - * @param boolean $branch_switch for direct branch changing - * - * @return string $endpoint - */ - public function construct_download_link( $rollback = false, $branch_switch = false ) { - $download_link_base = implode( '/', array( 'https://bitbucket.org', $this->type->owner, $this->type->repo, 'get/' ) ); - $endpoint = ''; - - /* - * Check for rollback. - */ - if ( ! empty( $_GET['rollback'] ) && - ( isset( $_GET['action'] ) && 'upgrade-theme' === $_GET['action'] ) && - ( isset( $_GET['theme'] ) && $_GET['theme'] === $this->type->repo ) - ) { - $endpoint .= $rollback . '.zip'; - - // for users wanting to update against branch other than master or not using tags, else use newest_tag - } elseif ( 'master' != $this->type->branch || empty( $this->type->tags ) ) { - $endpoint .= $this->type->branch . '.zip'; - } else { - $endpoint .= $this->type->newest_tag . '.zip'; - } - - /* - * Create endpoint for branch switching. - */ - if ( $branch_switch ) { - $endpoint = $branch_switch . '.zip'; - } - - return $download_link_base . $endpoint; - } - - /** - * Add remote data to type object. - */ - private function _add_meta_repo_object() { - $this->type->rating = $this->make_rating( $this->type->repo_meta ); - $this->type->last_updated = $this->type->repo_meta->updated_on; - $this->type->num_ratings = $this->type->watchers; - $this->type->private = $this->type->repo_meta->is_private; - } - - /** - * Add Basic Authentication $args to http_request_args filter hook - * for private Bitbucket repositories only. - * - * @param $args - * @param $url - * - * @return mixed $args - */ - public function maybe_authenticate_http( $args, $url ) { - if ( ! isset( $this->type ) || false === stristr( $url, 'bitbucket' ) ) { - return $args; - } - - $bitbucket_private = false; - $bitbucket_private_install = false; - - /* - * Check whether attempting to update private Bitbucket repo. - */ - if ( isset( $this->type->repo ) && - ! empty( parent::$options[ $this->type->repo ] ) && - false !== strpos( $url, $this->type->repo ) - ) { - $bitbucket_private = true; - } - - /* - * Check whether attempting to install private Bitbucket repo - * and abort if Bitbucket user/pass not set. - */ - if ( isset( $_POST['option_page'] ) && - 'github_updater_install' === $_POST['option_page'] && - 'bitbucket' === $_POST['github_updater_api'] && - isset( $_POST['is_private'] ) && - ( ! empty( parent::$options['bitbucket_username'] ) || ! empty( parent::$options['bitbucket_password'] ) ) - ) { - $bitbucket_private_install = true; - } - - if ( $bitbucket_private || $bitbucket_private_install ) { - $username = parent::$options['bitbucket_username']; - $password = parent::$options['bitbucket_password']; - $args['headers']['Authorization'] = 'Basic ' . base64_encode( "$username:$password" ); - } - - return $args; - } - - /** - * Added due to abstract class designation, not used for Bitbucket. - * - * @param $git - * @param $endpoint - */ - protected function add_endpoints( $git, $endpoint ) {} - -} diff --git a/github/src/GitHub_Updater/GitHub_API.php b/github/src/GitHub_Updater/GitHub_API.php deleted file mode 100644 index bfcd702..0000000 --- a/github/src/GitHub_Updater/GitHub_API.php +++ /dev/null @@ -1,401 +0,0 @@ -type = $type; - parent::$hours = 12; - } - - /** - * Read the remote file and parse headers. - * - * @param $file - * - * @return bool - */ - public function get_remote_info( $file ) { - $response = $this->get_transient( $file ); - - if ( ! $response ) { - $response = $this->api( '/repos/:owner/:repo/contents/' . $file ); - if ( ! isset( $response->content ) ) { - return false; - } - - if ( $response ) { - $contents = base64_decode( $response->content ); - $response = $this->get_file_headers( $contents, $this->type->type ); - $this->set_transient( $file, $response ); - } - } - - if ( $this->validate_response( $response ) || ! is_array( $response ) ) { - return false; - } - - $this->set_file_info( $response, 'GitHub' ); - - return true; - } - - /** - * Get remote info for tags. - * - * @return bool - */ - public function get_remote_tag() { - $repo_type = $this->return_repo_type(); - $response = $this->get_transient( 'tags' ); - - if ( ! $response ) { - $response = $this->api( '/repos/:owner/:repo/tags' ); - - if ( ! $response ) { - $response = new \stdClass(); - $response->message = 'No tags found'; - } - - if ( $response ) { - $this->set_transient( 'tags', $response ); - } - } - - if ( $this->validate_response( $response ) ) { - return false; - } - - $this->parse_tags( $response, $repo_type ); - - return true; - } - - /** - * Read the remote CHANGES.md file. - * - * @param $changes - * - * @return bool - */ - public function get_remote_changes( $changes ) { - $response = $this->get_transient( 'changes' ); - - if ( ! $response ) { - $response = $this->api( '/repos/:owner/:repo/contents/' . $changes ); - - if ( $response ) { - $this->set_transient( 'changes', $response ); - } - } - - if ( $this->validate_response( $response ) ) { - return false; - } - - $changelog = $this->get_transient( 'changelog' ); - - if ( ! $changelog ) { - $parser = new \Parsedown; - $changelog = $parser->text( base64_decode( $response->content ) ); - $this->set_transient( 'changelog', $changelog ); - } - - $this->type->sections['changelog'] = $changelog; - - return true; - } - - /** - * Read and parse remote readme.txt. - * - * @return bool - */ - public function get_remote_readme() { - if ( ! file_exists( $this->type->local_path . 'readme.txt' ) && - ! file_exists( $this->type->local_path_extended . 'readme.txt' ) - ) { - return false; - } - - $response = $this->get_transient( 'readme' ); - - if ( ! $response ) { - $response = $this->api( '/repos/:owner/:repo/contents/readme.txt' ); - } - - if ( $response && isset( $response->content ) ) { - $parser = new Readme_Parser; - $response = $parser->parse_readme( base64_decode( $response->content ) ); - $this->set_transient( 'readme', $response ); - } - - if ( $this->validate_response( $response ) ) { - return false; - } - - $this->set_readme_info( $response ); - - return true; - } - - /** - * Read the repository meta from API. - * - * @return bool - */ - public function get_repo_meta() { - $response = $this->get_transient( 'meta' ); - $meta_query = '?q=' . $this->type->repo . '+user:' . $this->type->owner; - - if ( ! $response ) { - $response = $this->api( '/search/repositories' . $meta_query ); - - if ( $response ) { - $this->set_transient( 'meta', $response ); - } - } - - if ( $this->validate_response( $response ) || empty( $response->items ) ) { - return false; - } - - $this->type->repo_meta = $response->items[0]; - $this->_add_meta_repo_object(); - $this->get_remote_branches(); - - return true; - } - - /** - * Create array of branches and download links as array. - * - * @return bool - */ - public function get_remote_branches() { - $branches = array(); - $response = $this->get_transient( 'branches' ); - - if ( ! $response ) { - $response = $this->api( '/repos/:owner/:repo/branches' ); - - if ( $response ) { - foreach ( $response as $branch ) { - $branches[ $branch->name ] = $this->construct_download_link( false, $branch->name ); - } - $this->type->branches = $branches; - $this->set_transient( 'branches', $branches ); - return true; - } - } - - if ( $this->validate_response( $response ) ) { - return false; - } - - $this->type->branches = $response; - - return true; - } - - /** - * Construct $this->type->download_link using Repository Contents API - * @url http://developer.github.com/v3/repos/contents/#get-archive-link - * - * @param boolean $rollback for theme rollback - * @param boolean $branch_switch for direct branch changing - * - * @return string $endpoint - */ - public function construct_download_link( $rollback = false, $branch_switch = false ) { - /* - * Check if using GitHub Self-Hosted. - */ - if ( ! empty( $this->type->enterprise ) ) { - $github_base = $this->type->enterprise; - } else { - $github_base = 'https://api.github.com'; - } - - $download_link_base = implode( '/', array( $github_base, 'repos', $this->type->owner, $this->type->repo, 'zipball/' ) ); - $endpoint = ''; - - /* - * Check for rollback. - */ - if ( ! empty( $_GET['rollback'] ) && - ( isset( $_GET['action'] ) && 'upgrade-theme' === $_GET['action'] ) && - ( isset( $_GET['theme'] ) && $_GET['theme'] === $this->type->repo ) - ) { - $endpoint .= $rollback; - - /* - * For users wanting to update against branch other than master - * or if not using tags, else use newest_tag. - */ - } elseif ( 'master' != $this->type->branch || empty( $this->type->tags ) ) { - $endpoint .= $this->type->branch; - } else { - $endpoint .= $this->type->newest_tag; - } - - /* - * Create endpoint for branch switching. - */ - if ( $branch_switch ) { - $endpoint = $branch_switch; - } - - $asset = $this->get_asset(); - if ( $asset && ! $branch_switch ) { - return $asset; - } - - if ( ! empty( parent::$options[ $this->type->repo ] ) ) { - $endpoint = add_query_arg( 'access_token', parent::$options[ $this->type->repo ], $endpoint ); - } elseif ( ! empty( parent::$options['github_access_token'] ) && empty( $this->type->enterprise ) ) { - $endpoint = add_query_arg( 'access_token', parent::$options['github_access_token'], $endpoint ); - } - - return $download_link_base . $endpoint; - } - - /** - * Add remote data to type object. - */ - private function _add_meta_repo_object() { - $this->type->rating = $this->make_rating( $this->type->repo_meta ); - $this->type->last_updated = $this->type->repo_meta->pushed_at; - $this->type->num_ratings = $this->type->repo_meta->watchers; - $this->type->private = $this->type->repo_meta->private; - } - - /** - * Create GitHub API endpoints. - * - * @param $git object - * @param $endpoint string - * - * @return string $endpoint - */ - protected function add_endpoints( $git, $endpoint ) { - if ( ! empty( parent::$options[ $git->type->repo ] ) ) { - $endpoint = add_query_arg( 'access_token', parent::$options[ $git->type->repo ], $endpoint ); - } elseif ( ! empty( parent::$options['github_access_token'] ) ) { - $endpoint = add_query_arg( 'access_token', parent::$options['github_access_token'], $endpoint ); - } - - /* - * If a branch has been given, only check that for the remote info. - * If it's not been given, GitHub will use the Default branch. - */ - if ( ! empty( $git->type->branch ) ) { - $endpoint = add_query_arg( 'ref', $git->type->branch, $endpoint ); - } - - /* - * If using GitHub Self-Hosted header return this endpoint. - */ - if ( ! empty( $git->type->enterprise ) ) { - return $git->type->enterprise . remove_query_arg( 'access_token', $endpoint ); - } - - return $endpoint; - } - - /** - * Calculate and store time until rate limit reset. - * - * @param $response - * @param $repo - */ - protected static function _ratelimit_reset( $response, $repo ) { - if ( isset( $response['headers']['x-ratelimit-reset'] ) ) { - $reset = (integer) $response['headers']['x-ratelimit-reset']; - $wait = date( 'i', $reset - time() ); - parent::$error_code[ $repo ] = array_merge( parent::$error_code[ $repo ], array( 'git' => 'github', 'wait' => $wait ) ); - } - } - - /** - * Get uploaded release asset to use in place of tagged release. - * - * @return bool|string - */ - protected function get_asset() { - if ( empty( $this->type->newest_tag ) ) { - return false; - } - $response = $this->get_transient( 'asset' ); - - if ( ! $response ) { - $response = $this->api( '/repos/:owner/:repo/releases/latest' ); - $this->set_transient( 'asset' , $response ); - } - - if ( $this->validate_response( $response ) ) { - return false; - } - - if ( $response instanceof \stdClass ) { - - if ( empty( $response->assets ) ) { - $response = new \stdClass(); - $response->message = false; - $this->set_transient( 'asset', $response ); - return false; - } - foreach ( (array) $response->assets as $asset ) { - if ( isset ( $asset->browser_download_url ) && - false !== stristr( $asset->browser_download_url, $this->type->newest_tag ) - ) { - $this->set_transient( 'asset', $asset->browser_download_url ); - $response = $asset->browser_download_url; - } - } - } - - if ( ! is_string( $response ) ) { - return false; - } - - if ( false !== stristr( $response, $this->type->newest_tag ) ) { - if ( ! empty( parent::$options[ $this->type->repo ] ) ) { - $response = add_query_arg( 'access_token', parent::$options[ $this->type->repo ], $response ); - } elseif ( ! empty( parent::$options['github_access_token'] ) && empty( $this->type->enterprise ) ) { - $response = add_query_arg( 'access_token', parent::$options['github_access_token'], $response ); - } - - return $response; - } - } - -} diff --git a/github/src/GitHub_Updater/GitLab_API.php b/github/src/GitHub_Updater/GitLab_API.php deleted file mode 100644 index 32e585d..0000000 --- a/github/src/GitHub_Updater/GitLab_API.php +++ /dev/null @@ -1,431 +0,0 @@ -type = $type; - parent::$hours = 12; - - if ( ! isset( self::$options['gitlab_private_token'] ) ) { - self::$options['gitlab_private_token'] = null; - } - if ( ! isset( self::$options['gitlab_enterprise_token'] ) ) { - self::$options['gitlab_enterprise_token'] = null; - } - if ( - empty( self::$options['gitlab_private_token'] ) || - ( empty( self::$options['gitlab_enterprise_token'] ) && ! empty( $type->enterprise ) ) - ) { - Messages::create_error_message( 'gitlab' ); - } - add_site_option( 'github_updater', self::$options ); - } - - /** - * Read the remote file and parse headers. - * - * @param $file - * - * @return bool - */ - public function get_remote_info( $file ) { - $response = $this->get_transient( $file ); - - if ( ! $response ) { - $id = $this->get_gitlab_id(); - self::$method = 'file'; - - if ( empty( $this->type->branch ) ) { - $this->type->branch = 'master'; - } - - $response = $this->api( '/projects/' . $id . '/repository/files?file_path=' . $file ); - - if ( empty( $response ) ) { - return false; - } - - if ( $response ) { - $contents = base64_decode( $response->content ); - $response = $this->get_file_headers( $contents, $this->type->type ); - $this->set_transient( $file, $response ); - } - } - - if ( $this->validate_response( $response ) || ! is_array( $response ) ) { - return false; - } - - $this->set_file_info( $response, 'GitLab' ); - - return true; - } - - /** - * Get remote info for tags. - * - * @return bool - */ - public function get_remote_tag() { - $repo_type = $this->return_repo_type(); - $response = $this->get_transient( 'tags' ); - - - if ( ! $response ) { - $id = $this->get_gitlab_id(); - self::$method = 'tags'; - $response = $this->api( '/projects/' . $id . '/repository/tags' ); - - if ( ! $response ) { - $response = new \stdClass(); - $response->message = 'No tags found'; - } - - if ( $response ) { - $this->set_transient( 'tags', $response ); - } - } - - if ( $this->validate_response( $response ) ) { - return false; - } - - $this->parse_tags( $response, $repo_type ); - - return true; - } - - /** - * Read the remote CHANGES.md file. - * - * @param $changes - * - * @return bool - */ - public function get_remote_changes( $changes ) { - $response = $this->get_transient( 'changes' ); - - if ( ! $response ) { - $id = $this->get_gitlab_id(); - self::$method = 'changes'; - $response = $this->api( '/projects/' . $id . '/repository/files?file_path=' . $changes ); - - if ( $response ) { - $this->set_transient( 'changes', $response ); - } - } - - if ( $this->validate_response( $response ) ) { - return false; - } - - $changelog = $this->get_transient( 'changelog' ); - - if ( ! $changelog ) { - $parser = new \Parsedown; - $changelog = $parser->text( base64_decode( $response->content ) ); - $this->set_transient( 'changelog', $changelog ); - } - - $this->type->sections['changelog'] = $changelog; - - return true; - } - - /** - * Read and parse remote readme.txt. - * - * @return bool - */ - public function get_remote_readme() { - if ( ! file_exists( $this->type->local_path . 'readme.txt' ) && - ! file_exists( $this->type->local_path_extended . 'readme.txt' ) - ) { - return false; - } - - $response = $this->get_transient( 'readme' ); - - if ( ! $response ) { - $id = $this->get_gitlab_id(); - self::$method = 'readme'; - $response = $this->api( '/projects/' . $id . '/repository/files?file_path=readme.txt' ); - - if ( $response ) { - $parser = new Readme_Parser; - $response = $parser->parse_readme( base64_decode( $response->content ) ); - $this->set_transient( 'readme', $response ); - } - } - - - if ( $this->validate_response( $response ) ) { - return false; - } - - $this->set_readme_info( $response ); - - return true; - } - - /** - * Read the repository meta from API. - * - * @return bool - */ - public function get_repo_meta() { - - $response = $this->get_transient( 'meta' ); - - if ( ! $response ) { - self::$method = 'meta'; - $projects = $this->get_transient( 'projects' ); - - // exit if transient is empty - if ( ! $projects ) { - return false; - } - - foreach ( $projects as $project ) { - if ( $this->type->repo === $project->name ) { - $response = $project; - } - } - - if ( $response ) { - $this->set_transient( 'meta', $response ); - } - } - - if ( $this->validate_response( $response ) ) { - return false; - } - - $this->type->repo_meta = $response; - $this->_add_meta_repo_object(); - $this->get_remote_branches(); - - return true; - } - - /** - * Create array of branches and download links as array. - * - * @return bool - */ - public function get_remote_branches() { - $branches = array(); - $response = $this->get_transient( 'branches' ); - - if ( ! $response ) { - $id = $this->get_gitlab_id(); - self::$method = 'branches'; - $response = $this->api( '/projects/' . $id . '/repository/branches' ); - - if ( $response ) { - foreach ( $response as $branch ) { - $branches[ $branch->name ] = $this->construct_download_link( false, $branch->name ); - } - $this->type->branches = $branches; - $this->set_transient( 'branches', $branches ); - return true; - } - } - - if ( $this->validate_response( $response ) ) { - return false; - } - - $this->type->branches = $response; - - return true; - } - - /** - * Construct $this->type->download_link using GitLab API. - * - * @param boolean $rollback for theme rollback - * @param boolean $branch_switch for direct branch changing - * - * @return string $endpoint - */ - public function construct_download_link( $rollback = false, $branch_switch = false ) { - /* - * Check if using GitLab CE/Enterprise. - */ - if ( ! empty( $this->type->enterprise ) ) { - $gitlab_base = $this->type->enterprise; - } else { - $gitlab_base = 'https://gitlab.com'; - } - - $download_link_base = implode( '/', array( $gitlab_base, $this->type->owner, $this->type->repo, 'repository/archive.zip' ) ); - $endpoint = ''; - - /* - * Check for rollback. - */ - if ( ! empty( $_GET['rollback'] ) && - ( isset( $_GET['action'] ) && 'upgrade-theme' === $_GET['action'] ) && - ( isset( $_GET['theme'] ) && $_GET['theme'] === $this->type->repo ) - ) { - $endpoint .= $rollback; - } elseif ( ! empty( $this->type->branch ) ) { - $endpoint = add_query_arg( 'ref', $this->type->branch, $endpoint ); - } - - /* - * If a branch has been given, only check that for the remote info. - * If it's not been given, GitLab will use the Default branch. - * If branch is master and tags are used, use newest tag. - */ - if ( 'master' === $this->type->branch && ! empty( $this->type->tags ) ) { - $endpoint = remove_query_arg( 'ref', $endpoint ); - $endpoint = add_query_arg( 'ref', $this->type->newest_tag, $endpoint ); - } - - /* - * Create endpoint for branch switching. - */ - if ( $branch_switch ) { - $endpoint = remove_query_arg( 'ref', $endpoint ); - $endpoint = add_query_arg( 'ref', $branch_switch, $endpoint ); - } - - if ( ! empty( parent::$options[ 'gitlab_private_token' ] ) ) { - $endpoint = add_query_arg( 'private_token', parent::$options['gitlab_private_token'], $endpoint ); - } - - /* - * If using GitLab CE/Enterprise header return this endpoint. - */ - if ( ! empty( $this->type->enterprise ) ) { - $endpoint = remove_query_arg( 'private_token', $endpoint ); - if ( ! empty( parent::$options['gitlab_enterprise_token'] ) ) { - $endpoint = add_query_arg( 'private_token', parent::$options['gitlab_enterprise_token'], $endpoint ); - } - - return $this->type->enterprise . $endpoint; - } - - - return $download_link_base . $endpoint; - } - - /** - * Add remote data to type object. - */ - private function _add_meta_repo_object() { - //$this->type->rating = $this->make_rating( $this->type->repo_meta ); - $this->type->last_updated = $this->type->repo_meta->last_activity_at; - //$this->type->num_ratings = $this->type->repo_meta->watchers; - $this->type->private = ! $this->type->repo_meta->public; - } - - /** - * Create GitLab API endpoints. - * - * @param $git object - * @param $endpoint string - * - * @return string - */ - protected function add_endpoints( $git, $endpoint ) { - if ( ! empty( parent::$options['gitlab_private_token'] ) ) { - $endpoint = add_query_arg( 'private_token', parent::$options['gitlab_private_token'], $endpoint ); - } - - switch ( self::$method ) { - case 'projects': - case 'meta': - case 'tags': - break; - case 'file': - case 'changes': - case 'readme': - $endpoint = add_query_arg( 'ref', $git->type->branch, $endpoint ); - break; - default: - break; - } - - /* - * If using GitLab CE/Enterprise header return this endpoint. - */ - if ( ! empty( $git->type->enterprise ) ) { - $endpoint = remove_query_arg( 'private_token', $endpoint ); - if ( ! empty( parent::$options['gitlab_enterprise_token'] ) ) { - $endpoint = add_query_arg( 'private_token', parent::$options['gitlab_enterprise_token'], $endpoint ); - } - - return $git->type->enterprise . $endpoint; - } - - return $endpoint; - } - - /** - * Get GitLab project ID. - * - * @return bool|null - */ - public function get_gitlab_id() { - $id = null; - $response = $this->get_transient( 'projects' ); - - if ( ! $response ) { - self::$method = 'projects'; - $response = $this->api( '/projects' ); - if ( empty( $response ) ) { - $id = rtrim( urlencode( $this->type->slug ), '.php' ); - return $id; - } - } - - foreach ( $response as $project ) { - if ( $this->type->repo === $project->name ) { - $id = $project->id; - $this->set_transient( 'projects', $response ); - } - } - - return $id; - } - -} diff --git a/github/src/GitHub_Updater/Install.php b/github/src/GitHub_Updater/Install.php deleted file mode 100644 index f971212..0000000 --- a/github/src/GitHub_Updater/Install.php +++ /dev/null @@ -1,392 +0,0 @@ -/ directly from GitHub Updater. - * - * Class Install - * @package Fragen\GitHub_Updater - */ -class Install extends Base { - - /** - * Class options. - * - * @var array - */ - protected static $install = array(); - - /** - * Constructor. - * Need class-wp-upgrader.php for upgrade classes. - * - * @param $type - */ - public function __construct( $type ) { - require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; - $this->install( $type ); - - wp_enqueue_script( 'ghu-install', plugins_url( basename( dirname( dirname( __DIR__ ) ) ) . '/js/ghu_install.js' ), array(), false, true ); - } - - /** - * Install remote plugin or theme. - * - * @param $type - * - * @return bool - */ - public function install( $type ) { - - if ( isset( $_POST['option_page'] ) && 'github_updater_install' == $_POST['option_page'] ) { - if ( empty( $_POST['github_updater_branch'] ) ) { - $_POST['github_updater_branch'] = 'master'; - } - - /* - * Exit early if no repo entered. - */ - if ( empty( $_POST['github_updater_repo'] ) ) { - echo '

'; - _e( 'A repository URI is required.', 'github-updater' ); - echo '

'; - - return false; - } - - /* - * Transform URI to owner/repo - */ - $headers = Base::parse_header_uri( $_POST['github_updater_repo'] ); - $_POST['github_updater_repo'] = $headers['owner_repo']; - - self::$install = Settings::sanitize( $_POST ); - self::$install['repo'] = $headers['repo']; - - /* - * Create GitHub endpoint. - * Save Access Token if present. - * Check for GitHub Self-Hosted. - */ - if ( 'github' === self::$install['github_updater_api'] ) { - - if ( 'github.com' === $headers['host'] || empty( $headers['host'] ) ) { - $github_base = 'https://api.github.com'; - $headers['host'] = 'github.com'; - } else { - $github_base = $headers['base_uri'] . '/api/v3'; - } - - self::$install['download_link'] = $github_base . '/repos/' . self::$install['github_updater_repo'] . '/zipball/' . self::$install['github_updater_branch']; - - /* - * If asset is entered install it. - */ - if ( false !== stristr( $headers['path'], 'releases/download' ) ) { - self::$install['download_link'] = $headers['uri']; - } - - if ( ! empty( self::$install['github_access_token'] ) ) { - self::$install['download_link'] = add_query_arg( 'access_token', self::$install['github_access_token'], self::$install['download_link'] ); - parent::$options[ self::$install['repo'] ] = self::$install['github_access_token']; - } elseif ( ! empty( parent::$options['github_access_token'] ) && - ( 'github.com' === $headers['host'] || empty( $headers['host'] ) ) - ) { - self::$install['download_link'] = add_query_arg( 'access_token', parent::$options['github_access_token'], self::$install['download_link'] ); - } - } - - /* - * Create Bitbucket endpoint and instantiate class Bitbucket_API. - * Save private setting if present. - * Ensures `maybe_authenticate_http()` is available. - */ - if ( 'bitbucket' === self::$install['github_updater_api'] ) { - - self::$install['download_link'] = 'https://bitbucket.org/' . self::$install['github_updater_repo'] . '/get/' . self::$install['github_updater_branch'] . '.zip'; - if ( isset( self::$install['is_private'] ) ) { - parent::$options[ self::$install['repo'] ] = 1; - } - - new Bitbucket_API( (object) $type ); - } - - /* - * Create GitLab endpoint. - * Check for GitLab Self-Hosted. - */ - if ( 'gitlab' === self::$install['github_updater_api'] ) { - - if ( 'gitlab.com' === $headers['host'] || empty( $headers['host'] ) ) { - $gitlab_base = 'https://gitlab.com'; - $headers['host'] = 'gitlab.com'; - } else { - $gitlab_base = $headers['base_uri']; - } - - self::$install['download_link'] = implode( '/', array( $gitlab_base, self::$install['github_updater_repo'], 'repository/archive.zip' ) ); - self::$install['download_link'] = add_query_arg( 'ref', self::$install['github_updater_branch'], self::$install['download_link'] ); - - if ( ! empty( self::$install['gitlab_private_token'] ) ) { - self::$install['download_link'] = add_query_arg( 'private_token', self::$install['gitlab_private_token'], self::$install['download_link'] ); - - if ( 'gitlab.com' === $headers['host'] ) { - parent::$options['gitlab_private_token'] = self::$install['gitlab_private_token']; - } else { - parent::$options['gitlab_enterprise_token'] = self::$install['gitlab_private_token']; - } - } elseif ( ! empty( parent::$options['gitlab_private_token'] ) ) { - self::$install['download_link'] = add_query_arg( 'private_token', parent::$options['gitlab_private_token'], self::$install['download_link'] ); - } - } - - parent::$options['github_updater_install_repo'] = self::$install['repo']; - if ( ( defined( 'GITHUB_UPDATER_EXTENDED_NAMING' ) && GITHUB_UPDATER_EXTENDED_NAMING ) && - 'plugin' === $type - ) { - parent::$options['github_updater_install_repo'] = implode( '-', array( self::$install['github_updater_api'], $headers['owner'], self::$install['repo'] ) ); - } - - update_site_option( 'github_updater', parent::$options ); - $url = self::$install['download_link']; - $nonce = wp_nonce_url( $url ); - - if ( 'plugin' === $type ) { - $plugin = self::$install['repo']; - - /* - * Create a new instance of Plugin_Upgrader. - */ - $upgrader = new \Plugin_Upgrader( $skin = new \Plugin_Installer_Skin( compact( 'type', 'title', 'url', 'nonce', 'plugin', 'api' ) ) ); - } - - if ( 'theme' === $type ) { - $theme = self::$install['repo']; - - /* - * Create a new instance of Theme_Upgrader. - */ - $upgrader = new \Theme_Upgrader( $skin = new \Theme_Installer_Skin( compact( 'type', 'title', 'url', 'nonce', 'theme', 'api' ) ) ); - } - - /* - * Perform the action and install the plugin from the $source urldecode(). - * Flush cache so we can make sure that the installed plugins/themes list is always up to date. - */ - $upgrader->install( $url ); - wp_cache_flush(); - } - - if ( ! isset( $_POST['option_page'] ) || ! ( 'github_updater_install' === $_POST['option_page'] ) ) { - $this->create_form( $type ); - } - } - - /** - * Create Install Plugin or Install Theme page. - * - * @param $type - */ - public function create_form( $type ) { - $this->register_settings( $type ); - ?> -
- -
- - - - - - - - - - - - - -
-

- ' . $repo['name'] . '' - ); - echo ' ' . $repo['code']; - ?> - -
- '; - printf( - __( 'It looks like you are running into GitHub API rate limits. Be sure and configure a %sPersonal Access Token%s to avoid this issue.', 'github-updater' ), - '', - '' - ); - ?> - - -
- - -

-
- -
-

- -

-
- config = $this->get_plugin_meta(); - - if ( empty( $this->config ) ) { - return false; - } - if ( isset( $_GET['force-check'] ) ) { - $this->delete_all_transients( 'plugins' ); - } - - foreach ( (array) $this->config as $plugin ) { - $this->repo_api = null; - switch( $plugin->type ) { - case 'github_plugin': - $this->repo_api = new GitHub_API( $plugin ); - break; - case 'bitbucket_plugin': - $this->repo_api = new Bitbucket_API( $plugin ); - break; - case 'gitlab_plugin'; - $this->repo_api = new GitLab_API( $plugin ); - break; - } - - if ( is_null( $this->repo_api ) ) { - continue; - } - - $this->{$plugin->type} = $plugin; - $this->set_defaults( $plugin->type ); - - if ( $this->repo_api->get_remote_info( basename( $plugin->slug ) ) ) { - $this->repo_api->get_repo_meta(); - $this->repo_api->get_remote_tag(); - $changelog = $this->get_changelog_filename( $plugin->type ); - if ( $changelog ) { - $this->repo_api->get_remote_changes( $changelog ); - } - $this->repo_api->get_remote_readme(); - $plugin->download_link = $this->repo_api->construct_download_link(); - } - - /* - * Update plugin transient with rollback (branch switching) data. - */ - if ( ! empty( $_GET['rollback'] ) && - ( isset( $_GET['plugin'] ) && $_GET['plugin'] === $plugin->slug ) - ) { - $this->tag = $_GET['rollback']; - $updates_transient = get_site_transient('update_plugins'); - $rollback = array( - 'slug' => $plugin->repo, - 'plugin' => $plugin->slug, - 'new_version' => $this->tag, - 'url' => $plugin->uri, - 'package' => $this->repo_api->construct_download_link( false, $this->tag ), - ); - $updates_transient->response[ $plugin->slug ] = (object) $rollback; - set_site_transient( 'update_plugins', $updates_transient ); - } - - add_action( "after_plugin_row_$plugin->slug", array( &$this, 'wp_plugin_update_row' ), 15, 3 ); - } - - $this->make_force_check_transient( 'plugins' ); - - add_filter( 'plugin_row_meta', array( &$this, 'plugin_row_meta' ), 10, 2 ); - add_filter( 'pre_set_site_transient_update_plugins', array( &$this, 'pre_set_site_transient_update_plugins' ) ); - add_filter( 'plugins_api', array( &$this, 'plugins_api' ), 99, 3 ); - add_filter( 'upgrader_source_selection', array( &$this, 'upgrader_source_selection' ), 10, 3 ); - add_filter( 'http_request_args', array( 'Fragen\\GitHub_Updater\\API', 'http_request_args' ), 10, 2 ); - - Settings::$ghu_plugins = $this->config; - } - - - /** - * Add branch switch row to plugins page. - * - * @param $plugin_file - * @param $plugin_data - * - * @return bool - */ - public function wp_plugin_update_row( $plugin_file, $plugin_data ) { - $options = get_site_option( 'github_updater' ); - if ( empty( $options['branch_switch'] ) ) { - return false; - } - - $wp_list_table = _get_list_table( 'WP_MS_Themes_List_Table' ); - $plugin = $this->get_repo_slugs( dirname( $plugin_file ) ); - if ( ! empty( $plugin ) ) { - $id = $plugin['repo'] . '-id'; - $branches = isset( $this->config[ $plugin['repo'] ] ) ? $this->config[ $plugin['repo'] ]->branches : null; - } else { - return false; - } - - /* - * Get current branch. - */ - foreach ( parent::$git_servers as $server ) { - $branch_key = $server . ' Branch'; - $branch = ! empty( $plugin_data[ $branch_key ] ) ? $plugin_data[ $branch_key ] : 'master'; - if ( 'master' !== $branch ) { - break; - } - } - - /* - * Create after_plugin_row_ - */ - echo '
'; - - printf( __( 'Current branch is `%1$s`, try %2$sanother branch%3$s.', 'github-updater' ), - $branch, - '', - '' - ); - - print( '' ); - echo '
'; - } - - /** - * Add 'View details' link to plugins page. - * - * @param $links - * @param $file - * - * @return array $links - */ - public function plugin_row_meta( $links, $file ) { - $regex_pattern = '/(.*)<\/a>/'; - $repo = dirname ( $file ); - $slugs = $this->get_repo_slugs( $repo ); - $repo = ! empty( $slugs ) ? $slugs['repo'] : null; - - /* - * Sanity check for some commercial plugins. - */ - if ( ! isset( $links[2] ) ) { - return $links; - } - - preg_match( $regex_pattern, $links[2], $matches ); - - /* - * Remove 'Visit plugin site' link in favor or 'View details' link. - */ - if ( array_key_exists( $repo, $this->config ) ) { - if ( false !== stristr( $links[2], 'Visit plugin site' ) ) { - unset( $links[2] ); - $links[] = sprintf( '%s', - network_admin_url( 'plugin-install.php?tab=plugin-information&plugin=' . $repo . - '&TB_iframe=true&width=600&height=550' ), - __( 'View details', 'github-updater' ) - ); - } - } - - return $links; - } - - /** - * Put changelog in plugins_api, return WP.org data as appropriate - * - * @param $false - * @param $action - * @param $response - * - * @return mixed - */ - public function plugins_api( $false, $action, $response ) { - if ( ! ( 'plugin_information' === $action ) ) { - return $false; - } - - $wp_repo_data = get_site_transient( 'ghu-' . md5( $response->slug . 'wporg' ) ); - if ( ! $wp_repo_data ) { - $wp_repo_data = wp_remote_get( 'https://api.wordpress.org/plugins/info/1.0/' . $response->slug ); - if ( is_wp_error( $wp_repo_data ) ) { - return false; - } - - set_site_transient( 'ghu-' . md5( $response->slug . 'wporg' ), $wp_repo_data, ( 12 * HOUR_IN_SECONDS ) ); - } - - $wp_repo_body = unserialize( $wp_repo_data['body'] ); - if ( is_object( $wp_repo_body ) ) { - $response = $wp_repo_body; - } - - foreach ( (array) $this->config as $plugin ) { - /* - * Fix for extended naming. - */ - $repos = $this->get_repo_slugs( $plugin->repo ); - if ( $response->slug === $repos['repo'] || $response->slug === $repos['extended_repo'] ) { - $response->slug = $repos['repo']; - } - $contributors = array(); - if ( strtolower( $response->slug ) === strtolower( $plugin->repo ) ) { - if ( is_object( $wp_repo_body ) && 'master' === $plugin->branch ) { - return $response; - } - - $response->slug = $plugin->repo; - $response->plugin_name = $plugin->name; - $response->name = $plugin->name; - $response->author = $plugin->author; - $response->homepage = $plugin->uri; - $response->version = $plugin->remote_version; - $response->sections = $plugin->sections; - $response->requires = $plugin->requires; - $response->tested = $plugin->tested; - $response->downloaded = $plugin->downloaded; - $response->donate_link = $plugin->donate; - $response->last_updated = $plugin->last_updated; - $response->download_link = $plugin->download_link; - foreach ( $plugin->contributors as $contributor ) { - $contributors[ $contributor ] = '//profiles.wordpress.org/' . $contributor; - } - $response->contributors = $contributors; - if ( ! $plugin->private ) { - $response->num_ratings = $plugin->num_ratings; - $response->rating = $plugin->rating; - } - } - } - - return $response; - } - - /** - * Hook into pre_set_site_transient_update_plugins to update from GitHub. - * - * @param $transient - * - * @return mixed - */ - public function pre_set_site_transient_update_plugins( $transient ) { - - foreach ( (array) $this->config as $plugin ) { - $response = null; - - if ( $this->can_update( $plugin ) ) { - $response = array( - 'slug' => dirname( $plugin->slug ), - 'plugin' => $plugin->slug, - 'new_version' => $plugin->remote_version, - 'url' => $plugin->uri, - 'package' => $plugin->download_link, - ); - - /* - * If branch is 'master' and plugin is in wp.org repo then pull update from wp.org - */ - if ( $plugin->dot_org ) { - continue; - } - - /* - * Don't overwrite if branch switching. - */ - if ( $this->tag && - ( isset( $_GET['plugin'] ) && $plugin->slug === $_GET['plugin'] ) - ) { - continue; - } - - $transient->response[ $plugin->slug ] = (object) $response; - } - } - - return $transient; - } - -} diff --git a/github/src/GitHub_Updater/Readme_Parser.php b/github/src/GitHub_Updater/Readme_Parser.php deleted file mode 100644 index 10b5c15..0000000 --- a/github/src/GitHub_Updater/Readme_Parser.php +++ /dev/null @@ -1,82 +0,0 @@ -parse_readme_contents( $file_contents ); - } - - /** - * @param $text - * @param bool $markdown - * - * @return mixed|string - */ - public function filter_text( $text, $markdown = false ) { // fancy, Markdown - $text = trim($text); - $text = call_user_func( array( get_parent_class( $this ), 'code_trick' ), $text, $markdown ); // A better parser than Markdown's for: backticks -> CODE - - if ( $markdown ) { // Parse markdown. - $parser = new \Parsedown; - $text = $parser->text( $text ); - } - - $allowed = array( - 'a' => array( - 'href' => array(), - 'title' => array(), - 'rel' => array()), - 'blockquote' => array('cite' => array()), - 'br' => array(), - 'cite' => array(), - 'p' => array(), - 'code' => array(), - 'pre' => array(), - 'em' => array(), - 'strong' => array(), - 'ul' => array(), - 'ol' => array(), - 'li' => array(), - 'h3' => array(), - 'h4' => array() - ); - - $text = balanceTags($text); - - $text = wp_kses( $text, $allowed ); - $text = trim($text); - return $text; - } - -} diff --git a/github/src/GitHub_Updater/Remote_Update.php b/github/src/GitHub_Updater/Remote_Update.php deleted file mode 100644 index b8dc153..0000000 --- a/github/src/GitHub_Updater/Remote_Update.php +++ /dev/null @@ -1,101 +0,0 @@ -ghu_plugin_name : 'plugin_action_links_' . $this->ghu_plugin_name, array( $this, 'plugin_action_links' ) ); - } - - /** - * Define tabs for Settings page. - * By defining in a method, strings can be translated. - * - * @return array - */ - private function _settings_tabs() { - return array( - 'github_updater_settings' => __( 'Settings', 'github-updater' ), - 'github_updater_install_plugin' => __( 'Install Plugin', 'github-updater' ), - 'github_updater_install_theme' => __( 'Install Theme', 'github-updater' ), - ); - } - - /** - * Add options page. - */ - public function add_plugin_page() { - if ( is_multisite() ) { - add_submenu_page( - 'settings.php', - __( 'GitHub Updater Settings', 'github-updater' ), - __( 'GitHub Updater', 'github-updater' ), - 'manage_network', - 'github-updater', - array( $this, 'create_admin_page' ) - ); - } else { - add_options_page( - __( 'GitHub Updater Settings', 'github-updater' ), - __( 'GitHub Updater', 'github-updater' ), - 'manage_options', - 'github-updater', - array( $this, 'create_admin_page' ) - ); - } - } - - /** - * Renders setting tabs. - * - * Walks through the object's tabs array and prints them one by one. - * Provides the heading for the settings page. - * - * @access private - */ - private function _options_tabs() { - $current_tab = isset( $_GET['tab'] ) ? $_GET['tab'] : 'github_updater_settings'; - echo ''; - } - - /** - * Options page callback. - */ - public function create_admin_page() { - $action = is_multisite() ? 'edit.php?action=github-updater' : 'options.php'; - $tab = isset( $_GET['tab'] ) ? $_GET['tab'] : 'github_updater_settings'; - $logo = plugins_url( basename( dirname( dirname( __DIR__ ) ) ) . '/assets/GitHub_Updater_logo_small.png' ); - ?> -
-

- GitHub Updater logo -
-

- _options_tabs(); ?> - -

- - -
- -
- - - -
- ghu_tokens(); - - /* - * Add basic plugin settings. - */ - add_settings_section( - 'github_updater_settings', - __( 'GitHub Updater Settings', 'github-updater' ), - array( $this, 'print_section_ghu_settings'), - 'github_updater_install_settings' - ); - - add_settings_field( - 'branch_switch', - __( 'Enable Plugin Branch Switching', 'github-updater' ), - array( $this, 'token_callback_checkbox' ), - 'github_updater_install_settings', - 'github_updater_settings', - array( 'id' => 'branch_switch' ) - ); - - /* - * Add settings for GitHub Personal Access Token. - */ - add_settings_section( - 'github_access_token', - __( 'Personal GitHub Access Token', 'github-updater' ), - array( $this, 'print_section_github_access_token' ), - 'github_updater_install_settings' - ); - - add_settings_field( - 'github_access_token', - __( 'GitHub Access Token', 'github-updater' ), - array( $this, 'token_callback_text' ), - 'github_updater_install_settings', - 'github_access_token', - array( 'id' => 'github_access_token' ) - ); - - /* - * Show section for private GitHub repositories. - */ - if ( self::$github_private ) { - add_settings_section( - 'github_id', // ID - __( 'GitHub Private Settings', 'github-updater' ), // Title - array( $this, 'print_section_github_info' ), - 'github_updater_install_settings' // Page - ); - } - - /* - * Add setting for GitLab.com, GitLab Community Edition. - * or GitLab Enterprise Private Token. - */ - if ( self::$gitlab || self::$gitlab_enterprise ) { - add_settings_section( - 'gitlab_settings', - __( 'GitLab Private Settings', 'github-updater' ), - array( $this, 'print_section_gitlab_token' ), - 'github_updater_install_settings' - ); - } - - if ( self::$gitlab ) { - add_settings_field( - 'gitlab_private_token', - __( 'GitLab.com Private Token', 'github-updater' ), - array( $this, 'token_callback_text' ), - 'github_updater_install_settings', - 'gitlab_settings', - array( 'id' => 'gitlab_private_token' ) - ); - } - - if ( self::$gitlab_enterprise ) { - add_settings_field( - 'gitlab_enterprise_token', - __( 'GitLab CE or GitLab Enterprise Private Token', 'github-updater' ), - array( $this, 'token_callback_text' ), - 'github_updater_install_settings', - 'gitlab_settings', - array( 'id' => 'gitlab_enterprise_token' ) - ); - } - - /* - * Add settings for Bitbucket Username and Password. - */ - add_settings_section( - 'bitbucket_user', - __( 'Bitbucket Private Settings', 'github-updater' ), - array( $this, 'print_section_bitbucket_username' ), - 'github_updater_install_settings' - ); - - add_settings_field( - 'bitbucket_username', - __( 'Bitbucket Username', 'github-updater' ), - array( $this, 'token_callback_text' ), - 'github_updater_install_settings', - 'bitbucket_user', - array( 'id' => 'bitbucket_username' ) - ); - - add_settings_field( - 'bitbucket_password', - __( 'Bitbucket Password', 'github-updater' ), - array( $this, 'token_callback_text' ), - 'github_updater_install_settings', - 'bitbucket_user', - array( 'id' => 'bitbucket_password' ) - ); - - /* - * Show section for private Bitbucket repositories. - */ - if ( self::$bitbucket_private ) { - add_settings_section( - 'bitbucket_id', - __( 'Bitbucket Private Repositories', 'github-updater' ), - array( $this, 'print_section_bitbucket_info' ), - 'github_updater_install_settings' - ); - } - - /* - * Show if no private repositories are present. - */ - if ( ! self::$github_private && ! self::$bitbucket_private ) { - add_settings_section( - null, - __( 'No private repositories are installed.', 'github-updater' ), - array(), - 'github_updater_install_settings' - ); - } - - if ( isset( $_POST['github_updater'] ) && ! is_multisite() ) { - update_site_option( 'github_updater', self::sanitize( $_POST['github_updater'] ) ); - } - } - - /** - * Create and return settings fields for private repositories. - * - * @return void - */ - public function ghu_tokens() { - $ghu_options_keys = array(); - $ghu_tokens = array_merge( self::$ghu_plugins, self::$ghu_themes ); - - foreach ( $ghu_tokens as $token ) { - $type = ''; - $setting_field = array(); - $ghu_options_keys[ $token->repo ] = null; - - /* - * Check to see if it's a private repo and set variables. - */ - if ( $token->private ) { - if ( false !== strpos( $token->type, 'github' ) && ! self::$github_private ) { - self::$github_private = true; - } - if ( false !== strpos( $token->type, 'bitbucket' ) && ! self::$bitbucket_private ) { - self::$bitbucket_private = true; - } - } - - /* - * Set boolean if GitLab header found. - */ - if ( false !== strpos( $token->type, 'gitlab' ) && ! self::$gitlab ) { - self::$gitlab = true; - } - - /* - * Set boolean if GitLab CE/Enterprise header found. - */ - if ( $token->enterprise && ! self::$gitlab_enterprise ) { - self::$gitlab_enterprise = true; - } - - /* - * Next if not a private repo. - */ - if ( ! $token->private ) { - continue; - } - - if ( false !== strpos( $token->type, 'theme') ) { - $type = __( 'Theme:', 'github-updater' ) . ' '; - } - - $setting_field['id'] = $token->repo; - $setting_field['title'] = $type . $token->name; - $setting_field['page'] = 'github_updater_install_settings'; - - switch ( $token->type ) { - case ( strpos( $token->type, 'github' ) ): - $setting_field['section'] = 'github_id'; - $setting_field['callback_method'] = array( $this, 'token_callback_text' ); - $setting_field['callback'] = $token->repo; - break; - case( strpos( $token->type, 'bitbucket' ) ): - $setting_field['section'] = 'bitbucket_id'; - $setting_field['callback_method'] = array( $this, 'token_callback_checkbox' ); - $setting_field['callback'] = $token->repo; - break; - case ( strpos( $token->type, 'gitlab' ) ): - $setting_field['section'] = 'gitlab_id'; - $setting_field['callback_method'] = array( $this, 'token_callback_checkbox' ); - $setting_field['callback'] = $token->repo; - break; - } - - add_settings_field( - $setting_field['id'], - $setting_field['title'], - $setting_field['callback_method'], - $setting_field['page'], - $setting_field['section'], - array( 'id' => $setting_field['callback'] ) - ); - } - - /* - * Unset options that are no longer present and update options. - */ - $ghu_unset_keys = array_diff_key( parent::$options, $ghu_options_keys ); - unset( $ghu_unset_keys['github_access_token'] ); - unset( $ghu_unset_keys['branch_switch'] ); - unset( $ghu_unset_keys['bitbucket_username'] ); - unset( $ghu_unset_keys['bitbucket_password'] ); - if ( self::$gitlab ) { - unset( $ghu_unset_keys['gitlab_private_token'] ); - } - if ( self::$gitlab_enterprise ) { - unset( $ghu_unset_keys['gitlab_enterprise_token'] ); - } - if ( ! empty( $ghu_unset_keys ) ) { - foreach ( $ghu_unset_keys as $key => $value ) { - unset( parent::$options [ $key ] ); - } - update_site_option( 'github_updater', parent::$options ); - } - } - - /** - * Sanitize each setting field as needed. - * - * @param array $input Contains all settings fields as array keys - * - * @return array - */ - public static function sanitize( $input ) { - $new_input = array(); - foreach ( (array) $input as $id => $value ) { - $new_input[ sanitize_key( $id ) ] = sanitize_text_field( $input[ $id ] ); - } - - return $new_input; - } - - /** - * Print the GitHub Updater text. - */ - public function print_section_ghu_settings() { - if ( defined( 'GITHUB_UPDATER_EXTENDED_NAMING' ) && GITHUB_UPDATER_EXTENDED_NAMING ) { - _e( 'Extended Naming is active.', 'github-updater' ); - } - if ( ! defined( 'GITHUB_UPDATER_EXTENDED_NAMING' ) || - ( defined( 'GITHUB_UPDATER_EXTENDED_NAMING' ) && ! GITHUB_UPDATER_EXTENDED_NAMING ) - ) { - _e( 'Extended Naming is not active.', 'github-updater' ); - } - printf( '
' . __( 'Extended Naming renames plugin directories %s to prevent possible conflicts with WP.org plugins.', 'github-updater'), '<git>-<owner>-<repo>'); - printf( '
' . __( 'Activate Extended Naming by setting %s', 'github-updater' ), 'define( \'GITHUB_UPDATER_EXTENDED_NAMING\', true );' ); - print( '

' . __( 'Check to enable branch switching from the Plugins page.', 'github-updater' ) . '

'); - } - - /** - * Print the GitHub text. - */ - public function print_section_github_info() { - _e( 'Enter your GitHub Access Token. Leave empty for public repositories.', 'github-updater' ); - } - - /** - * Print the GitHub Personal Access Token text. - */ - public function print_section_github_access_token() { - _e( 'Enter your personal GitHub Access Token to avoid API access limits.', 'github-updater' ); - } - - /** - * Print the Bitbucket repo text. - */ - public function print_section_bitbucket_info() { - _e( 'Check box if private repository. Leave unchecked for public repositories.', 'github-updater' ); - } - - /** - * Print the Bitbucket user/pass text. - */ - public function print_section_bitbucket_username() { - _e( 'Enter your personal Bitbucket username and password.', 'github-updater' ); - } - - /** - * Print the GitLab Private Token text. - */ - public function print_section_gitlab_token() { - _e( 'Enter your GitLab.com, GitLab CE, or GitLab Enterprise Private Token.', 'github-updater' ); - } - - /** - * Get the settings option array and print one of its values. - * - * @param $args - */ - public function token_callback_text( $args ) { - $name = isset( parent::$options[ $args['id' ] ] ) ? esc_attr( parent::$options[ $args['id'] ] ) : ''; - $type = stristr( $args['id'], 'password' ) ? 'password' : 'text'; - ?> - - - - 'github-updater', - 'updated' => 'true', - ), - network_admin_url( 'settings.php' ) - ) ); - exit; - } - - /** - * Add setting link to plugin page. - * Applied to the list of links to display on the plugins page (beside the activate/deactivate links). - * - * @link http://codex.wordpress.org/Plugin_API/Filter_Reference/plugin_action_links_(plugin_file_name) - * - * @param $links - * - * @return array - */ - public function plugin_action_links( $links ) { - $settings_page = is_multisite() ? 'settings.php' : 'options-general.php'; - $link = array( '' . __( 'Settings', 'github-updater' ) . '' ); - - return array_merge( $links, $link ); - } - -} diff --git a/github/src/GitHub_Updater/Theme.php b/github/src/GitHub_Updater/Theme.php deleted file mode 100644 index d05bfd7..0000000 --- a/github/src/GitHub_Updater/Theme.php +++ /dev/null @@ -1,451 +0,0 @@ -config = $this->get_theme_meta(); - if ( empty( $this->config ) ) { - return false; - } - if ( isset( $_GET['force-check'] ) ) { - $this->delete_all_transients( 'themes' ); - } - - foreach ( (array) $this->config as $theme ) { - $this->repo_api = null; - switch( $theme->type ) { - case 'github_theme': - $this->repo_api = new GitHub_API( $theme ); - break; - case 'bitbucket_theme': - $this->repo_api = new Bitbucket_API( $theme ); - break; - case 'gitlab_theme': - $this->repo_api = new GitLab_API( $theme ); - break; - } - - if ( is_null( $this->repo_api ) ) { - continue; - } - - $this->{$theme->type} = $theme; - $this->set_defaults( $theme->type ); - - if ( $this->repo_api->get_remote_info( 'style.css' ) ) { - $this->repo_api->get_repo_meta(); - $this->repo_api->get_remote_tag(); - $changelog = $this->get_changelog_filename( $theme->type ); - if ( $changelog ) { - $this->repo_api->get_remote_changes( $changelog ); - } - $theme->download_link = $this->repo_api->construct_download_link(); - } - - /* - * Update theme transient with rollback data. - */ - if ( ! empty( $_GET['rollback'] ) && - ( isset( $_GET['theme'] ) && $_GET['theme'] === $theme->repo ) - ) { - $this->tag = $_GET['rollback']; - $updates_transient = get_site_transient('update_themes'); - $rollback = array( - 'new_version' => $this->tag, - 'url' => $theme->uri, - 'package' => $this->repo_api->construct_download_link( $this->tag, false ), - ); - $updates_transient->response[ $theme->repo ] = $rollback; - set_site_transient( 'update_themes', $updates_transient ); - } - - /* - * Remove WordPress update row in theme row, only in multisite. - * Add update row to theme row, only in multisite. - */ - if ( is_multisite() ) { - add_action( 'after_theme_row', array( &$this, 'remove_after_theme_row' ), 10, 2 ); - if ( ! $this->tag ) { - add_action( "after_theme_row_$theme->repo", array( &$this, 'wp_theme_update_row' ), 10, 2 ); - } - } - - } - - $this->make_force_check_transient( 'themes' ); - - if ( ! is_multisite() ) { - add_filter( 'wp_prepare_themes_for_js', array( &$this, 'customize_theme_update_html' ) ); - } - - $update = array( 'do-core-reinstall', 'do-core-upgrade' ); - if ( empty( $_GET['action'] ) || ! in_array( $_GET['action'], $update, true ) ) { - add_filter( 'pre_set_site_transient_update_themes', array( &$this, 'pre_set_site_transient_update_themes' ) ); - } - - add_filter( 'themes_api', array( &$this, 'themes_api' ), 99, 3 ); - add_filter( 'upgrader_source_selection', array( &$this, 'upgrader_source_selection' ), 10, 3 ); - add_filter( 'http_request_args', array( 'Fragen\\GitHub_Updater\\API', 'http_request_args' ), 10, 2 ); - - Settings::$ghu_themes = $this->config; - } - - - /** - * Put changelog in plugins_api, return WP.org data as appropriate. - * - * @param $false - * @param $action - * @param $response - * - * @return mixed - */ - public function themes_api( $false, $action, $response ) { - if ( ! ( 'theme_information' === $action ) ) { - return $false; - } - - /* - * Early return $false for adding themes from repo - */ - if ( isset( $response->fields ) && ! $response->fields['sections'] ) { - return $false; - } - - foreach ( (array) $this->config as $theme ) { - if ( $response->slug === $theme->repo ) { - $response->slug = $theme->repo; - $response->name = $theme->name; - $response->homepage = $theme->uri; - $response->version = $theme->remote_version; - $response->sections = $theme->sections; - $response->description = implode( "\n", $theme->sections ); - $response->author = $theme->author; - $response->preview_url = $theme->theme_uri; - $response->requires = $theme->requires; - $response->tested = $theme->tested; - $response->downloaded = $theme->downloaded; - $response->last_updated = $theme->last_updated; - $response->rating = $theme->rating; - $response->num_ratings = $theme->num_ratings; - if ( $theme->private ) { - add_action( 'admin_head', array( $this, 'remove_rating_in_private_repo' ) ); - } - } - } - add_action( 'admin_head', array( $this, 'fix_display_none_in_themes_api' ) ); - - return $response; - } - - /** - * Fix for new issue in 3.9 :-( - */ - public function fix_display_none_in_themes_api() { - echo ''; - } - - /** - * Remove star rating for private themes. - */ - public function remove_rating_in_private_repo() { - echo ''; - } - - /** - * Add custom theme update row, from /wp-admin/includes/update.php - * - * @author Seth Carstens - */ - public function wp_theme_update_row( $theme_key, $theme ) { - $current = get_site_transient( 'update_themes' ); - $themes_allowedtags = array( - 'a' => array( 'href' => array(), 'title' => array() ), - 'abbr' => array( 'title' => array() ), - 'acronym' => array( 'title' => array() ), - 'code' => array(), - 'em' => array(), - 'strong' => array(), - ); - $theme_name = wp_kses( $theme['Name'], $themes_allowedtags ); - $wp_list_table = _get_list_table( 'WP_MS_Themes_List_Table' ); - $install_url = self_admin_url( "theme-install.php" ); - $details_url = add_query_arg( - array( - 'tab' => 'theme-information', - 'theme' => $theme_key, - 'TB_iframe' => 'true', - 'width' => 270, - 'height' => 400 - ), - $install_url ); - - if ( isset( $current->up_to_date[ $theme_key ] ) ) { - $rollback = $current->up_to_date[ $theme_key ]['rollback']; - $rollback_keys = array_keys( $rollback ); - echo '
'; - _e( 'Theme is up-to-date!', 'github-updater' ); - echo ' '; - if ( count( $rollback ) > 0 ) { - array_shift( $rollback_keys ); //don't show newest tag, it should be release version - echo ''; - _e( 'Rollback to:', 'github-updater' ); - echo ' '; - // display last three tags - for ( $i = 0; $i < 3 ; $i++ ) { - $tag = array_shift( $rollback_keys ); - if ( empty( $tag ) ) { - break; - } - if ( $i > 0 ) { - echo ", "; - } - printf( '%s', - wp_nonce_url( self_admin_url( 'update.php?action=upgrade-theme&theme=' ) . $theme_key, 'upgrade-theme_' . $theme_key ), - '&rollback=' . urlencode( $tag ), - $tag - ); - } - } else { - _e( 'No previous tags to rollback to.', 'github-updater' ); - } - } - - if ( isset( $current->response[ $theme_key ] ) ) { - $r = $current->response[ $theme_key ]; - echo '
'; - if ( empty( $r['package'] ) ) { - printf( __( 'GitHub Updater shows a new version of %s available.', 'github-updater' ), - $theme_name - ); - printf( ' ', - esc_url( $details_url ), - esc_attr( $theme_name ) - ); - printf( __( 'View version %s details.', 'github-updater' ), - $r['new_version'] - ); - echo ''; - _e( 'Automatic update is unavailable for this theme.', 'github-updater' ); - echo ''; - } else { - printf( __( 'GitHub Updater shows a new version of %s available.', 'github-updater' ), - $theme_name - ); - printf( ' ', - esc_url( $details_url ), - esc_attr( $theme_name ) - ); - printf( __( 'View version %1$s details%2$s or %3$supdate now%4$s.', 'github-updater' ), - $r['new_version'], - '', - '', - '' - ); - } - - do_action( "in_theme_update_message-$theme_key", $theme, $r ); - } - echo '
'; - } - - /** - * Remove default after_theme_row_$stylesheet. - * - * @author @grappler - * - * @param $theme_key - * @param $theme - */ - public function remove_after_theme_row( $theme_key, $theme ) { - - foreach ( parent::$git_servers as $server ) { - $repo_header = $server . ' Theme URI'; - $repo_uri = $theme->get( $repo_header ); - if ( empty( $repo_uri ) ) { - continue; - } - - remove_action( "after_theme_row_$theme_key", 'wp_theme_update_row', 10 ); - } - } - - /** - * Call update theme messaging if needed for single site installation - * - * @author Seth Carstens - * - * @param $prepared_themes - * - * @return mixed - */ - public function customize_theme_update_html( $prepared_themes ) { - - foreach ( (array) $this->config as $theme ) { - if ( empty( $prepared_themes[ $theme->repo ] ) ) { - continue; - } - - if ( ! empty( $prepared_themes[ $theme->repo ]['hasUpdate'] ) ) { - $prepared_themes[ $theme->repo ]['update'] = $this->_append_theme_actions_content( $theme ); - } else { - $prepared_themes[ $theme->repo ]['description'] .= $this->_append_theme_actions_content( $theme ); - } - } - - return $prepared_themes; - } - - /** - * Create theme update messaging - * - * @author Seth Carstens - * - * @param object $theme - * - * @return string (content buffer) - */ - private function _append_theme_actions_content( $theme ) { - - $details_url = self_admin_url( "theme-install.php?tab=theme-information&theme=$theme->repo&TB_iframe=true&width=270&height=400" ); - $theme_update_transient = get_site_transient( 'update_themes' ); - - /** - * If the theme is outdated, display the custom theme updater content. - * If theme is not present in theme_update transient response ( theme is not up to date ) - */ - if ( empty( $theme_update_transient->up_to_date[$theme->repo] ) ) { - $update_url = wp_nonce_url( self_admin_url( 'update.php?action=upgrade-theme&theme=' ) . urlencode( $theme->repo ), 'upgrade-theme_' . $theme->repo ); - ob_start(); - ?> -
- name - ); - printf( ' ', - esc_url( $details_url ), - esc_attr( $theme->name ) - ); - printf( __( 'View version %1$s details%2$s or %3$supdate now%4$s.', 'github-updater' ), - $theme->remote_version, - '', - '', - '' - ); - ?> -
- repo ), 'upgrade-theme_' . $theme->repo ), '&rollback=' ); - - ?> -

', - '' - ); - ?> -

- - config as $theme ) { - if ( empty( $theme->uri ) ) { - continue; - } - - $update = array( - 'theme' => $theme->repo, - 'new_version' => $theme->remote_version, - 'url' => $theme->uri, - 'package' => $theme->download_link, - ); - - if ( $this->can_update( $theme ) ) { - $transient->response[ $theme->repo ] = $update; - } else { // up-to-date! - $transient->up_to_date[ $theme->repo ]['rollback'] = $theme->rollback; - $transient->up_to_date[ $theme->repo ]['response'] = $update; - } - } - - return $transient; - } - -} diff --git a/github/uninstall.php b/github/uninstall.php deleted file mode 100644 index e7ef29c..0000000 --- a/github/uninstall.php +++ /dev/null @@ -1,33 +0,0 @@ -Definitions = array(); - - # standardize line breaks - $text = str_replace("\r\n", "\n", $text); - $text = str_replace("\r", "\n", $text); - - # replace tabs with spaces - $text = str_replace("\t", ' ', $text); - - # remove surrounding line breaks - $text = trim($text, "\n"); - - # split text into lines - $lines = explode("\n", $text); - - # iterate through lines to identify blocks - $markup = $this->lines($lines); - - # trim line breaks - $markup = trim($markup, "\n"); - - return $markup; - } - - # - # Setters - # - - private $breaksEnabled; - - function setBreaksEnabled($breaksEnabled) - { - $this->breaksEnabled = $breaksEnabled; - - return $this; - } - - # - # Lines - # - - protected $BlockTypes = array( - '#' => array('Atx'), - '*' => array('Rule', 'List'), - '+' => array('List'), - '-' => array('Setext', 'Table', 'Rule', 'List'), - '0' => array('List'), - '1' => array('List'), - '2' => array('List'), - '3' => array('List'), - '4' => array('List'), - '5' => array('List'), - '6' => array('List'), - '7' => array('List'), - '8' => array('List'), - '9' => array('List'), - ':' => array('Table'), - '<' => array('Comment', 'Markup'), - '=' => array('Setext'), - '>' => array('Quote'), - '_' => array('Rule'), - '`' => array('FencedCode'), - '|' => array('Table'), - '~' => array('FencedCode'), - ); - - # ~ - - protected $DefinitionTypes = array( - '[' => array('Reference'), - ); - - # ~ - - protected $unmarkedBlockTypes = array( - 'CodeBlock', - ); - - # - # Blocks - # - - private function lines(array $lines) - { - $CurrentBlock = null; - - foreach ($lines as $line) - { - if (chop($line) === '') - { - if (isset($CurrentBlock)) - { - $CurrentBlock['interrupted'] = true; - } - - continue; - } - - $indent = 0; - - while (isset($line[$indent]) and $line[$indent] === ' ') - { - $indent ++; - } - - $text = $indent > 0 ? substr($line, $indent) : $line; - - # ~ - - $Line = array('body' => $line, 'indent' => $indent, 'text' => $text); - - # ~ - - if (isset($CurrentBlock['incomplete'])) - { - $Block = $this->{'addTo'.$CurrentBlock['type']}($Line, $CurrentBlock); - - if (isset($Block)) - { - $CurrentBlock = $Block; - - continue; - } - else - { - if (method_exists($this, 'complete'.$CurrentBlock['type'])) - { - $CurrentBlock = $this->{'complete'.$CurrentBlock['type']}($CurrentBlock); - } - - unset($CurrentBlock['incomplete']); - } - } - - # ~ - - $marker = $text[0]; - - if (isset($this->DefinitionTypes[$marker])) - { - foreach ($this->DefinitionTypes[$marker] as $definitionType) - { - $Definition = $this->{'identify'.$definitionType}($Line, $CurrentBlock); - - if (isset($Definition)) - { - $this->Definitions[$definitionType][$Definition['id']] = $Definition['data']; - - continue 2; - } - } - } - - # ~ - - $blockTypes = $this->unmarkedBlockTypes; - - if (isset($this->BlockTypes[$marker])) - { - foreach ($this->BlockTypes[$marker] as $blockType) - { - $blockTypes []= $blockType; - } - } - - # - # ~ - - foreach ($blockTypes as $blockType) - { - $Block = $this->{'identify'.$blockType}($Line, $CurrentBlock); - - if (isset($Block)) - { - $Block['type'] = $blockType; - - if ( ! isset($Block['identified'])) - { - $Elements []= $CurrentBlock['element']; - - $Block['identified'] = true; - } - - if (method_exists($this, 'addTo'.$blockType)) - { - $Block['incomplete'] = true; - } - - $CurrentBlock = $Block; - - continue 2; - } - } - - # ~ - - if (isset($CurrentBlock) and ! isset($CurrentBlock['type']) and ! isset($CurrentBlock['interrupted'])) - { - $CurrentBlock['element']['text'] .= "\n".$text; - } - else - { - $Elements []= $CurrentBlock['element']; - - $CurrentBlock = $this->buildParagraph($Line); - - $CurrentBlock['identified'] = true; - } - } - - # ~ - - if (isset($CurrentBlock['incomplete']) and method_exists($this, 'complete'.$CurrentBlock['type'])) - { - $CurrentBlock = $this->{'complete'.$CurrentBlock['type']}($CurrentBlock); - } - - # ~ - - $Elements []= $CurrentBlock['element']; - - unset($Elements[0]); - - # ~ - - $markup = $this->elements($Elements); - - # ~ - - return $markup; - } - - # - # Atx - - protected function identifyAtx($Line) - { - if (isset($Line['text'][1])) - { - $level = 1; - - while (isset($Line['text'][$level]) and $Line['text'][$level] === '#') - { - $level ++; - } - - $text = trim($Line['text'], '# '); - - $Block = array( - 'element' => array( - 'name' => 'h' . min(6, $level), - 'text' => $text, - 'handler' => 'line', - ), - ); - - return $Block; - } - } - - # - # Code - - protected function identifyCodeBlock($Line) - { - if ($Line['indent'] >= 4) - { - $text = substr($Line['body'], 4); - - $Block = array( - 'element' => array( - 'name' => 'pre', - 'handler' => 'element', - 'text' => array( - 'name' => 'code', - 'text' => $text, - ), - ), - ); - - return $Block; - } - } - - protected function addToCodeBlock($Line, $Block) - { - if ($Line['indent'] >= 4) - { - if (isset($Block['interrupted'])) - { - $Block['element']['text']['text'] .= "\n"; - - unset($Block['interrupted']); - } - - $Block['element']['text']['text'] .= "\n"; - - $text = substr($Line['body'], 4); - - $Block['element']['text']['text'] .= $text; - - return $Block; - } - } - - protected function completeCodeBlock($Block) - { - $text = $Block['element']['text']['text']; - - $text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8'); - - $Block['element']['text']['text'] = $text; - - return $Block; - } - - # - # Comment - - protected function identifyComment($Line) - { - if (isset($Line['text'][3]) and $Line['text'][3] === '-' and $Line['text'][2] === '-' and $Line['text'][1] === '!') - { - $Block = array( - 'element' => $Line['body'], - ); - - if (preg_match('/-->$/', $Line['text'])) - { - $Block['closed'] = true; - } - - return $Block; - } - } - - protected function addToComment($Line, array $Block) - { - if (isset($Block['closed'])) - { - return; - } - - $Block['element'] .= "\n" . $Line['body']; - - if (preg_match('/-->$/', $Line['text'])) - { - $Block['closed'] = true; - } - - return $Block; - } - - # - # Fenced Code - - protected function identifyFencedCode($Line) - { - if (preg_match('/^(['.$Line['text'][0].']{3,})[ ]*([\w-]+)?[ ]*$/', $Line['text'], $matches)) - { - $Element = array( - 'name' => 'code', - 'text' => '', - ); - - if (isset($matches[2])) - { - $class = 'language-'.$matches[2]; - - $Element['attributes'] = array( - 'class' => $class, - ); - } - - $Block = array( - 'char' => $Line['text'][0], - 'element' => array( - 'name' => 'pre', - 'handler' => 'element', - 'text' => $Element, - ), - ); - - return $Block; - } - } - - protected function addToFencedCode($Line, $Block) - { - if (isset($Block['complete'])) - { - return; - } - - if (isset($Block['interrupted'])) - { - $Block['element']['text']['text'] .= "\n"; - - unset($Block['interrupted']); - } - - if (preg_match('/^'.$Block['char'].'{3,}[ ]*$/', $Line['text'])) - { - $Block['element']['text']['text'] = substr($Block['element']['text']['text'], 1); - - $Block['complete'] = true; - - return $Block; - } - - $Block['element']['text']['text'] .= "\n".$Line['body'];; - - return $Block; - } - - protected function completeFencedCode($Block) - { - $text = $Block['element']['text']['text']; - - $text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8'); - - $Block['element']['text']['text'] = $text; - - return $Block; - } - - # - # List - - protected function identifyList($Line) - { - list($name, $pattern) = $Line['text'][0] <= '-' ? array('ul', '[*+-]') : array('ol', '[0-9]+[.]'); - - if (preg_match('/^('.$pattern.'[ ]+)(.*)/', $Line['text'], $matches)) - { - $Block = array( - 'indent' => $Line['indent'], - 'pattern' => $pattern, - 'element' => array( - 'name' => $name, - 'handler' => 'elements', - ), - ); - - $Block['li'] = array( - 'name' => 'li', - 'handler' => 'li', - 'text' => array( - $matches[2], - ), - ); - - $Block['element']['text'] []= & $Block['li']; - - return $Block; - } - } - - protected function addToList($Line, array $Block) - { - if ($Block['indent'] === $Line['indent'] and preg_match('/^'.$Block['pattern'].'[ ]+(.*)/', $Line['text'], $matches)) - { - if (isset($Block['interrupted'])) - { - $Block['li']['text'] []= ''; - - unset($Block['interrupted']); - } - - unset($Block['li']); - - $Block['li'] = array( - 'name' => 'li', - 'handler' => 'li', - 'text' => array( - $matches[1], - ), - ); - - $Block['element']['text'] []= & $Block['li']; - - return $Block; - } - - if ( ! isset($Block['interrupted'])) - { - $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']); - - $Block['li']['text'] []= $text; - - return $Block; - } - - if ($Line['indent'] > 0) - { - $Block['li']['text'] []= ''; - - $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']); - - $Block['li']['text'] []= $text; - - unset($Block['interrupted']); - - return $Block; - } - } - - # - # Quote - - protected function identifyQuote($Line) - { - if (preg_match('/^>[ ]?(.*)/', $Line['text'], $matches)) - { - $Block = array( - 'element' => array( - 'name' => 'blockquote', - 'handler' => 'lines', - 'text' => (array) $matches[1], - ), - ); - - return $Block; - } - } - - protected function addToQuote($Line, array $Block) - { - if ($Line['text'][0] === '>' and preg_match('/^>[ ]?(.*)/', $Line['text'], $matches)) - { - if (isset($Block['interrupted'])) - { - $Block['element']['text'] []= ''; - - unset($Block['interrupted']); - } - - $Block['element']['text'] []= $matches[1]; - - return $Block; - } - - if ( ! isset($Block['interrupted'])) - { - $Block['element']['text'] []= $Line['text']; - - return $Block; - } - } - - # - # Rule - - protected function identifyRule($Line) - { - if (preg_match('/^(['.$Line['text'][0].'])([ ]{0,2}\1){2,}[ ]*$/', $Line['text'])) - { - $Block = array( - 'element' => array( - 'name' => 'hr' - ), - ); - - return $Block; - } - } - - # - # Setext - - protected function identifySetext($Line, array $Block = null) - { - if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted'])) - { - return; - } - - if (chop($Line['text'], $Line['text'][0]) === '') - { - $Block['element']['name'] = $Line['text'][0] === '=' ? 'h1' : 'h2'; - - return $Block; - } - } - - # - # Markup - - protected function identifyMarkup($Line) - { - if (preg_match('/^<(\w[\w\d]*)(?:[ ][^>]*)?(\/?)[ ]*>/', $Line['text'], $matches)) - { - if (in_array($matches[1], $this->textLevelElements)) - { - return; - } - - $Block = array( - 'element' => $Line['body'], - ); - - if ($matches[2] or $matches[1] === 'hr' or preg_match('/<\/'.$matches[1].'>[ ]*$/', $Line['text'])) - { - $Block['closed'] = true; - } - else - { - $Block['depth'] = 0; - $Block['name'] = $matches[1]; - } - - return $Block; - } - } - - protected function addToMarkup($Line, array $Block) - { - if (isset($Block['closed'])) - { - return; - } - - if (preg_match('/<'.$Block['name'].'([ ][^\/]+)?>/', $Line['text'])) # opening tag - { - $Block['depth'] ++; - } - - if (stripos($Line['text'], '') !== false) # closing tag - { - if ($Block['depth'] > 0) - { - $Block['depth'] --; - } - else - { - $Block['closed'] = true; - } - } - - $Block['element'] .= "\n".$Line['body']; - - return $Block; - } - - # - # Table - - protected function identifyTable($Line, array $Block = null) - { - if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted'])) - { - return; - } - - if (strpos($Block['element']['text'], '|') !== false and chop($Line['text'], ' -:|') === '') - { - $alignments = array(); - - $divider = $Line['text']; - - $divider = trim($divider); - $divider = trim($divider, '|'); - - $dividerCells = explode('|', $divider); - - foreach ($dividerCells as $dividerCell) - { - $dividerCell = trim($dividerCell); - - if ($dividerCell === '') - { - continue; - } - - $alignment = null; - - if ($dividerCell[0] === ':') - { - $alignment = 'left'; - } - - if (substr($dividerCell, -1) === ':') - { - $alignment = $alignment === 'left' ? 'center' : 'right'; - } - - $alignments []= $alignment; - } - - # ~ - - $HeaderElements = array(); - - $header = $Block['element']['text']; - - $header = trim($header); - $header = trim($header, '|'); - - $headerCells = explode('|', $header); - - foreach ($headerCells as $index => $headerCell) - { - $headerCell = trim($headerCell); - - $HeaderElement = array( - 'name' => 'th', - 'text' => $headerCell, - 'handler' => 'line', - ); - - if (isset($alignments[$index])) - { - $alignment = $alignments[$index]; - - $HeaderElement['attributes'] = array( - 'align' => $alignment, - ); - } - - $HeaderElements []= $HeaderElement; - } - - # ~ - - $Block = array( - 'alignments' => $alignments, - 'identified' => true, - 'element' => array( - 'name' => 'table', - 'handler' => 'elements', - ), - ); - - $Block['element']['text'] []= array( - 'name' => 'thead', - 'handler' => 'elements', - ); - - $Block['element']['text'] []= array( - 'name' => 'tbody', - 'handler' => 'elements', - 'text' => array(), - ); - - $Block['element']['text'][0]['text'] []= array( - 'name' => 'tr', - 'handler' => 'elements', - 'text' => $HeaderElements, - ); - - return $Block; - } - } - - protected function addToTable($Line, array $Block) - { - if ($Line['text'][0] === '|' or strpos($Line['text'], '|')) - { - $Elements = array(); - - $row = $Line['text']; - - $row = trim($row); - $row = trim($row, '|'); - - $cells = explode('|', $row); - - foreach ($cells as $index => $cell) - { - $cell = trim($cell); - - $Element = array( - 'name' => 'td', - 'handler' => 'line', - 'text' => $cell, - ); - - if (isset($Block['alignments'][$index])) - { - $Element['attributes'] = array( - 'align' => $Block['alignments'][$index], - ); - } - - $Elements []= $Element; - } - - $Element = array( - 'name' => 'tr', - 'handler' => 'elements', - 'text' => $Elements, - ); - - $Block['element']['text'][1]['text'] []= $Element; - - return $Block; - } - } - - # - # Definitions - # - - protected function identifyReference($Line) - { - if (preg_match('/^\[(.+?)\]:[ ]*?(?:[ ]+["\'(](.+)["\')])?[ ]*$/', $Line['text'], $matches)) - { - $Definition = array( - 'id' => strtolower($matches[1]), - 'data' => array( - 'url' => $matches[2], - ), - ); - - if (isset($matches[3])) - { - $Definition['data']['title'] = $matches[3]; - } - - return $Definition; - } - } - - # - # ~ - # - - protected function buildParagraph($Line) - { - $Block = array( - 'element' => array( - 'name' => 'p', - 'text' => $Line['text'], - 'handler' => 'line', - ), - ); - - return $Block; - } - - # - # ~ - # - - protected function element(array $Element) - { - $markup = '<'.$Element['name']; - - if (isset($Element['attributes'])) - { - foreach ($Element['attributes'] as $name => $value) - { - $markup .= ' '.$name.'="'.$value.'"'; - } - } - - if (isset($Element['text'])) - { - $markup .= '>'; - - if (isset($Element['handler'])) - { - $markup .= $this->$Element['handler']($Element['text']); - } - else - { - $markup .= $Element['text']; - } - - $markup .= ''; - } - else - { - $markup .= ' />'; - } - - return $markup; - } - - protected function elements(array $Elements) - { - $markup = ''; - - foreach ($Elements as $Element) - { - if ($Element === null) - { - continue; - } - - $markup .= "\n"; - - if (is_string($Element)) # because of Markup - { - $markup .= $Element; - - continue; - } - - $markup .= $this->element($Element); - } - - $markup .= "\n"; - - return $markup; - } - - # - # Spans - # - - protected $SpanTypes = array( - '!' => array('Link'), # ? - '&' => array('Ampersand'), - '*' => array('Emphasis'), - '/' => array('Url'), - '<' => array('UrlTag', 'EmailTag', 'Tag', 'LessThan'), - '[' => array('Link'), - '_' => array('Emphasis'), - '`' => array('InlineCode'), - '~' => array('Strikethrough'), - '\\' => array('EscapeSequence'), - ); - - # ~ - - protected $spanMarkerList = '*_!&[spanMarkerList)) - { - $marker = $excerpt[0]; - - $markerPosition += strpos($remainder, $marker); - - $Excerpt = array('text' => $excerpt, 'context' => $text); - - foreach ($this->SpanTypes[$marker] as $spanType) - { - $handler = 'identify'.$spanType; - - $Span = $this->$handler($Excerpt); - - if ( ! isset($Span)) - { - continue; - } - - # The identified span can be ahead of the marker. - - if (isset($Span['position']) and $Span['position'] > $markerPosition) - { - continue; - } - - # Spans that start at the position of their marker don't have to set a position. - - if ( ! isset($Span['position'])) - { - $Span['position'] = $markerPosition; - } - - $plainText = substr($text, 0, $Span['position']); - - $markup .= $this->readPlainText($plainText); - - $markup .= isset($Span['markup']) ? $Span['markup'] : $this->element($Span['element']); - - $text = substr($text, $Span['position'] + $Span['extent']); - - $remainder = $text; - - $markerPosition = 0; - - continue 2; - } - - $remainder = substr($excerpt, 1); - - $markerPosition ++; - } - - $markup .= $this->readPlainText($text); - - return $markup; - } - - # - # ~ - # - - protected function identifyUrl($Excerpt) - { - if ( ! isset($Excerpt['text'][1]) or $Excerpt['text'][1] !== '/') - { - return; - } - - if (preg_match('/\bhttps?:[\/]{2}[^\s<]+\b\/*/ui', $Excerpt['context'], $matches, PREG_OFFSET_CAPTURE)) - { - $url = str_replace(array('&', '<'), array('&', '<'), $matches[0][0]); - - return array( - 'extent' => strlen($matches[0][0]), - 'position' => $matches[0][1], - 'element' => array( - 'name' => 'a', - 'text' => $url, - 'attributes' => array( - 'href' => $url, - ), - ), - ); - } - } - - protected function identifyAmpersand($Excerpt) - { - if ( ! preg_match('/^&#?\w+;/', $Excerpt['text'])) - { - return array( - 'markup' => '&', - 'extent' => 1, - ); - } - } - - protected function identifyStrikethrough($Excerpt) - { - if ( ! isset($Excerpt['text'][1])) - { - return; - } - - if ($Excerpt['text'][1] === '~' and preg_match('/^~~(?=\S)(.+?)(?<=\S)~~/', $Excerpt['text'], $matches)) - { - return array( - 'extent' => strlen($matches[0]), - 'element' => array( - 'name' => 'del', - 'text' => $matches[1], - 'handler' => 'line', - ), - ); - } - } - - protected function identifyEscapeSequence($Excerpt) - { - if (isset($Excerpt['text'][1]) and in_array($Excerpt['text'][1], $this->specialCharacters)) - { - return array( - 'markup' => $Excerpt['text'][1], - 'extent' => 2, - ); - } - } - - protected function identifyLessThan() - { - return array( - 'markup' => '<', - 'extent' => 1, - ); - } - - protected function identifyUrlTag($Excerpt) - { - if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<(https?:[\/]{2}[^\s]+?)>/i', $Excerpt['text'], $matches)) - { - $url = str_replace(array('&', '<'), array('&', '<'), $matches[1]); - - return array( - 'extent' => strlen($matches[0]), - 'element' => array( - 'name' => 'a', - 'text' => $url, - 'attributes' => array( - 'href' => $url, - ), - ), - ); - } - } - - protected function identifyEmailTag($Excerpt) - { - if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<(\S+?@\S+?)>/', $Excerpt['text'], $matches)) - { - return array( - 'extent' => strlen($matches[0]), - 'element' => array( - 'name' => 'a', - 'text' => $matches[1], - 'attributes' => array( - 'href' => 'mailto:'.$matches[1], - ), - ), - ); - } - } - - protected function identifyTag($Excerpt) - { - if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<\/?\w.*?>/', $Excerpt['text'], $matches)) - { - return array( - 'markup' => $matches[0], - 'extent' => strlen($matches[0]), - ); - } - } - - protected function identifyInlineCode($Excerpt) - { - $marker = $Excerpt['text'][0]; - - if (preg_match('/^('.$marker.'+)[ ]*(.+?)[ ]*(? strlen($matches[0]), - 'element' => array( - 'name' => 'code', - 'text' => $text, - ), - ); - } - } - - protected function identifyLink($Excerpt) - { - $extent = $Excerpt['text'][0] === '!' ? 1 : 0; - - if (strpos($Excerpt['text'], ']') and preg_match('/\[((?:[^][]|(?R))*)\]/', $Excerpt['text'], $matches)) - { - $Link = array('text' => $matches[1], 'label' => strtolower($matches[1])); - - $extent += strlen($matches[0]); - - $substring = substr($Excerpt['text'], $extent); - - if (preg_match('/^\s*\[([^][]+)\]/', $substring, $matches)) - { - $Link['label'] = strtolower($matches[1]); - - if (isset($this->Definitions['Reference'][$Link['label']])) - { - $Link += $this->Definitions['Reference'][$Link['label']]; - - $extent += strlen($matches[0]); - } - else - { - return; - } - } - elseif (isset($this->Definitions['Reference'][$Link['label']])) - { - $Link += $this->Definitions['Reference'][$Link['label']]; - - if (preg_match('/^[ ]*\[\]/', $substring, $matches)) - { - $extent += strlen($matches[0]); - } - } - elseif (preg_match('/^\([ ]*(.*?)(?:[ ]+[\'"](.+?)[\'"])?[ ]*\)/', $substring, $matches)) - { - $Link['url'] = $matches[1]; - - if (isset($matches[2])) - { - $Link['title'] = $matches[2]; - } - - $extent += strlen($matches[0]); - } - else - { - return; - } - } - else - { - return; - } - - $url = str_replace(array('&', '<'), array('&', '<'), $Link['url']); - - if ($Excerpt['text'][0] === '!') - { - $Element = array( - 'name' => 'img', - 'attributes' => array( - 'alt' => $Link['text'], - 'src' => $url, - ), - ); - } - else - { - $Element = array( - 'name' => 'a', - 'handler' => 'line', - 'text' => $Link['text'], - 'attributes' => array( - 'href' => $url, - ), - ); - } - - if (isset($Link['title'])) - { - $Element['attributes']['title'] = $Link['title']; - } - - return array( - 'extent' => $extent, - 'element' => $Element, - ); - } - - protected function identifyEmphasis($Excerpt) - { - if ( ! isset($Excerpt['text'][1])) - { - return; - } - - $marker = $Excerpt['text'][0]; - - if ($Excerpt['text'][1] === $marker and preg_match($this->StrongRegex[$marker], $Excerpt['text'], $matches)) - { - $emphasis = 'strong'; - } - elseif (preg_match($this->EmRegex[$marker], $Excerpt['text'], $matches)) - { - $emphasis = 'em'; - } - else - { - return; - } - - return array( - 'extent' => strlen($matches[0]), - 'element' => array( - 'name' => $emphasis, - 'handler' => 'line', - 'text' => $matches[1], - ), - ); - } - - # - # ~ - - protected function readPlainText($text) - { - $breakMarker = $this->breaksEnabled ? "\n" : " \n"; - - $text = str_replace($breakMarker, "
\n", $text); - - return $text; - } - - # - # ~ - # - - protected function li($lines) - { - $markup = $this->lines($lines); - - $trimmedMarkup = trim($markup); - - if ( ! in_array('', $lines) and substr($trimmedMarkup, 0, 3) === '

') - { - $markup = $trimmedMarkup; - $markup = substr($markup, 3); - - $position = strpos($markup, "

"); - - $markup = substr_replace($markup, '', $position, 4); - } - - return $markup; - } - - # - # Multiton - # - - static function instance($name = 'default') - { - if (isset(self::$instances[$name])) - { - return self::$instances[$name]; - } - - $instance = new self(); - - self::$instances[$name] = $instance; - - return $instance; - } - - private static $instances = array(); - - # - # Deprecated Methods - # - - /** - * @deprecated in favor of "text" - */ - function parse($text) - { - $markup = $this->text($text); - - return $markup; - } - - # - # Fields - # - - protected $Definitions; - - # - # Read-only - - protected $specialCharacters = array( - '\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '>', '#', '+', '-', '.', '!', - ); - - protected $StrongRegex = array( - '*' => '/^[*]{2}((?:[^*]|[*][^*]*[*])+?)[*]{2}(?![*])/s', - '_' => '/^__((?:[^_]|_[^_]*_)+?)__(?!_)/us', - ); - - protected $EmRegex = array( - '*' => '/^[*]((?:[^*]|[*][*][^*]+?[*][*])+?)[*](?![*])/s', - '_' => '/^_((?:[^_]|__[^_]*__)+?)_(?!_)\b/us', - ); - - protected $textLevelElements = array( - 'a', 'br', 'bdo', 'abbr', 'blink', 'nextid', 'acronym', 'basefont', - 'b', 'em', 'big', 'cite', 'small', 'spacer', 'listing', - 'i', 'rp', 'del', 'code', 'strike', 'marquee', - 'q', 'rt', 'ins', 'font', 'strong', - 's', 'tt', 'sub', 'mark', - 'u', 'xm', 'sup', 'nobr', - 'var', 'ruby', - 'wbr', 'span', - 'time', - ); -} diff --git a/github/vendor/WPUpdatePhp.php b/github/vendor/WPUpdatePhp.php deleted file mode 100644 index cd4f861..0000000 --- a/github/vendor/WPUpdatePhp.php +++ /dev/null @@ -1,115 +0,0 @@ -minimum_version = $minimum_version; - $this->recommended_version = $recommended_version; - $this->plugin_name = __( 'this plugin', 'github-updater' ); - } - - /** - * @param $name string Name of the plugin to be used in admin notices - */ - public function set_plugin_name( $name ) { - $this->plugin_name = $name; - } - - /** - * @param $version - * - * @return bool - */ - public function does_it_meet_required_php_version( $version = PHP_VERSION ) { - if ( $this->version_passes_requirement( $this->minimum_version, $version ) ) { - return true; - } - - $this->load_version_notice( array( $this, 'minimum_admin_notice' ) ); - return false; - } - - /** - * @param $version - * - * @return bool - */ - public function does_it_meet_recommended_php_version( $version = PHP_VERSION ) { - if ( $this->version_passes_requirement( $this->recommended_version, $version ) ) { - return true; - } - - $this->load_version_notice( array( $this, 'recommended_admin_notice' ) ); - return false; - } - - /** - * @param $requirement - * @param $version - * - * @return bool - */ - private function version_passes_requirement( $requirement, $version ) { - return version_compare( $requirement, $version, '<=' ); - } - - /** - * @param $callback - * - * @return void - */ - private function load_version_notice( $callback ) { - if ( is_admin() && ! defined( 'DOING_AJAX' ) ) { - add_action( 'admin_notices', $callback ); - add_action( 'network_admin_notices', $callback ); - } - } - - /** - * Method hooked into admin_notices when minimum PHP version is not available to show this in a notice - * @hook admin_notices - */ - public function minimum_admin_notice() { - ?> -
-

- plugin_name, $this->minimum_version ); ?> -
- ', '' ); ?> -

-
- -
-

- plugin_name ), $this->recommended_version ); ?> -
- ', '' ); ?> -

-
- parse_readme_contents( $file_contents ); - } - - function parse_readme_contents( $file_contents ) { - $file_contents = str_replace(array("\r\n", "\r"), "\n", $file_contents); - $file_contents = trim($file_contents); - if ( 0 === strpos( $file_contents, "\xEF\xBB\xBF" ) ) - $file_contents = substr( $file_contents, 3 ); - - // === Plugin Name === - // Must be the very first thing. - if ( !preg_match('|^===(.*)===|', $file_contents, $_name) ) - return array(); // require a name - $name = trim($_name[1], '='); - $name = $this->sanitize_text( $name ); - - $file_contents = $this->chop_string( $file_contents, $_name[0] ); - - - // Requires at least: 1.5 - if ( preg_match('|Requires at least:(.*)|i', $file_contents, $_requires_at_least) ) - $requires_at_least = $this->sanitize_text($_requires_at_least[1]); - else - $requires_at_least = NULL; - - - // Tested up to: 2.1 - if ( preg_match('|Tested up to:(.*)|i', $file_contents, $_tested_up_to) ) - $tested_up_to = $this->sanitize_text( $_tested_up_to[1] ); - else - $tested_up_to = NULL; - - - // Stable tag: 10.4-ride-the-fire-eagle-danger-day - if ( preg_match('|Stable tag:(.*)|i', $file_contents, $_stable_tag) ) - $stable_tag = $this->sanitize_text( $_stable_tag[1] ); - else - $stable_tag = NULL; // we assume trunk, but don't set it here to tell the difference between specified trunk and default trunk - - - // Tags: some tag, another tag, we like tags - if ( preg_match('|Tags:(.*)|i', $file_contents, $_tags) ) { - $tags = preg_split('|,[\s]*?|', trim($_tags[1])); - foreach ( array_keys($tags) as $t ) - $tags[$t] = $this->sanitize_text( $tags[$t] ); - } else { - $tags = array(); - } - - - // Contributors: markjaquith, mdawaffe, zefrank - $contributors = array(); - if ( preg_match('|Contributors:(.*)|i', $file_contents, $_contributors) ) { - $temp_contributors = preg_split('|,[\s]*|', trim($_contributors[1])); - foreach ( array_keys($temp_contributors) as $c ) { - $tmp_sanitized = $this->user_sanitize( $temp_contributors[$c] ); - if ( strlen(trim($tmp_sanitized)) > 0 ) - $contributors[$c] = $tmp_sanitized; - unset($tmp_sanitized); - } - } - - // Donate Link: URL - if ( preg_match('|Donate link:(.*)|i', $file_contents, $_donate_link) ) - $donate_link = esc_url( $_donate_link[1] ); - else - $donate_link = NULL; - - // License: GPLv2 (Lots of plugins have this, so lets pull it out so it doesn't get into our short description) - if ( preg_match('|License:(.*)|i', $file_contents, $_license) ) - $license = $this->sanitize_text( $_license[1] ); - else - $license = NULL; - - // License URI: URL - if ( preg_match( '|License URI:(.*)|i', $file_contents, $_license_uri ) ) - $license_uri = esc_url( $_license_uri[1] ); - else - $license_uri = null; - - // togs, conts, etc are optional and order shouldn't matter. So we chop them only after we've grabbed their values. - foreach ( array('tags', 'contributors', 'requires_at_least', 'tested_up_to', 'stable_tag', 'donate_link', 'license', 'license_uri') as $chop ) { - if ( $$chop ) { - $_chop = '_' . $chop; - $file_contents = $this->chop_string( $file_contents, ${$_chop}[0] ); - } - } - - $file_contents = trim($file_contents); - - - // short-description fu - if ( !preg_match('/(^(.*?))^[\s]*=+?[\s]*.+?[\s]*=+?/ms', $file_contents, $_short_description) ) - $_short_description = array( 1 => &$file_contents, 2 => &$file_contents ); - $short_desc_filtered = $this->sanitize_text( $_short_description[2] ); - $short_desc_length = strlen($short_desc_filtered); - $short_description = substr($short_desc_filtered, 0, 150); - if ( $short_desc_length > strlen($short_description) ) - $truncated = true; - else - $truncated = false; - if ( $_short_description[1] ) - $file_contents = $this->chop_string( $file_contents, $_short_description[1] ); // yes, the [1] is intentional - - // == Section == - // Break into sections - // $_sections[0] will be the title of the first section, $_sections[1] will be the content of the first section - // the array alternates from there: title2, content2, title3, content3... and so forth - $_sections = preg_split('/^[\s]*==[\s]*(.+?)[\s]*==/m', $file_contents, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY); - - $sections = array(); - for ( $i=1; $i <= count($_sections); $i +=2 ) { - $_sections[$i] = preg_replace('/^[\s]*=[\s]+(.+?)[\s]+=/m', '

$1

', $_sections[$i]); - $_sections[$i] = $this->filter_text( $_sections[$i], true ); - $title = $this->sanitize_text( $_sections[$i-1] ); - $sections[str_replace(' ', '_', strtolower($title))] = array('title' => $title, 'content' => $_sections[$i]); - } - - - // Special sections - // This is where we nab our special sections, so we can enforce their order and treat them differently, if needed - // upgrade_notice is not a section, but parse it like it is for now - $final_sections = array(); - foreach ( array('description', 'installation', 'frequently_asked_questions', 'screenshots', 'changelog', 'change_log', 'upgrade_notice') as $special_section ) { - if ( isset($sections[$special_section]) ) { - $final_sections[$special_section] = $sections[$special_section]['content']; - unset($sections[$special_section]); - } - } - if ( isset($final_sections['change_log']) && empty($final_sections['changelog']) ) - $final_sections['changelog'] = $final_sections['change_log']; - - - $final_screenshots = array(); - if ( isset($final_sections['screenshots']) ) { - preg_match_all('|
  • (.*?)
  • |s', $final_sections['screenshots'], $screenshots, PREG_SET_ORDER); - if ( $screenshots ) { - foreach ( (array) $screenshots as $ss ) - $final_screenshots[] = $ss[1]; - } - } - - // Parse the upgrade_notice section specially: - // 1.0 => blah, 1.1 => fnord - $upgrade_notice = array(); - if ( isset($final_sections['upgrade_notice']) ) { - $split = preg_split( '#

    (.*?)

    #', $final_sections['upgrade_notice'], -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY ); - for ( $i = 0; $i < count( $split ); $i += 2 ) - $upgrade_notice[$this->sanitize_text( $split[$i] )] = substr( $this->sanitize_text( $split[$i + 1] ), 0, 300 ); - unset( $final_sections['upgrade_notice'] ); - } - - // No description? - // No problem... we'll just fall back to the old style of description - // We'll even let you use markup this time! - $excerpt = false; - if ( !isset($final_sections['description']) ) { - $final_sections = array_merge(array('description' => $this->filter_text( $_short_description[2], true )), $final_sections); - $excerpt = true; - } - - - // dump the non-special sections into $remaining_content - // their order will be determined by their original order in the readme.txt - $remaining_content = ''; - foreach ( $sections as $s_name => $s_data ) { - $title_id = esc_attr($s_data['title']); - $title_id = str_replace(' ','-',$title_id); - $remaining_content .= "\n

    {$s_data['title']}

    \n{$s_data['content']}"; - } - $remaining_content = trim($remaining_content); - - - // All done! - // $r['tags'] and $r['contributors'] are simple arrays - // $r['sections'] is an array with named elements - $r = array( - 'name' => $name, - 'tags' => $tags, - 'requires_at_least' => $requires_at_least, - 'tested_up_to' => $tested_up_to, - 'stable_tag' => $stable_tag, - 'contributors' => $contributors, - 'donate_link' => $donate_link, - 'license' => $license, - 'license_uri' => $license_uri, - 'short_description' => $short_description, - 'screenshots' => $final_screenshots, - 'is_excerpt' => $excerpt, - 'is_truncated' => $truncated, - 'sections' => $final_sections, - 'remaining_content' => $remaining_content, - 'upgrade_notice' => $upgrade_notice - ); - - return $r; - } - - function chop_string( $string, $chop ) { // chop a "prefix" from a string: Agressive! uses strstr not 0 === strpos - if ( $_string = strstr($string, $chop) ) { - $_string = substr($_string, strlen($chop)); - return trim($_string); - } else { - return trim($string); - } - } - - function user_sanitize( $text, $strict = false ) { // whitelisted chars - if ( function_exists('user_sanitize') ) // bbPress native - return user_sanitize( $text, $strict ); - - if ( $strict ) { - $text = preg_replace('/[^a-z0-9-]/i', '', $text); - $text = preg_replace('|-+|', '-', $text); - } else { - $text = preg_replace('/[^a-z0-9_-]/i', '', $text); - } - return $text; - } - - function sanitize_text( $text ) { // not fancy - $text = strip_tags($text); - $text = esc_html($text); - $text = trim($text); - return $text; - } - - function filter_text( $text, $markdown = false ) { // fancy, Markdown - $text = trim($text); - - $text = call_user_func( array( __CLASS__, 'code_trick' ), $text, $markdown ); // A better parser than Markdown's for: backticks -> CODE - - if ( $markdown ) { // Parse markdown. - if ( !function_exists('Markdown') ) - require( AUTOMATTIC_README_MARKDOWN ); - $text = Markdown($text); - } - - $allowed = array( - 'a' => array( - 'href' => array(), - 'title' => array(), - 'rel' => array()), - 'blockquote' => array('cite' => array()), - 'br' => array(), - 'cite' => array(), - 'p' => array(), - 'code' => array(), - 'pre' => array(), - 'em' => array(), - 'strong' => array(), - 'ul' => array(), - 'ol' => array(), - 'li' => array(), - 'h3' => array(), - 'h4' => array() - ); - - $text = balanceTags($text); - - $text = wp_kses( $text, $allowed ); - $text = trim($text); - return $text; - } - - function code_trick( $text, $markdown ) { // Don't use bbPress native function - it's incompatible with Markdown - // If doing markdown, first take any user formatted code blocks and turn them into backticks so that - // markdown will preserve things like underscores in code blocks - if ( $markdown ) - $text = preg_replace_callback("!(
    |)(.*?)(
    |)!s", array( __CLASS__,'decodeit'), $text); - - $text = str_replace(array("\r\n", "\r"), "\n", $text); - if ( !$markdown ) { - // This gets the "inline" code blocks, but can't be used with Markdown. - $text = preg_replace_callback("|(`)(.*?)`|", array( __CLASS__, 'encodeit'), $text); - // This gets the "block level" code blocks and converts them to PRE CODE - $text = preg_replace_callback("!(^|\n)`(.*?)`!s", array( __CLASS__, 'encodeit'), $text); - } else { -// // Markdown can do inline code, we convert bbPress style block level code to Markdown style -// $text = preg_replace_callback("!(^|\n)([ \t]*?)`(.*?)`!s", array( __CLASS__, 'indent'), $text); - - // Markdown seems to be choking on block level stuff too. Let's just encode it and be done with it. - $text = preg_replace_callback("!(^|\n)`(.*?)`!s", array( __CLASS__, 'encodeit'), $text); - } - return $text; - } - - function indent( $matches ) { - $text = $matches[3]; - $text = preg_replace('|^|m', $matches[2] . ' ', $text); - return $matches[1] . $text; - } - - function encodeit( $matches ) { - if ( function_exists('encodeit') ) // bbPress native - return encodeit( $matches ); - - $text = trim($matches[2]); - $text = htmlspecialchars($text, ENT_QUOTES); - $text = str_replace(array("\r\n", "\r"), "\n", $text); - $text = preg_replace("|\n\n\n+|", "\n\n", $text); - $text = str_replace('&lt;', '<', $text); - $text = str_replace('&gt;', '>', $text); - $text = "$text"; - if ( "`" != $matches[1] ) - $text = "
    $text
    "; - return $text; - } - - function decodeit( $matches ) { - if ( function_exists('decodeit') ) // bbPress native - return decodeit( $matches ); - - $text = $matches[2]; - $trans_table = array_flip(get_html_translation_table(HTML_ENTITIES)); - $text = strtr($text, $trans_table); - $text = str_replace('
    ', '', $text); - $text = str_replace('&', '&', $text); - $text = str_replace(''', "'", $text); - if ( '
    ' == $matches[1] )
    -			$text = "\n$text\n";
    -		return "`$text`";
    -	}
    -
    -} // end class
    diff --git a/style.css b/style.css
    index b42e7d6..6412252 100644
    --- a/style.css
    +++ b/style.css
    @@ -3,7 +3,7 @@ Theme Name: PASW 2015
     Description: Pasw2015 è il tema trasparente e accessibile promosso dalla Comunità di Pratica "Porte Aperte sul Web". Bello, accessibile e innovativo, con supporto continuo e volontario offerto dalla comunità.
     Author: Porte Aperte sul Web
     Author URI: http://www.porteapertesulweb.it
    -Version: 2.1
    +Version: 2.2
     Tags: pasw, scuole, pubblica amministrazione, accessibile, trasparente, personalizzabile
     GitHub Theme URI: https://github.com/PorteAperteSulWeb/pasw2015
     GitHub Branch: master