Compare commits

..

81 Commits

Author SHA1 Message Date
erwanlr
ac16a951c5 Bumps version 2020-08-08 14:21:50 +02:00
erwanlr
1043bcb267 Adds Dfs 2020-08-08 13:25:15 +02:00
erwanlr
22979a1a77 Adds DFs 2020-08-07 09:39:50 +02:00
erwanlr
3039d2e7eb More rubocop fixes 2020-08-06 12:47:00 +02:00
erwanlr
557dee2d8c Updates rubocop 2020-08-06 11:43:26 +02:00
erwanlr
a506adcb64 Fixes #1529 2020-08-06 10:51:08 +02:00
erwanlr
3bfb120646 Adds DF for monarch - Ref #1527 2020-08-04 14:42:50 +02:00
erwanlr
43e613aa52 Updates Gravityforms detection - Ref #1526 2020-08-03 12:33:14 +02:00
erwanlr
0d930ed605 Adds Dfs 2020-08-01 10:45:42 +02:00
erwanlr
2014f1e4b3 Bumps version 2020-07-25 17:13:29 +02:00
erwanlr
4889d17e0a Ref #1510 2020-07-25 16:24:59 +02:00
erwanlr
494d31215d Ref #1510 2020-07-25 16:21:03 +02:00
erwanlr
582bdea431 Adds DFs 2020-07-25 11:51:59 +02:00
erwanlr
ecf7df9c01 Ref #1510 2020-07-24 15:32:41 +02:00
erwanlr
a9760e8817 Ref #1510 2020-07-24 15:26:22 +02:00
erwanlr
b32e990dd4 Bumps version 2020-07-20 15:11:31 +02:00
erwanlr
4320d2436f Fixes #1522 2020-07-20 13:15:54 +02:00
erwanlr
cba6e74b13 Fixes #1520 2020-07-18 13:35:53 +02:00
erwanlr
981bcf5fa2 Adds Dfs 2020-07-18 13:17:37 +02:00
erwanlr
1d79bc37d3 Bumps version 2020-07-17 10:50:15 +02:00
erwanlr
2fae3336ba Removes useless statement 2020-07-16 17:53:59 +02:00
erwanlr
cfb98c5139 Ref #1518 for XMLrPC multicall 2020-07-16 17:50:43 +02:00
erwanlr
b0260327c4 Updates XMLRPC MultiCall attack to reflect use changes. Ref #1518 2020-07-16 14:56:08 +02:00
erwanlr
f65532e347 Uses an enumerator to read wordlist during pwd attack. Fixes #1518 2020-07-16 14:39:09 +02:00
erwanlr
ff574b046c Checks if the wp-login.php is available before attacking it - Fixes #1519 2020-07-16 10:22:45 +02:00
erwanlr
97c995b64c Adds additional check just in case (related to Rubocop offences fixed) 2020-07-15 20:07:47 +02:00
erwanlr
8361ec97e4 Rubocop: Adds new cops by default, fixes offences 2020-07-15 16:45:36 +02:00
erwanlr
7a0bbc0acb Updates cms_scanner dep 2020-07-15 14:24:22 +02:00
Erwan
66f5eca841 Merge pull request #1517 from wpscanteam/dependabot/bundler/rubocop-tw-0.88.0
Update rubocop requirement from ~> 0.87.0 to ~> 0.88.0
2020-07-14 09:11:47 +02:00
dependabot-preview[bot]
b53e6d1888 Update rubocop requirement from ~> 0.87.0 to ~> 0.88.0
Updates the requirements on [rubocop](https://github.com/rubocop-hq/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop-hq/rubocop/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop/compare/v0.87.0...v0.88.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-14 05:38:06 +00:00
erwanlr
4b68fa8b60 Adds DFs 2020-07-11 10:19:52 +02:00
Erwan
54770c5a50 Merge pull request #1516 from wpscanteam/dependabot/bundler/rubocop-tw-0.87.0
Update rubocop requirement from ~> 0.86.0 to ~> 0.87.0
2020-07-07 09:34:54 +02:00
dependabot-preview[bot]
39fb2167f7 Update rubocop requirement from ~> 0.86.0 to ~> 0.87.0
Updates the requirements on [rubocop](https://github.com/rubocop-hq/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop-hq/rubocop/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop/compare/v0.86.0...v0.87.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-07 06:44:44 +00:00
Erwan
c33fef9c98 Merge pull request #1515 from wpscanteam/dependabot/bundler/rubocop-performance-tw-1.7.0
Update rubocop-performance requirement from ~> 1.6.0 to ~> 1.7.0
2020-07-07 08:43:34 +02:00
dependabot-preview[bot]
08a1117edf Update rubocop-performance requirement from ~> 1.6.0 to ~> 1.7.0
Updates the requirements on [rubocop-performance](https://github.com/rubocop-hq/rubocop-performance) to permit the latest version.
- [Release notes](https://github.com/rubocop-hq/rubocop-performance/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop-performance/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop-performance/compare/v1.6.0...v1.7.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-07 05:40:52 +00:00
erwanlr
e14cbed56e Adds DF 2020-07-04 11:27:49 +02:00
erwanlr
56e2ab16cc Adds DFs 2020-06-27 11:39:00 +02:00
erwanlr
d76d4b70f5 Updates rubocop & fixes offences 2020-06-23 20:30:48 +02:00
erwanlr
e223936a81 Adds Dfs 2020-06-20 12:00:20 +02:00
Christian Mehlmauer
60d067c421 fix docker install 2020-06-14 20:16:14 +02:00
Christian Mehlmauer
4102cf4688 fix #1487 2020-06-14 19:49:58 +02:00
erwanlr
dc977e6630 Adds missing spec files 2020-06-13 22:10:27 +02:00
erwanlr
05deabd775 Adds DF 2020-06-13 21:32:23 +02:00
erwanlr
549ab4aa15 Bumps version 2020-06-08 20:53:15 +02:00
erwanlr
b189c71682 Typo 2020-06-08 20:14:02 +02:00
erwanlr
b909856933 Fixes #1504 2020-06-08 20:13:18 +02:00
erwanlr
5de9084901 Updates deps 2020-06-08 19:59:04 +02:00
erwanlr
384ef0b44c Adds DFs 2020-06-06 10:48:34 +02:00
Erwan
9307772dc3 Merge pull request #1502 from wpscanteam/dependabot/bundler/rubocop-tw-0.85.0
Update rubocop requirement from ~> 0.84.0 to ~> 0.85.0
2020-06-02 08:26:24 +02:00
dependabot-preview[bot]
730c71d103 Update rubocop requirement from ~> 0.84.0 to ~> 0.85.0
Updates the requirements on [rubocop](https://github.com/rubocop-hq/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop-hq/rubocop/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop/compare/v0.84.0...v0.85.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-02 05:43:24 +00:00
erwanlr
5c710b96f5 Adds Dfs 2020-05-30 11:36:59 +02:00
erwanlr
fe63d0eadf Adds DFs 2020-05-29 10:05:59 +02:00
erwanlr
a6ca95159a Adds DFs 2020-05-23 11:13:57 +02:00
erwanlr
677d32fef5 Updates rubocop-performance and config 2020-05-23 09:17:41 +02:00
Erwan
14abd05969 Merge pull request #1498 from wpscanteam/dependabot/bundler/rubocop-tw-0.84.0
Update rubocop requirement from ~> 0.83.0 to ~> 0.84.0
2020-05-22 08:39:17 +02:00
dependabot-preview[bot]
2e680be34f Update rubocop requirement from ~> 0.83.0 to ~> 0.84.0
Updates the requirements on [rubocop](https://github.com/rubocop-hq/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop-hq/rubocop/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop/compare/v0.83.0...v0.84.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-22 05:32:38 +00:00
erwanlr
fe29942bf4 Adds Dfs 2020-05-16 15:30:47 +02:00
Erwan
c8fb717ac1 Updates Readme's Install section 2020-05-13 21:30:09 +02:00
Erwan
1ff7fcc913 Merge pull request #1493 from wpscanteam/dependabot/bundler/rubocop-tw-0.83.0
Update rubocop requirement from ~> 0.82.0 to ~> 0.83.0
2020-05-12 10:21:34 +02:00
Erwan
419c32702a Fixes rubocop offenses 2020-05-12 09:32:02 +02:00
dependabot-preview[bot]
9b63714caa Update rubocop requirement from ~> 0.82.0 to ~> 0.83.0
Updates the requirements on [rubocop](https://github.com/rubocop-hq/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop-hq/rubocop/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop/compare/v0.82.0...v0.83.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-12 05:35:24 +00:00
erwanlr
f034233607 Adds DFs 2020-05-09 11:46:23 +02:00
erwanlr
be6fcb51b6 Adds Dfs 2020-05-02 12:44:05 +02:00
Ryan Dewhurst
e49a682f00 Add user documentation URL to readme 2020-05-01 11:35:39 +02:00
Erwan
23ad3141a1 Fixes rubocop offence 2020-04-27 09:31:47 +02:00
Erwan
5347e374e0 Fixes rubocop last offence! 2020-04-27 09:26:26 +02:00
Erwan
1a49a628de Fixes rubocop offences 2020-04-27 09:22:59 +02:00
Erwan
8def256d7e Fixes potential InvalidProgressBar error in Pwd Attack 2020-04-27 09:15:37 +02:00
erwanlr
1cd8e6bad7 Adds Dfs 2020-04-25 17:43:29 +02:00
erwanlr
7a03c0db25 Adds DFs 2020-04-18 10:49:21 +02:00
Erwan
e7e3657d1f Merge pull request #1485 from wpscanteam/dependabot/bundler/rubocop-tw-0.82.0
Update rubocop requirement from ~> 0.81.0 to ~> 0.82.0
2020-04-17 10:03:28 +02:00
dependabot-preview[bot]
734dfcc9bc Update rubocop requirement from ~> 0.81.0 to ~> 0.82.0
Updates the requirements on [rubocop](https://github.com/rubocop-hq/rubocop) to permit the latest version.
- [Release notes](https://github.com/rubocop-hq/rubocop/releases)
- [Changelog](https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop-hq/rubocop/compare/v0.81.0...v0.82.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-17 05:28:29 +00:00
erwanlr
b0db15099d Bumps version 2020-04-16 11:02:15 +02:00
erwanlr
6fbd2369ba Merge branch 'master' of github.com:wpscanteam/wpscan 2020-04-16 10:20:09 +02:00
erwanlr
f4a6674eed Better code related to CVSS 2020-04-16 10:06:28 +02:00
Ryan Dewhurst
c0567ad4f5 Change wording to security scanner 2020-04-16 09:37:15 +02:00
erwanlr
f146ee7e9f Adds YT references and CVSS to output 2020-04-15 17:02:44 +02:00
erwanlr
e606f4ce18 Adds YT references in output 2020-04-15 14:46:06 +02:00
Ryan Dewhurst
945b589a58 Update README.md
SEO tweak
2020-04-14 09:44:36 +02:00
Erwan
b18042c4a8 Reverts previous commit. spec folder already excluded via .dockerignore 2020-04-13 16:44:27 +02:00
Erwan
a9ff39104b Removes specs folder from Docker build 2020-04-13 16:21:17 +02:00
259 changed files with 107665 additions and 5042 deletions

View File

@@ -1,11 +1,14 @@
require: rubocop-performance require: rubocop-performance
AllCops: AllCops:
NewCops: enable
TargetRubyVersion: 2.5 TargetRubyVersion: 2.5
Exclude: Exclude:
- '*.gemspec' - '*.gemspec'
- 'vendor/**/*' - 'vendor/**/*'
Layout/LineLength: Layout/LineLength:
Max: 120 Max: 120
Lint/MissingSuper:
Enabled: false
Lint/UriEscapeUnescape: Lint/UriEscapeUnescape:
Enabled: false Enabled: false
Metrics/AbcSize: Metrics/AbcSize:
@@ -18,11 +21,13 @@ Metrics/ClassLength:
Exclude: Exclude:
- 'app/controllers/enumeration/cli_options.rb' - 'app/controllers/enumeration/cli_options.rb'
Metrics/CyclomaticComplexity: Metrics/CyclomaticComplexity:
Max: 8 Max: 10
Metrics/MethodLength: Metrics/MethodLength:
Max: 20 Max: 20
Exclude: Exclude:
- 'app/controllers/enumeration/cli_options.rb' - 'app/controllers/enumeration/cli_options.rb'
Metrics/PerceivedComplexity:
Max: 11
Style/ClassVars: Style/ClassVars:
Enabled: false Enabled: false
Style/Documentation: Style/Documentation:

View File

@@ -1,3 +1,4 @@
# frozen_string_literal: true
if ENV['GITHUB_ACTION'] if ENV['GITHUB_ACTION']
require 'simplecov-lcov' require 'simplecov-lcov'
@@ -15,4 +16,4 @@ SimpleCov.start do
add_filter '/spec/' add_filter '/spec/'
add_filter 'helper' add_filter 'helper'
end end

View File

@@ -1,16 +1,16 @@
FROM ruby:2.6.3-alpine AS builder FROM ruby:2.7.1-alpine AS builder
LABEL maintainer="WPScan Team <team@wpscan.org>" LABEL maintainer="WPScan Team <team@wpscan.org>"
ARG BUNDLER_ARGS="--jobs=8 --without test development" RUN echo "install: --no-document --no-post-install-message\nupdate: --no-document --no-post-install-message" > /etc/gemrc
RUN echo "gem: --no-ri --no-rdoc" > /etc/gemrc
COPY . /wpscan COPY . /wpscan
RUN apk add --no-cache git libcurl ruby-dev libffi-dev make gcc musl-dev zlib-dev procps sqlite-dev && \ RUN apk add --no-cache git libcurl ruby-dev libffi-dev make gcc musl-dev zlib-dev procps sqlite-dev && \
bundle install --system --clean --no-cache --gemfile=/wpscan/Gemfile $BUNDLER_ARGS && \ bundle config force_ruby_platform true && \
# temp fix for https://github.com/bundler/bundler/issues/6680 bundle config disable_version_check 'true' && \
rm -rf /usr/local/bundle/cache bundle config without "test development" && \
bundle config path.system 'true' && \
bundle install --gemfile=/wpscan/Gemfile --jobs=8
WORKDIR /wpscan WORKDIR /wpscan
RUN rake install --trace RUN rake install --trace
@@ -19,7 +19,7 @@ RUN rake install --trace
RUN chmod -R a+r /usr/local/bundle RUN chmod -R a+r /usr/local/bundle
FROM ruby:2.6.3-alpine FROM ruby:2.7.1-alpine
LABEL maintainer="WPScan Team <team@wpscan.org>" LABEL maintainer="WPScan Team <team@wpscan.org>"
RUN adduser -h /wpscan -g WPScan -D wpscan RUN adduser -h /wpscan -g WPScan -D wpscan

View File

@@ -7,10 +7,10 @@
<h3 align="center">WPScan</h3> <h3 align="center">WPScan</h3>
<p align="center"> <p align="center">
WordPress Vulnerability Scanner WordPress Security Scanner
<br> <br>
<br> <br>
<a href="https://wpscan.org/" title="homepage" target="_blank">Homepage</a> - <a href="https://wpscan.io/" title="wpscan.io" target="_blank">WPScan.io</a> - <a href="https://wpvulndb.com/" title="vulnerability database" target="_blank">Vulnerability Database</a> - <a href="https://wordpress.org/plugins/wpscan/" title="wordpress plugin" target="_blank">WordPress Plugin</a> <a href="https://wpscan.org/" title="homepage" target="_blank">Homepage</a> - <a href="https://wpscan.io/" title="wpscan.io" target="_blank">WPScan.io</a> - <a href="https://wpvulndb.com/" title="vulnerability database" target="_blank">Vulnerability Database</a> - <a href="https://wordpress.org/plugins/wpscan/" title="wordpress security plugin" target="_blank">WordPress Security Plugin</a>
</p> </p>
<p align="center"> <p align="center">
@@ -31,7 +31,11 @@
- RubyGems - Recommended: latest - RubyGems - Recommended: latest
- Nokogiri might require packages to be installed via your package manager depending on your OS, see https://nokogiri.org/tutorials/installing_nokogiri.html - Nokogiri might require packages to be installed via your package manager depending on your OS, see https://nokogiri.org/tutorials/installing_nokogiri.html
### From RubyGems (Recommended) ### In a Pentesting distribution
When using a pentesting distubution (such as Kali Linux), it is recommended to install/update wpscan via the package manager if available.
### From RubyGems
```shell ```shell
gem install wpscan gem install wpscan
@@ -39,18 +43,6 @@ gem install wpscan
On MacOSX, if a ```Gem::FilePermissionError``` is raised due to the Apple's System Integrity Protection (SIP), either install RVM and install wpscan again, or run ```sudo gem install -n /usr/local/bin wpscan``` (see [#1286](https://github.com/wpscanteam/wpscan/issues/1286)) On MacOSX, if a ```Gem::FilePermissionError``` is raised due to the Apple's System Integrity Protection (SIP), either install RVM and install wpscan again, or run ```sudo gem install -n /usr/local/bin wpscan``` (see [#1286](https://github.com/wpscanteam/wpscan/issues/1286))
### From sources (NOT Recommended)
Prerequisites: Git
```shell
git clone https://github.com/wpscanteam/wpscan
cd wpscan/
bundle install && rake install
```
# Updating # Updating
You can update the local database by using ```wpscan --update``` You can update the local database by using ```wpscan --update```
@@ -77,6 +69,8 @@ docker run -it --rm wpscanteam/wpscan --url https://target.tld/ --enumerate u1-1
# Usage # Usage
Full user documentation can be found here; https://github.com/wpscanteam/wpscan/wiki/WPScan-User-Documentation
```wpscan --url blog.tld``` This will scan the blog using default options with a good compromise between speed and accuracy. For example, the plugins will be checked passively but their version with a mixed detection mode (passively + aggressively). Potential config backup files will also be checked, along with other interesting findings. ```wpscan --url blog.tld``` This will scan the blog using default options with a good compromise between speed and accuracy. For example, the plugins will be checked passively but their version with a mixed detection mode (passively + aggressively). Potential config backup files will also be checked, along with other interesting findings.
If a more stealthy approach is required, then ```wpscan --stealthy --url blog.tld``` can be used. If a more stealthy approach is required, then ```wpscan --stealthy --url blog.tld``` can be used.

View File

@@ -23,27 +23,32 @@ module WPScan
] ]
end end
def run def attack_opts
return unless ParsedCli.passwords @attack_opts ||= {
if user_interaction?
output('@info',
msg: "Performing password attack on #{attacker.titleize} against #{users.size} user/s")
end
attack_opts = {
show_progression: user_interaction?, show_progression: user_interaction?,
multicall_max_passwords: ParsedCli.multicall_max_passwords multicall_max_passwords: ParsedCli.multicall_max_passwords
} }
end
def run
return unless ParsedCli.passwords
begin begin
found = [] found = []
attacker.attack(users, passwords(ParsedCli.passwords), attack_opts) do |user| if user_interaction?
output('@info',
msg: "Performing password attack on #{attacker.titleize} against #{users.size} user/s")
end
attacker.attack(users, ParsedCli.passwords, attack_opts) do |user|
found << user found << user
attacker.progress_bar.log("[SUCCESS] - #{user.username} / #{user.password}") attacker.progress_bar.log("[SUCCESS] - #{user.username} / #{user.password}")
end end
rescue Error::NoLoginInterfaceDetected => e
# TODO: Maybe output that in JSON as well.
output('@notice', msg: e.to_s) if user_interaction?
ensure ensure
output('users', users: found) output('users', users: found)
end end
@@ -65,6 +70,8 @@ module WPScan
case ParsedCli.password_attack case ParsedCli.password_attack
when :wp_login when :wp_login
raise Error::NoLoginInterfaceDetected unless target.login_url
Finders::Passwords::WpLogin.new(target) Finders::Passwords::WpLogin.new(target)
when :xmlrpc when :xmlrpc
raise Error::XMLRPCNotDetected unless xmlrpc raise Error::XMLRPCNotDetected unless xmlrpc
@@ -81,8 +88,8 @@ module WPScan
def xmlrpc_get_users_blogs_enabled? def xmlrpc_get_users_blogs_enabled?
if xmlrpc&.enabled? && if xmlrpc&.enabled? &&
xmlrpc.available_methods.include?('wp.getUsersBlogs') && xmlrpc.available_methods.include?('wp.getUsersBlogs') &&
xmlrpc.method_call('wp.getUsersBlogs', [SecureRandom.hex[0, 6], SecureRandom.hex[0, 4]]) !xmlrpc.method_call('wp.getUsersBlogs', [SecureRandom.hex[0, 6], SecureRandom.hex[0, 4]])
.run.body !~ /XML\-RPC services are disabled/ .run.body.match?(/>\s*405\s*</)
true true
else else
@@ -100,8 +107,10 @@ module WPScan
else else
Finders::Passwords::XMLRPC.new(xmlrpc) Finders::Passwords::XMLRPC.new(xmlrpc)
end end
else elsif target.login_url
Finders::Passwords::WpLogin.new(target) Finders::Passwords::WpLogin.new(target)
else
raise Error::NoLoginInterfaceDetected
end end
end end
@@ -113,15 +122,6 @@ module WPScan
acc << Model::User.new(elem.chomp) acc << Model::User.new(elem.chomp)
end end
end end
# @param [ String ] wordlist_path
#
# @return [ Array<String> ]
def passwords(wordlist_path)
@passwords ||= File.open(wordlist_path).reduce([]) do |acc, elem|
acc << elem.chomp
end
end
end end
end end
end end

View File

@@ -40,7 +40,7 @@ module WPScan
# @return [ Hash ] # @return [ Hash ]
def potential_urls(opts = {}) def potential_urls(opts = {})
urls = {} urls = {}
domain_name = PublicSuffix.domain(target.uri.host)[/(^[\w|-]+)/, 1] domain_name = (PublicSuffix.domain(target.uri.host) || target.uri.host)[/(^[\w|-]+)/, 1]
File.open(opts[:list]).each_with_index do |path, index| File.open(opts[:list]).each_with_index do |path, index|
path.gsub!('{domain_name}', domain_name) path.gsub!('{domain_name}', domain_name)

View File

@@ -7,7 +7,7 @@ module WPScan
class MuPlugins < CMSScanner::Finders::Finder class MuPlugins < CMSScanner::Finders::Finder
# @return [ InterestingFinding ] # @return [ InterestingFinding ]
def passive(_opts = {}) def passive(_opts = {})
pattern = %r{#{target.content_dir}/mu\-plugins/}i pattern = %r{#{target.content_dir}/mu-plugins/}i
target.in_scope_uris(target.homepage_res, '(//@href|//@src)[contains(., "mu-plugins")]') do |uri| target.in_scope_uris(target.homepage_res, '(//@href|//@src)[contains(., "mu-plugins")]') do |uri|
next unless uri.path&.match?(pattern) next unless uri.path&.match?(pattern)

View File

@@ -12,8 +12,8 @@ module WPScan
location = res.headers_hash['location'] location = res.headers_hash['location']
return unless [200, 302].include?(res.code) return unless [200, 302].include?(res.code)
return if res.code == 302 && location =~ /wp-login\.php\?action=register/ return if res.code == 302 && location&.include?('wp-login.php?action=register')
return unless res.code == 200 || res.code == 302 && location =~ /wp-signup\.php/ return unless res.code == 200 || res.code == 302 && location&.include?('wp-signup.php')
target.multisite = true target.multisite = true

View File

@@ -21,7 +21,7 @@ module WPScan
def passive_from_css_href(res, opts) def passive_from_css_href(res, opts)
target.in_scope_uris(res, '//link/@href[contains(., "style.css")]') do |uri| target.in_scope_uris(res, '//link/@href[contains(., "style.css")]') do |uri|
next unless uri.path =~ %r{/themes/([^\/]+)/style.css\z}i next unless uri.path =~ %r{/themes/([^/]+)/style.css\z}i
return create_theme(Regexp.last_match[1], uri.to_s, opts) return create_theme(Regexp.last_match[1], uri.to_s, opts)
end end
@@ -33,7 +33,7 @@ module WPScan
code = tag.text.to_s code = tag.text.to_s
next if code.empty? next if code.empty?
next unless code =~ %r{#{item_code_pattern('themes')}\\?/style\.css[^"'\( ]*}i next unless code =~ %r{#{item_code_pattern('themes')}\\?/style\.css[^"'( ]*}i
return create_theme(Regexp.last_match[1], Regexp.last_match[0].strip, opts) return create_theme(Regexp.last_match[1], Regexp.last_match[0].strip, opts)
end end

View File

@@ -13,7 +13,7 @@ module WPScan
def passive(opts = {}) def passive(opts = {})
found = [] found = []
slugs = items_from_links('themes', false) + items_from_codes('themes', false) slugs = items_from_links('themes', uniq: false) + items_from_codes('themes', uniq: false)
slugs.each_with_object(Hash.new(0)) { |slug, counts| counts[slug] += 1 }.each do |slug, occurences| slugs.each_with_object(Hash.new(0)) { |slug, counts| counts[slug] += 1 }.each do |slug, occurences|
found << Model::Theme.new(slug, target, opts.merge(found_by: found_by, confidence: 2 * occurences)) found << Model::Theme.new(slug, target, opts.merge(found_by: found_by, confidence: 2 * occurences))

View File

@@ -13,7 +13,7 @@ module WPScan
def valid_credentials?(response) def valid_credentials?(response)
response.code == 302 && response.code == 302 &&
[*response.headers['Set-Cookie']]&.any? { |cookie| cookie =~ /wordpress_logged_in_/i } Array(response.headers['Set-Cookie'])&.any? { |cookie| cookie =~ /wordpress_logged_in_/i }
end end
def errored_response?(response) def errored_response?(response)

View File

@@ -12,7 +12,7 @@ module WPScan
end end
def valid_credentials?(response) def valid_credentials?(response)
response.code == 200 && response.body =~ /blogName/ response.code == 200 && response.body.include?('blogName')
end end
def errored_response?(response) def errored_response?(response)

View File

@@ -22,8 +22,30 @@ module WPScan
target.multi_call(methods, cache_ttl: 0).run target.multi_call(methods, cache_ttl: 0).run
end end
# @param [ IO ] file
# @param [ Integer ] passwords_size
# @return [ Array<String> ] The passwords from the last checked position in the file until there are
# passwords_size passwords retrieved
def passwords_from_wordlist(file, passwords_size)
pwds = []
added_pwds = 0
return pwds if passwords_size.zero?
# Make sure that the main code does not call #sysseek or #count etc
# otherwise the file descriptor will be set to somwehere else
file.each_line(chomp: true) do |line|
pwds << line
added_pwds += 1
break if added_pwds == passwords_size
end
pwds
end
# @param [ Array<Model::User> ] users # @param [ Array<Model::User> ] users
# @param [ Array<String> ] passwords # @param [ String ] wordlist_path
# @param [ Hash ] opts # @param [ Hash ] opts
# @option opts [ Boolean ] :show_progression # @option opts [ Boolean ] :show_progression
# @option opts [ Integer ] :multicall_max_passwords # @option opts [ Integer ] :multicall_max_passwords
@@ -33,18 +55,22 @@ module WPScan
# TODO: Make rubocop happy about metrics etc # TODO: Make rubocop happy about metrics etc
# #
# rubocop:disable all # rubocop:disable all
def attack(users, passwords, opts = {}) def attack(users, wordlist_path, opts = {})
wordlist_index = 0 checked_passwords = 0
wordlist = File.open(wordlist_path)
wordlist_size = wordlist.count
max_passwords = opts[:multicall_max_passwords] max_passwords = opts[:multicall_max_passwords]
current_passwords_size = passwords_size(max_passwords, users.size) current_passwords_size = passwords_size(max_passwords, users.size)
create_progress_bar(total: (passwords.size / current_passwords_size.round(1)).ceil, create_progress_bar(total: (wordlist_size / current_passwords_size.round(1)).ceil,
show_progression: opts[:show_progression]) show_progression: opts[:show_progression])
wordlist.sysseek(0) # reset the descriptor to the beginning of the file as it changed with #count
loop do loop do
current_users = users.select { |user| user.password.nil? } current_users = users.select { |user| user.password.nil? }
current_passwords = passwords[wordlist_index, current_passwords_size] current_passwords = passwords_from_wordlist(wordlist, current_passwords_size)
wordlist_index += current_passwords_size checked_passwords += current_passwords_size
break if current_users.empty? || current_passwords.nil? || current_passwords.empty? break if current_users.empty? || current_passwords.nil? || current_passwords.empty?
@@ -76,16 +102,19 @@ module WPScan
break break
end end
progress_bar.total = progress_bar.progress + ((passwords.size - wordlist_index) / current_passwords_size.round(1)).ceil begin
progress_bar.total = progress_bar.progress + ((wordlist_size - checked_passwords) / current_passwords_size.round(1)).ceil
rescue ProgressBar::InvalidProgressError
end
end end
end end
# Maybe a progress_bar.stop ? # Maybe a progress_bar.stop ?
end end
# rubocop:disable all # rubocop:enable all
def passwords_size(max_passwords, users_size) def passwords_size(max_passwords, users_size)
return 1 if max_passwords < users_size return 1 if max_passwords < users_size
return 0 if users_size == 0 return 0 if users_size.zero?
max_passwords / users_size max_passwords / users_size
end end
@@ -94,9 +123,13 @@ module WPScan
def check_and_output_errors(res) def check_and_output_errors(res)
progress_bar.log("Incorrect response: #{res.code} / #{res.return_message}") unless res.code == 200 progress_bar.log("Incorrect response: #{res.code} / #{res.return_message}") unless res.code == 200
progress_bar.log('Parsing error, might be caused by a too high --max-passwords value (such as >= 2k)') if res.body =~ /parse error. not well formed/i if /parse error. not well formed/i.match?(res.body)
progress_bar.log('Parsing error, might be caused by a too high --max-passwords value (such as >= 2k)')
end
progress_bar.log('The requested method is not supported') if res.body =~ /requested method [^ ]+ does not exist/i return unless /requested method [^ ]+ does not exist/i.match?(res.body)
progress_bar.log('The requested method is not supported')
end end
end end
end end

View File

@@ -48,7 +48,7 @@ module WPScan
# #
# @return [ String, nil ] The version number detected from the stable tag # @return [ String, nil ] The version number detected from the stable tag
def from_stable_tag(body) def from_stable_tag(body)
return unless body =~ /\b(?:stable tag|version):\s*(?!trunk)([0-9a-z\.-]+)/i return unless body =~ /\b(?:stable tag|version):\s*(?!trunk)([0-9a-z.-]+)/i
number = Regexp.last_match[1] number = Regexp.last_match[1]
@@ -59,7 +59,7 @@ module WPScan
# #
# @return [ String, nil ] The best version number detected from the changelog section # @return [ String, nil ] The best version number detected from the changelog section
def from_changelog_section(body) def from_changelog_section(body)
extracted_versions = body.scan(%r{[=]+\s+(?:v(?:ersion)?\s*)?([0-9\.-]+)[ \ta-z0-9\(\)\.\-\/]*[=]+}i) extracted_versions = body.scan(%r{=+\s+(?:v(?:ersion)?\s*)?([0-9.-]+)[ \ta-z0-9().\-/]*=+}i)
return if extracted_versions.nil? || extracted_versions.empty? return if extracted_versions.nil? || extracted_versions.empty?

View File

@@ -30,7 +30,7 @@ module WPScan
# @return [ Version ] # @return [ Version ]
def style_version def style_version
return unless Browser.get(target.style_url).body =~ /Version:[\t ]*(?!trunk)([0-9a-z\.-]+)/i return unless Browser.get(target.style_url).body =~ /Version:[\t ]*(?!trunk)([0-9a-z.-]+)/i
Model::Version.new( Model::Version.new(
Regexp.last_match[1], Regexp.last_match[1],

View File

@@ -6,7 +6,8 @@ require_relative 'users/oembed_api'
require_relative 'users/rss_generator' require_relative 'users/rss_generator'
require_relative 'users/author_id_brute_forcing' require_relative 'users/author_id_brute_forcing'
require_relative 'users/login_error_messages' require_relative 'users/login_error_messages'
require_relative 'users/yoast_seo_author_sitemap.rb' require_relative 'users/author_sitemap'
require_relative 'users/yoast_seo_author_sitemap'
module WPScan module WPScan
module Finders module Finders
@@ -22,6 +23,7 @@ module WPScan
Users::WpJsonApi.new(target) << Users::WpJsonApi.new(target) <<
Users::OembedApi.new(target) << Users::OembedApi.new(target) <<
Users::RSSGenerator.new(target) << Users::RSSGenerator.new(target) <<
Users::AuthorSitemap.new(target) <<
Users::YoastSeoAuthorSitemap.new(target) << Users::YoastSeoAuthorSitemap.new(target) <<
Users::AuthorIdBruteForcing.new(target) << Users::AuthorIdBruteForcing.new(target) <<
Users::LoginErrorMessages.new(target) Users::LoginErrorMessages.new(target)

View File

@@ -0,0 +1,36 @@
# frozen_string_literal: true
module WPScan
module Finders
module Users
# Since WP 5.5, /wp-sitemap-users-1.xml is generated and contains
# the usernames of accounts who made a post
class AuthorSitemap < CMSScanner::Finders::Finder
# @param [ Hash ] opts
#
# @return [ Array<User> ]
def aggressive(_opts = {})
found = []
Browser.get(sitemap_url).html.xpath('//url/loc').each do |user_tag|
username = user_tag.text.to_s[%r{/author/([^/]+)/}, 1]
next unless username && !username.strip.empty?
found << Model::User.new(username,
found_by: found_by,
confidence: 100,
interesting_entries: [sitemap_url])
end
found
end
# @return [ String ] The URL of the sitemap
def sitemap_url
@sitemap_url ||= target.url('wp-sitemap-users-1.xml')
end
end
end
end
end

View File

@@ -37,7 +37,7 @@ module WPScan
# usernames from the potential Users found # usernames from the potential Users found
unames = opts[:found].map(&:username) unames = opts[:found].map(&:username)
[*opts[:list]].each { |uname| unames << uname.chomp } Array(opts[:list]).each { |uname| unames << uname.chomp }
unames.uniq unames.uniq
end end

View File

@@ -13,7 +13,7 @@ module WPScan
urls.each do |url| urls.each do |url|
res = Browser.get_and_follow_location(url) res = Browser.get_and_follow_location(url)
next unless res.code == 200 && res.body =~ /<dc\:creator>/i next unless res.code == 200 && res.body =~ /<dc:creator>/i
potential_usernames = [] potential_usernames = []

View File

@@ -5,27 +5,7 @@ module WPScan
module Users module Users
# The YOAST SEO plugin has an author-sitemap.xml which can leak usernames # The YOAST SEO plugin has an author-sitemap.xml which can leak usernames
# See https://github.com/wpscanteam/wpscan/issues/1228 # See https://github.com/wpscanteam/wpscan/issues/1228
class YoastSeoAuthorSitemap < CMSScanner::Finders::Finder class YoastSeoAuthorSitemap < AuthorSitemap
# @param [ Hash ] opts
#
# @return [ Array<User> ]
def aggressive(_opts = {})
found = []
Browser.get(sitemap_url).html.xpath('//url/loc').each do |user_tag|
username = user_tag.text.to_s[%r{/author/([^\/]+)/}, 1]
next unless username && !username.strip.empty?
found << Model::User.new(username,
found_by: found_by,
confidence: 100,
interesting_entries: [sitemap_url])
end
found
end
# @return [ String ] The URL of the author-sitemap # @return [ String ] The URL of the author-sitemap
def sitemap_url def sitemap_url
@sitemap_url ||= target.url('author-sitemap.xml') @sitemap_url ||= target.url('author-sitemap.xml')

View File

@@ -9,7 +9,7 @@ module WPScan
# @param [ Boolean ] uniq Wether or not to apply the #uniq on the results # @param [ Boolean ] uniq Wether or not to apply the #uniq on the results
# #
# @return [ Array<String> ] The plugins/themes detected in the href, src attributes of the page # @return [ Array<String> ] The plugins/themes detected in the href, src attributes of the page
def items_from_links(type, uniq = true) def items_from_links(type, uniq: true)
found = [] found = []
xpath = format( xpath = format(
'(//@href|//@src|//@data-src)[contains(., "%s")]', '(//@href|//@src|//@data-src)[contains(., "%s")]',
@@ -31,7 +31,7 @@ module WPScan
# @param [ Boolean ] uniq Wether or not to apply the #uniq on the results # @param [ Boolean ] uniq Wether or not to apply the #uniq on the results
# #
# @return [Array<String> ] The plugins/themes detected in the javascript/style of the homepage # @return [Array<String> ] The plugins/themes detected in the javascript/style of the homepage
def items_from_codes(type, uniq = true) def items_from_codes(type, uniq: true)
found = [] found = []
page_res.html.xpath('//script[not(@src)]|//style[not(@src)]').each do |tag| page_res.html.xpath('//script[not(@src)]|//style[not(@src)]').each do |tag|
@@ -55,7 +55,7 @@ module WPScan
# #
# @return [ Regexp ] # @return [ Regexp ]
def item_code_pattern(type) def item_code_pattern(type)
@item_code_pattern ||= %r{["'\( ]#{item_url_pattern(type)}([^\\\/\)"']+)}i @item_code_pattern ||= %r{["'( ]#{item_url_pattern(type)}([^\\/)"']+)}i
end end
# @param [ String ] type # @param [ String ] type
@@ -66,9 +66,9 @@ module WPScan
item_url = type == 'plugins' ? target.plugins_url : target.content_url item_url = type == 'plugins' ? target.plugins_url : target.content_url
url = /#{item_url.gsub(/\A(?:https?)/i, 'https?').gsub('/', '\\\\\?\/')}/i url = /#{item_url.gsub(/\A(?:https?)/i, 'https?').gsub('/', '\\\\\?\/')}/i
item_dir = %r{(?:#{url}|\\?\/#{item_dir.gsub('/', '\\\\\?\/')}\\?/)}i item_dir = %r{(?:#{url}|\\?/#{item_dir.gsub('/', '\\\\\?\/')}\\?/)}i
type == 'plugins' ? item_dir : %r{#{item_dir}#{type}\\?\/}i type == 'plugins' ? item_dir : %r{#{item_dir}#{type}\\?/}i
end end
end end
end end

View File

@@ -7,10 +7,11 @@ module WPScan
include References include References
end end
#
# Some classes are empty for the #type to be correctly displayed (as taken from the self.class from the parent)
#
class BackupDB < InterestingFinding class BackupDB < InterestingFinding
def to_s
@to_s ||= "A backup directory has been found: #{url}"
end
# @return [ Hash ] # @return [ Hash ]
def references def references
@references ||= { url: ['https://github.com/wpscanteam/wpscan/issues/422'] } @references ||= { url: ['https://github.com/wpscanteam/wpscan/issues/422'] }
@@ -18,6 +19,10 @@ module WPScan
end end
class DebugLog < InterestingFinding class DebugLog < InterestingFinding
def to_s
@to_s ||= "Debug Log found: #{url}"
end
# @ return [ Hash ] # @ return [ Hash ]
def references def references
@references ||= { url: ['https://codex.wordpress.org/Debugging_in_WordPress'] } @references ||= { url: ['https://codex.wordpress.org/Debugging_in_WordPress'] }
@@ -40,6 +45,10 @@ module WPScan
end end
class FullPathDisclosure < InterestingFinding class FullPathDisclosure < InterestingFinding
def to_s
@to_s ||= "Full Path Disclosure found: #{url}"
end
# @return [ Hash ] # @return [ Hash ]
def references def references
@references ||= { url: ['https://www.owasp.org/index.php/Full_Path_Disclosure'] } @references ||= { url: ['https://www.owasp.org/index.php/Full_Path_Disclosure'] }
@@ -71,6 +80,9 @@ module WPScan
end end
class Readme < InterestingFinding class Readme < InterestingFinding
def to_s
@to_s ||= "WordPress readme found: #{url}"
end
end end
class Registration < InterestingFinding class Registration < InterestingFinding
@@ -81,6 +93,10 @@ module WPScan
end end
class TmmDbMigrate < InterestingFinding class TmmDbMigrate < InterestingFinding
def to_s
@to_s ||= "ThemeMakers migration file found: #{url}"
end
# @return [ Hash ] # @return [ Hash ]
def references def references
@references ||= { packetstorm: [131_957] } @references ||= { packetstorm: [131_957] }
@@ -95,6 +111,9 @@ module WPScan
end end
class UploadSQLDump < InterestingFinding class UploadSQLDump < InterestingFinding
def to_s
@to_s ||= "SQL Dump found: #{url}"
end
end end
class WPCron < InterestingFinding class WPCron < InterestingFinding

View File

@@ -38,7 +38,7 @@ module WPScan
# @return [ Array<String> ] # @return [ Array<String> ]
def potential_readme_filenames def potential_readme_filenames
@potential_readme_filenames ||= [*(DB::DynamicFinders::Plugin.df_data.dig(slug, 'Readme', 'path') || super)] @potential_readme_filenames ||= Array((DB::DynamicFinders::Plugin.df_data.dig(slug, 'Readme', 'path') || super))
end end
end end
end end

View File

@@ -45,7 +45,7 @@ module WPScan
# @return [ Theme ] # @return [ Theme ]
def parent_theme def parent_theme
return unless template return unless template
return unless style_body =~ /^@import\surl\(["']?([^"'\)]+)["']?\);\s*$/i return unless style_body =~ /^@import\surl\(["']?([^"')]+)["']?\);\s*$/i
opts = detection_opts.merge( opts = detection_opts.merge(
style_url: url(Regexp.last_match[1]), style_url: url(Regexp.last_match[1]),
@@ -101,7 +101,7 @@ module WPScan
# #
# @return [ String ] # @return [ String ]
def parse_style_tag(body, tag) def parse_style_tag(body, tag)
value = body[/#{Regexp.escape(tag)}:[\t ]*([^\r\n\*]+)/i, 1] value = body[/\b#{Regexp.escape(tag)}:[\t ]*([^\r\n*]+)/, 1]
value && !value.strip.empty? ? value.strip : nil value && !value.strip.empty? ? value.strip : nil
end end

View File

@@ -40,9 +40,9 @@ module WPScan
def rce_132_vuln def rce_132_vuln
Vulnerability.new( Vulnerability.new(
'Timthumb <= 1.32 Remote Code Execution', 'Timthumb <= 1.32 Remote Code Execution',
{ exploitdb: ['17602'] }, references: { exploitdb: ['17602'] },
'RCE', type: 'RCE',
'1.33' fixed_in: '1.33'
) )
end end
@@ -50,12 +50,12 @@ module WPScan
def rce_webshot_vuln def rce_webshot_vuln
Vulnerability.new( Vulnerability.new(
'Timthumb <= 2.8.13 WebShot Remote Code Execution', 'Timthumb <= 2.8.13 WebShot Remote Code Execution',
{ references: {
url: ['http://seclists.org/fulldisclosure/2014/Jun/117', 'https://github.com/wpscanteam/wpscan/issues/519'], url: ['http://seclists.org/fulldisclosure/2014/Jun/117', 'https://github.com/wpscanteam/wpscan/issues/519'],
cve: '2014-4663' cve: '2014-4663'
}, },
'RCE', type: 'RCE',
'2.8.14' fixed_in: '2.8.14'
) )
end end

View File

@@ -39,7 +39,7 @@ module WPScan
@vulnerabilities = [] @vulnerabilities = []
[*db_data['vulnerabilities']].each do |json_vuln| Array(db_data['vulnerabilities']).each do |json_vuln|
vulnerability = Vulnerability.load_from_json(json_vuln) vulnerability = Vulnerability.load_from_json(json_vuln)
@vulnerabilities << vulnerability if vulnerable_to?(vulnerability) @vulnerabilities << vulnerability if vulnerable_to?(vulnerability)
end end

View File

@@ -53,7 +53,7 @@ module WPScan
@vulnerabilities = [] @vulnerabilities = []
[*db_data['vulnerabilities']].each do |json_vuln| Array(db_data['vulnerabilities']).each do |json_vuln|
@vulnerabilities << Vulnerability.load_from_json(json_vuln) @vulnerabilities << Vulnerability.load_from_json(json_vuln)
end end

View File

@@ -1,4 +1,7 @@
| <%= critical_icon %> Title: <%= @v.title %> | <%= critical_icon %> Title: <%= @v.title %>
<% if @v.cvss -%>
| CVSS: <%= @v.cvss[:score] %> (<%= @v.cvss[:vector] %>)
<% end -%>
<% if @v.fixed_in -%> <% if @v.fixed_in -%>
| Fixed in: <%= @v.fixed_in %> | Fixed in: <%= @v.fixed_in %>
<% end -%> <% end -%>

View File

@@ -19,6 +19,9 @@
<% vulns.each_with_index do |v, index| -%> <% vulns.each_with_index do |v, index| -%>
{ {
"title": <%= v.title.to_json %>, "title": <%= v.title.to_json %>,
<% if v.cvss -%>
"cvss": <%= v.cvss.to_json %>,
<% end -%>
"fixed_in": <%= v.fixed_in.to_json %>, "fixed_in": <%= v.fixed_in.to_json %>,
"references": <%= v.references.to_json %> "references": <%= v.references.to_json %>
}<% unless index == last_index -%>,<% end -%> }<% unless index == last_index -%>,<% end -%>

View File

@@ -31,7 +31,7 @@ module WPScan
finder_configs( finder_configs(
finder_class, finder_class,
Regexp.last_match[1] == 'aggressive' aggressive: Regexp.last_match[1] == 'aggressive'
) )
end end

View File

@@ -16,7 +16,7 @@ module WPScan
# @param [ Symbol ] finder_class # @param [ Symbol ] finder_class
# @param [ Boolean ] aggressive # @param [ Boolean ] aggressive
# @return [ Hash ] # @return [ Hash ]
def self.finder_configs(finder_class, aggressive = false) def self.finder_configs(finder_class, aggressive: false)
configs = {} configs = {}
return configs unless allowed_classes.include?(finder_class) return configs unless allowed_classes.include?(finder_class)

View File

@@ -24,7 +24,7 @@ module WPScan
# @param [ Symbol ] finder_class # @param [ Symbol ] finder_class
# @param [ Boolean ] aggressive # @param [ Boolean ] aggressive
# @return [ Hash ] # @return [ Hash ]
def self.finder_configs(finder_class, aggressive = false) def self.finder_configs(finder_class, aggressive: false)
configs = {} configs = {}
return configs unless allowed_classes.include?(finder_class) return configs unless allowed_classes.include?(finder_class)

View File

@@ -29,5 +29,11 @@ module WPScan
' use the --scope option or make sure the --url value given is the correct one' ' use the --scope option or make sure the --url value given is the correct one'
end end
end end
class NoLoginInterfaceDetected < Standard
def to_s
'Could not find a login interface to perform the password attack against'
end
end
end end
end end

View File

@@ -11,7 +11,7 @@ module WPScan
def self.child_class_constants def self.child_class_constants
@child_class_constants ||= super.merge( @child_class_constants ||= super.merge(
PARSER: nil, KEY: nil, PATTERN: /(?<v>\d+\.[\.\d]+)/, CONFIDENCE: 70 PARSER: nil, KEY: nil, PATTERN: /(?<v>\d+\.[.\d]+)/, CONFIDENCE: 70
) )
end end

View File

@@ -9,7 +9,7 @@ module WPScan
# @return [ Hash ] # @return [ Hash ]
def self.child_class_constants def self.child_class_constants
@child_class_constants ||= super().merge( @child_class_constants ||= super().merge(
XPATH: nil, FILES: nil, PATTERN: /(?:v|ver|version)\=(?<v>\d+\.[\.\d]+)/i, CONFIDENCE_PER_OCCURENCE: 10 XPATH: nil, FILES: nil, PATTERN: /(?:v|ver|version)=(?<v>\d+\.[.\d]+)/i, CONFIDENCE_PER_OCCURENCE: 10
) )
end end

View File

@@ -9,7 +9,7 @@ module WPScan
# @return [ Hash ] # @return [ Hash ]
def self.child_class_constants def self.child_class_constants
@child_class_constants ||= super().merge( @child_class_constants ||= super().merge(
XPATH: nil, PATTERN: /\A(?<v>\d+\.[\.\d]+)/, CONFIDENCE: 60 XPATH: nil, PATTERN: /\A(?<v>\d+\.[.\d]+)/, CONFIDENCE: 60
) )
end end

View File

@@ -33,7 +33,7 @@ module WPScan
# @return [ Hash ] # @return [ Hash ]
def self.child_class_constants def self.child_class_constants
@child_class_constants ||= super().merge(PATTERN: /ver\=(?<v>\d+\.[\.\d]+)/i) @child_class_constants ||= super().merge(PATTERN: /ver=(?<v>\d+\.[.\d]+)/i)
end end
end end

View File

@@ -13,7 +13,7 @@ end
# #
# @return [ Symbol ] # @return [ Symbol ]
def classify_slug(slug) def classify_slug(slug)
classified = slug.to_s.gsub(/[^a-z\d\-]/i, '-').gsub(/\-{1,}/, '_').camelize.to_s classified = slug.to_s.gsub(/[^a-z\d\-]/i, '-').gsub(/-{1,}/, '_').camelize.to_s
classified = "D_#{classified}" if /\d/.match?(classified[0]) classified = "D_#{classified}" if /\d/.match?(classified[0])
classified.to_sym classified.to_sym

View File

@@ -2,7 +2,7 @@
module WPScan module WPScan
# References module (which should be included along with the CMSScanner::References) # References module (which should be included along with the CMSScanner::References)
# to allow the use of the wpvulndb reference # to allow the use of the wpvulndb reference.
module References module References
extend ActiveSupport::Concern extend ActiveSupport::Concern

View File

@@ -19,13 +19,13 @@ module WPScan
# @return [ Boolean ] # @return [ Boolean ]
def vulnerable? def vulnerable?
[@wp_version, @main_theme, @plugins, @themes, @timthumbs].each do |e| [@wp_version, @main_theme, @plugins, @themes, @timthumbs].each do |e|
[*e].each { |ae| return true if ae && ae.vulnerable? } # rubocop:disable Style/SafeNavigation Array(e).each { |ae| return true if ae && ae.vulnerable? } # rubocop:disable Style/SafeNavigation
end end
return true unless [*@config_backups].empty? return true unless Array(@config_backups).empty?
return true unless [*@db_exports].empty? return true unless Array(@db_exports).empty?
[*@users].each { |u| return true if u.password } Array(@users).each { |u| return true if u.password }
false false
end end

View File

@@ -11,9 +11,9 @@ module WPScan
module WordPress module WordPress
include CMSScanner::Target::Platform::PHP include CMSScanner::Target::Platform::PHP
WORDPRESS_PATTERN = %r{/(?:(?:wp-content/(?:themes|(?:mu\-)?plugins|uploads))|wp-includes)/}i.freeze WORDPRESS_PATTERN = %r{/(?:(?:wp-content/(?:themes|(?:mu-)?plugins|uploads))|wp-includes)/}i.freeze
WP_JSON_OEMBED_PATTERN = %r{/wp\-json/oembed/}i.freeze WP_JSON_OEMBED_PATTERN = %r{/wp-json/oembed/}i.freeze
WP_ADMIN_AJAX_PATTERN = %r{\\?/wp\-admin\\?/admin\-ajax\.php}i.freeze WP_ADMIN_AJAX_PATTERN = %r{\\?/wp-admin\\?/admin-ajax\.php}i.freeze
# These methods are used in the associated interesting_findings finders # These methods are used in the associated interesting_findings finders
# to keep the boolean state of the finding rather than re-check the whole thing again # to keep the boolean state of the finding rather than re-check the whole thing again
@@ -139,15 +139,16 @@ module WPScan
# the first time the method is called, and the effective_url is then used # the first time the method is called, and the effective_url is then used
# if suitable, otherwise the default wp-login will be. # if suitable, otherwise the default wp-login will be.
# #
# @return [ String ] The URL to the login page # @return [ String, false ] The URL to the login page or false if not detected
def login_url def login_url
return @login_url if @login_url return @login_url unless @login_url.nil?
@login_url = url('wp-login.php') @login_url = url('wp-login.php') # TODO: url(ParsedCli.login_uri)
res = Browser.get_and_follow_location(@login_url) res = Browser.get_and_follow_location(@login_url)
@login_url = res.effective_url if res.effective_url =~ /wp\-login\.php\z/i && in_scope?(res.effective_url) @login_url = res.effective_url if res.effective_url =~ /wp-login\.php\z/i && in_scope?(res.effective_url)
@login_url = false if res.code == 404
@login_url @login_url
end end

View File

@@ -104,7 +104,7 @@ module WPScan
return @sub_dir unless @sub_dir.nil? return @sub_dir unless @sub_dir.nil?
# url_pattern is from CMSScanner::Target # url_pattern is from CMSScanner::Target
pattern = %r{#{url_pattern}(.+?)/(?:xmlrpc\.php|wp\-includes/)}i pattern = %r{#{url_pattern}(.+?)/(?:xmlrpc\.php|wp-includes/)}i
xpath = '(//@src|//@href|//@data-src)[contains(., "xmlrpc.php") or contains(., "wp-includes/")]' xpath = '(//@src|//@href|//@data-src)[contains(., "xmlrpc.php") or contains(., "wp-includes/")]'
[homepage_res, error_404_res].each do |page_res| [homepage_res, error_404_res].each do |page_res|
@@ -124,9 +124,9 @@ module WPScan
def url(path = nil) def url(path = nil)
return @uri.to_s unless path return @uri.to_s unless path
if %r{wp\-content/plugins}i.match?(path) if %r{wp-content/plugins}i.match?(path)
path = +path.gsub('wp-content/plugins', plugins_dir) path = +path.gsub('wp-content/plugins', plugins_dir)
elsif /wp\-content/i.match?(path) elsif /wp-content/i.match?(path)
path = +path.gsub('wp-content', content_dir) path = +path.gsub('wp-content', content_dir)
elsif path[0] != '/' && sub_dir elsif path[0] != '/' && sub_dir
path = "#{sub_dir}/#{path}" path = "#{sub_dir}/#{path}"

View File

@@ -2,5 +2,5 @@
# Version # Version
module WPScan module WPScan
VERSION = '3.8.0' VERSION = '3.8.6'
end end

View File

@@ -18,9 +18,10 @@ module WPScan
new( new(
json_data['title'], json_data['title'],
references, references: references,
json_data['vuln_type'], type: json_data['vuln_type'],
json_data['fixed_in'] fixed_in: json_data['fixed_in'],
cvss: json_data['cvss']&.symbolize_keys
) )
end end
end end

View File

@@ -70,7 +70,7 @@ describe WPScan::Controller::Core do
let(:cli_args) { "#{super()} --no-update" } let(:cli_args) { "#{super()} --no-update" }
it 'raises an error' do it 'raises an error' do
expect { core.update_db_required? }. to raise_error(WPScan::Error::MissingDatabaseFile) expect { core.update_db_required? }.to raise_error(WPScan::Error::MissingDatabaseFile)
end end
end end

View File

@@ -1,5 +1,24 @@
# frozen_string_literal: true # frozen_string_literal: true
XMLRPC_FAILED_BODY = '
<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
<fault>
<value>
<struct>
<member>
<name>faultCode</name>
<value><int>405</int></value>
</member>
<member>
<name>faultString</name>
<value><string>%s</string></value>
</member>
</struct>
</value>
</fault>
</methodResponse>'
describe WPScan::Controller::PasswordAttack do describe WPScan::Controller::PasswordAttack do
subject(:controller) { described_class.new } subject(:controller) { described_class.new }
let(:target_url) { 'http://ex.lo/' } let(:target_url) { 'http://ex.lo/' }
@@ -21,7 +40,7 @@ describe WPScan::Controller::PasswordAttack do
describe '#users' do describe '#users' do
context 'when no --usernames' do context 'when no --usernames' do
it 'calles target.users' do it 'calls target.users' do
expect(controller.target).to receive(:users) expect(controller.target).to receive(:users)
controller.users controller.users
end end
@@ -40,10 +59,6 @@ describe WPScan::Controller::PasswordAttack do
end end
end end
describe '#passwords' do
xit
end
describe '#run' do describe '#run' do
context 'when no --passwords is supplied' do context 'when no --passwords is supplied' do
it 'does not run the attacker' do it 'does not run the attacker' do
@@ -85,20 +100,34 @@ describe WPScan::Controller::PasswordAttack do
end end
context 'when wp.getUsersBlogs method listed' do context 'when wp.getUsersBlogs method listed' do
before { expect(xmlrpc).to receive(:available_methods).and_return(%w[wp.getUsersBlogs m2]) } before do
expect(xmlrpc).to receive(:available_methods).and_return(%w[wp.getUsersBlogs m2])
stub_request(:post, xmlrpc.url).to_return(body: body)
end
context 'when wp.getUsersBlogs method disabled' do context 'when wp.getUsersBlogs method disabled' do
it 'returns false' do context 'when blog is in EN' do
stub_request(:post, xmlrpc.url).to_return(body: 'XML-RPC services are disabled on this site.') let(:body) { format(XMLRPC_FAILED_BODY, 'XML-RPC services are disabled on this site.') }
expect(controller.xmlrpc_get_users_blogs_enabled?).to be false it 'returns false' do
expect(controller.xmlrpc_get_users_blogs_enabled?).to be false
end
end
context 'when blog is in FR' do
let(:body) { format(XMLRPC_FAILED_BODY, 'Les services XML-RPC sont désactivés sur ce site.') }
it 'returns false' do
expect(controller.xmlrpc_get_users_blogs_enabled?).to be false
end
end end
end end
context 'when wp.getUsersBlogs method enabled' do context 'when wp.getUsersBlogs method enabled' do
it 'returns true' do let(:body) { 'Incorrect username or password.' }
stub_request(:post, xmlrpc.url).to_return(body: 'Incorrect username or password.')
it 'returns true' do
expect(controller.xmlrpc_get_users_blogs_enabled?).to be true expect(controller.xmlrpc_get_users_blogs_enabled?).to be true
end end
end end
@@ -107,15 +136,34 @@ describe WPScan::Controller::PasswordAttack do
end end
describe '#attacker' do describe '#attacker' do
before do
allow(controller.target).to receive(:sub_dir)
controller.target.instance_variable_set(:@login_url, nil)
end
context 'when --password-attack provided' do context 'when --password-attack provided' do
let(:cli_args) { "#{super()} --password-attack #{attack}" } let(:cli_args) { "#{super()} --password-attack #{attack}" }
context 'when wp-login' do context 'when wp-login' do
before { stub_request(:get, controller.target.url('wp-login.php')).to_return(status: status) }
let(:attack) { 'wp-login' } let(:attack) { 'wp-login' }
it 'returns the correct object' do context 'when available' do
expect(controller.attacker).to be_a WPScan::Finders::Passwords::WpLogin let(:status) { 200 }
expect(controller.attacker.target).to be_a WPScan::Target
it 'returns the correct object' do
expect(controller.attacker).to be_a WPScan::Finders::Passwords::WpLogin
expect(controller.attacker.target).to be_a WPScan::Target
end
end
context 'when not available (404)' do
let(:status) { 404 }
it 'raises an error' do
expect { controller.attacker }.to raise_error(WPScan::Error::NoLoginInterfaceDetected)
end
end end
end end
@@ -172,11 +220,26 @@ describe WPScan::Controller::PasswordAttack do
context 'when automatic detection' do context 'when automatic detection' do
context 'when xmlrpc_get_users_blogs_enabled? is false' do context 'when xmlrpc_get_users_blogs_enabled? is false' do
it 'returns the WpLogin' do before do
expect(controller).to receive(:xmlrpc_get_users_blogs_enabled?).and_return(false) expect(controller).to receive(:xmlrpc_get_users_blogs_enabled?).and_return(false)
stub_request(:get, controller.target.url('wp-login.php')).to_return(status: status)
end
expect(controller.attacker).to be_a WPScan::Finders::Passwords::WpLogin context 'when wp-login available' do
expect(controller.attacker.target).to be_a WPScan::Target let(:status) { 200 }
it 'returns the WpLogin' do
expect(controller.attacker).to be_a WPScan::Finders::Passwords::WpLogin
expect(controller.attacker.target).to be_a WPScan::Target
end
end
context 'when wp-login.php not available' do
let(:status) { 404 }
it 'raises an error' do
expect { controller.attacker }.to raise_error(WPScan::Error::NoLoginInterfaceDetected)
end
end end
end end

View File

@@ -12,7 +12,7 @@ describe WPScan::Finders::DbExports::KnownLocations do
allow(target).to receive(:sub_dir).and_return(false) allow(target).to receive(:sub_dir).and_return(false)
end end
it 'replace {domain_name} by its value' do it 'replaces {domain_name} by its value' do
expect(finder.potential_urls(opts).keys).to eql %w[ expect(finder.potential_urls(opts).keys).to eql %w[
http://ex.lo/aa/ex.sql http://ex.lo/aa/ex.sql
http://ex.lo/aa/wordpress.sql http://ex.lo/aa/wordpress.sql
@@ -27,7 +27,7 @@ describe WPScan::Finders::DbExports::KnownLocations do
context "when #{sub_domain} sub-domain" do context "when #{sub_domain} sub-domain" do
let(:url) { "https://#{sub_domain}.domain.tld" } let(:url) { "https://#{sub_domain}.domain.tld" }
it 'replace {domain_name} by its correct value' do it 'replaces {domain_name} by its correct value' do
expect(finder.potential_urls(opts).keys).to include "#{url}/domain.sql" expect(finder.potential_urls(opts).keys).to include "#{url}/domain.sql"
end end
end end
@@ -36,7 +36,7 @@ describe WPScan::Finders::DbExports::KnownLocations do
context 'when multi-level tlds' do context 'when multi-level tlds' do
let(:url) { 'https://something.com.tr' } let(:url) { 'https://something.com.tr' }
it 'replace {domain_name} by its correct value' do it 'replaces {domain_name} by its correct value' do
expect(finder.potential_urls(opts).keys).to include 'https://something.com.tr/something.sql' expect(finder.potential_urls(opts).keys).to include 'https://something.com.tr/something.sql'
end end
end end
@@ -44,7 +44,7 @@ describe WPScan::Finders::DbExports::KnownLocations do
context 'when multi-level tlds and sub-domain' do context 'when multi-level tlds and sub-domain' do
let(:url) { 'https://dev.something.com.tr' } let(:url) { 'https://dev.something.com.tr' }
it 'replace {domain_name} by its correct value' do it 'replaces {domain_name} by its correct value' do
expect(finder.potential_urls(opts).keys).to include 'https://dev.something.com.tr/something.sql' expect(finder.potential_urls(opts).keys).to include 'https://dev.something.com.tr/something.sql'
end end
end end
@@ -52,10 +52,18 @@ describe WPScan::Finders::DbExports::KnownLocations do
context 'when some weird stuff' do context 'when some weird stuff' do
let(:url) { 'https://098f6bcd4621d373cade4e832627b4f6.aa-bb-ccc-dd.domain-test.com' } let(:url) { 'https://098f6bcd4621d373cade4e832627b4f6.aa-bb-ccc-dd.domain-test.com' }
it 'replace {domain_name} by its correct value' do it 'replaces {domain_name} by its correct value' do
expect(finder.potential_urls(opts).keys).to include "#{url}/domain-test.sql" expect(finder.potential_urls(opts).keys).to include "#{url}/domain-test.sql"
end end
end end
context 'when a non standard URL' do
let(:url) { 'http://dc-2' }
it 'replaces {domain_name} by its correct value' do
expect(finder.potential_urls(opts).keys).to include "#{url}/dc-2.sql"
end
end
end end
describe '#aggressive' do describe '#aggressive' do

View File

@@ -4,7 +4,7 @@ describe WPScan::Finders::InterestingFindings::EmergencyPwdResetScript do
subject(:finder) { described_class.new(target) } subject(:finder) { described_class.new(target) }
let(:target) { WPScan::Target.new(url).extend(CMSScanner::Target::Server::Apache) } let(:target) { WPScan::Target.new(url).extend(CMSScanner::Target::Server::Apache) }
let(:url) { 'http://ex.lo/' } let(:url) { 'http://ex.lo/' }
let(:file_url) { url + 'emergency.php' } let(:file_url) { "#{url}emergency.php" }
let(:fixtures) { FINDERS_FIXTURES.join('interesting_findings', 'emergency_pwd_reset_script') } let(:fixtures) { FINDERS_FIXTURES.join('interesting_findings', 'emergency_pwd_reset_script') }
before do before do

View File

@@ -4,7 +4,7 @@ describe WPScan::Finders::InterestingFindings::UploadSQLDump do
subject(:finder) { described_class.new(target) } subject(:finder) { described_class.new(target) }
let(:target) { WPScan::Target.new(url).extend(CMSScanner::Target::Server::Apache) } let(:target) { WPScan::Target.new(url).extend(CMSScanner::Target::Server::Apache) }
let(:url) { 'http://ex.lo/' } let(:url) { 'http://ex.lo/' }
let(:dump_url) { url + 'wp-content/uploads/dump.sql' } let(:dump_url) { "#{url}wp-content/uploads/dump.sql" }
let(:fixtures) { FINDERS_FIXTURES.join('interesting_findings', 'upload_sql_dump') } let(:fixtures) { FINDERS_FIXTURES.join('interesting_findings', 'upload_sql_dump') }
let(:wp_content) { 'wp-content' } let(:wp_content) { 'wp-content' }

View File

@@ -13,8 +13,8 @@ describe WPScan::Finders::Medias::AttachmentBruteForcing do
describe '#target_urls' do describe '#target_urls' do
it 'returns the expected urls' do it 'returns the expected urls' do
expect(finder.target_urls(range: (1..2))).to eql( expect(finder.target_urls(range: (1..2))).to eql(
url + '?attachment_id=1' => 1, "#{url}?attachment_id=1" => 1,
url + '?attachment_id=2' => 2 "#{url}?attachment_id=2" => 2
) )
end end
end end

View File

@@ -24,11 +24,13 @@ describe WPScan::Finders::Passwords::XMLRPC do
</methodResponse>' </methodResponse>'
describe '#attack' do describe '#attack' do
let(:wordlist_path) { FINDERS_FIXTURES.join('passwords.txt').to_s }
context 'when no valid credentials' do context 'when no valid credentials' do
before do before do
stub_request(:post, url).to_return(status: status, body: RESPONSE_403_BODY) stub_request(:post, url).to_return(status: status, body: RESPONSE_403_BODY)
finder.attack(users, %w[pwd]) finder.attack(users, wordlist_path)
end end
let(:users) { %w[admin].map { |username| WPScan::Model::User.new(username) } } let(:users) { %w[admin].map { |username| WPScan::Model::User.new(username) } }

View File

@@ -109,7 +109,7 @@ describe WPScan::Finders::PluginVersion::Readme do
'a-lead-capture-contact-form-and-tab-button-by-awebvoicecom' => '3.1', 'a-lead-capture-contact-form-and-tab-button-by-awebvoicecom' => '3.1',
'backup-scheduler' => '1.5.9', 'backup-scheduler' => '1.5.9',
'release_date_slash' => '1.0.4' 'release_date_slash' => '1.0.4'
}. each do |file, version_number| }.each do |file, version_number|
context "whith #{file}.txt" do context "whith #{file}.txt" do
it 'returns the expected version' do it 'returns the expected version' do
@file = "#{file}.txt" @file = "#{file}.txt"

View File

@@ -13,8 +13,8 @@ describe WPScan::Finders::Users::AuthorIdBruteForcing do
describe '#target_urls' do describe '#target_urls' do
it 'returns the correct URLs' do it 'returns the correct URLs' do
expect(finder.target_urls(range: (1..2))).to eql( expect(finder.target_urls(range: (1..2))).to eql(
url + '?author=1' => 1, "#{url}?author=1" => 1,
url + '?author=2' => 2 "#{url}?author=2" => 2
) )
end end
end end

View File

@@ -0,0 +1,48 @@
# frozen_string_literal: true
describe WPScan::Finders::Users::AuthorSitemap do
subject(:finder) { described_class.new(target) }
let(:target) { WPScan::Target.new(url) }
let(:url) { 'http://wp.lab/' }
let(:fixtures) { FINDERS_FIXTURES.join('users', 'author_sitemap') }
describe '#aggressive' do
before do
allow(target).to receive(:sub_dir).and_return(false)
stub_request(:get, finder.sitemap_url).to_return(body: body)
end
context 'when not an XML response' do
let(:body) { '' }
its(:aggressive) { should eql([]) }
end
context 'when an XML response' do
context 'when no usernames disclosed' do
let(:body) { File.read(fixtures.join('no_usernames.xml')) }
its(:aggressive) { should eql([]) }
end
context 'when usernames disclosed' do
let(:body) { File.read(fixtures.join('usernames.xml')) }
it 'returns the expected array of users' do
users = finder.aggressive
expect(users.size).to eql 2
expect(users.first.username).to eql 'admin'
expect(users.first.confidence).to eql 100
expect(users.first.interesting_entries).to eql ['http://wp.lab/wp-sitemap-users-1.xml']
expect(users.last.username).to eql 'author'
expect(users.last.confidence).to eql 100
expect(users.last.interesting_entries).to eql ['http://wp.lab/wp-sitemap-users-1.xml']
end
end
end
end
end

View File

@@ -8,7 +8,7 @@ describe WPScan::Finders::Users::Base do
describe '#finders' do describe '#finders' do
it 'contains the expected finders' do it 'contains the expected finders' do
expect(user.finders.map { |f| f.class.to_s.demodulize }) expect(user.finders.map { |f| f.class.to_s.demodulize })
.to eq %w[AuthorPosts WpJsonApi OembedApi RSSGenerator YoastSeoAuthorSitemap .to eq %w[AuthorPosts WpJsonApi OembedApi RSSGenerator AuthorSitemap YoastSeoAuthorSitemap
AuthorIdBruteForcing LoginErrorMessages] AuthorIdBruteForcing LoginErrorMessages]
end end
end end

View File

@@ -5,7 +5,7 @@ describe WPScan::Finders::WpVersion::Readme do
let(:target) { WPScan::Target.new(url).extend(CMSScanner::Target::Server::Apache) } let(:target) { WPScan::Target.new(url).extend(CMSScanner::Target::Server::Apache) }
let(:url) { 'http://ex.lo/' } let(:url) { 'http://ex.lo/' }
let(:fixtures) { FINDERS_FIXTURES.join('wp_version', 'readme') } let(:fixtures) { FINDERS_FIXTURES.join('wp_version', 'readme') }
let(:readme_url) { url + 'readme.html' } let(:readme_url) { "#{url}readme.html" }
describe '#aggressive' do describe '#aggressive' do
before { stub_request(:get, readme_url).to_return(body: File.read(fixtures.join(file))) } before { stub_request(:get, readme_url).to_return(body: File.read(fixtures.join(file))) }

View File

@@ -202,11 +202,11 @@ describe WPScan::Model::Plugin do
[ [
WPScan::Vulnerability.new( WPScan::Vulnerability.new(
'First Vuln <= 6.3.10 - LFI', 'First Vuln <= 6.3.10 - LFI',
{ wpvulndb: '1' }, references: { wpvulndb: '1' },
'LFI', type: 'LFI',
'6.3.10' fixed_in: '6.3.10'
), ),
WPScan::Vulnerability.new('No Fixed In', wpvulndb: '2') WPScan::Vulnerability.new('No Fixed In', references: { wpvulndb: '2' })
] ]
end end

View File

@@ -41,6 +41,12 @@ describe WPScan::Model::Theme do
its(:style_uri) { should eql 'http://www.elegantthemes.com/gallery/divi/' } its(:style_uri) { should eql 'http://www.elegantthemes.com/gallery/divi/' }
its(:license_uri) { should eql 'http://www.gnu.org/licenses/gpl-2.0.html' } its(:license_uri) { should eql 'http://www.gnu.org/licenses/gpl-2.0.html' }
end end
context 'when no tags' do
let(:fixture) { fixtures.join('no_tags.css') }
its(:author) { should eql nil }
end
end end
describe '#version' do describe '#version' do
@@ -224,11 +230,11 @@ describe WPScan::Model::Theme do
[ [
WPScan::Vulnerability.new( WPScan::Vulnerability.new(
'First Vuln', 'First Vuln',
{ wpvulndb: '1' }, references: { wpvulndb: '1' },
'LFI', type: 'LFI',
'6.3.10' fixed_in: '6.3.10'
), ),
WPScan::Vulnerability.new('No Fixed In', wpvulndb: '2') WPScan::Vulnerability.new('No Fixed In', references: { wpvulndb: '2' })
] ]
end end

View File

@@ -55,31 +55,15 @@ describe WPScan::Model::WpVersion do
expect(version).to be_vulnerable expect(version).to be_vulnerable
end end
let(:all_vulns) do
[
WPScan::Vulnerability.new(
'WP 3.8.1 - Vuln 1',
{ wpvulndb: '1' },
'SQLI'
),
WPScan::Vulnerability.new(
'WP 3.8.1 - Vuln 2',
{ url: %w[url-2 url-3], osvdb: %w[10], cve: %w[2014-0166], wpvulndb: '2' },
nil,
'3.8.2'
)
]
end
context 'when a signle vuln' do context 'when a signle vuln' do
let(:number) { '3.8.1' } let(:number) { '3.8' }
let(:db_data) { vuln_api_data_for('wordpresses/38') } let(:db_data) { vuln_api_data_for('wordpresses/38') }
it 'returns the expected result' do it 'returns the expected result' do
@expected = [WPScan::Vulnerability.new( @expected = [WPScan::Vulnerability.new(
'WP 3.8 - Vuln 1', 'WP 3.8 - Vuln 1',
{ url: %w[url-4], wpvulndb: '3' }, references: { url: %w[url-4], wpvulndb: '3' },
'AUTHBYPASS' type: 'AUTHBYPASS'
)] )]
end end
end end
@@ -92,14 +76,14 @@ describe WPScan::Model::WpVersion do
@expected = [ @expected = [
WPScan::Vulnerability.new( WPScan::Vulnerability.new(
'WP 3.8.1 - Vuln 1', 'WP 3.8.1 - Vuln 1',
{ wpvulndb: '1' }, references: { wpvulndb: '1' },
'SQLI' type: 'SQLI',
cvss: { score: '5.4', vector: 'VECTOR' }
), ),
WPScan::Vulnerability.new( WPScan::Vulnerability.new(
'WP 3.8.1 - Vuln 2', 'WP 3.8.1 - Vuln 2',
{ url: %w[url-2 url-3], cve: %w[2014-0166], wpvulndb: '2' }, references: { url: %w[url-2 url-3], cve: %w[2014-0166], wpvulndb: '2' },
nil, fixed_in: '3.8.2'
'3.8.2'
) )
] ]
end end

File diff suppressed because it is too large Load Diff

View File

@@ -9,7 +9,11 @@
"id" : 1, "id" : 1,
"vuln_type" : "SQLI", "vuln_type" : "SQLI",
"published_date" : null, "published_date" : null,
"fixed_in" : null "fixed_in" : null,
"cvss": {
"score": "5.4",
"vector": "VECTOR"
}
}, },
{ {
"references" : { "references" : {

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,13 @@
{
"name": "liveblog24-live-blogging-tool-cgb-guten-block",
"version": "2.0",
"private": true,
"scripts": {
"start": "cgb-scripts start",
"build": "cgb-scripts build",
"eject": "cgb-scripts eject"
},
"dependencies": {
"cgb-scripts": "1.23.0"
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,254 @@
# Copyright 2019
# This file is distributed under the GNU General Public License v3 or later.
msgid ""
msgstr ""
"Project-Id-Version: ACh Updates Manager v1.0.0\n"
"POT-Creation-Date: 2019-05-29 10:50+0100\n"
"PO-Revision-Date: 2019-05-29 10:50+0100\n"
"Last-Translator: Ali Chopani <Chopaniali@gmail.com>\n"
"Language-Team: A. Ch <Chopaniali@gmail.com>\n"
"Report-Msgid-Bugs-To: Ali Chopani <Chopaniali@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Textdomain-Support: yes"
"X-Generator: Poedit 2.2\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-KeywordsList: __;_e;esc_html_e;esc_html__;_x;\n"
"X-Poedit-Basepath: ../\n"
"X-Poedit-SearchPath-0: .\n"
"X-Poedit-Language: English\n"
"X-Poedit-Country: UNITED STATES\n"
"X-Poedit-Bookmarks: \n"
#: ACh-Updates-Manager.php:5
msgid "The ACh Updates and Notices Manager is an easy way to manage all your WordPress updates and notifications with one click! e.g. Disable all updates or notifications, Disable automatic updates, Hide errors and warnings messages, Update themes and plugins from zip file and etc."
msgstr ""
#: ACh-Updates-Manager.php:65
msgid "Thanks for installing %1$s v%2$s plugin. Click <a href="%3$s">here</a> to configure plugin settings."
msgstr ""
#: ACh-Updates-Manager.php:75
msgid "Manage"
msgstr ""
#: ACh-Updates-Manager.php:86
#: includes/acupnm-settings.php:34
#: includes/acupnm-settings.php:144
msgid "Support"
msgstr ""
#: ACh-Updates-Manager.php:87
msgid "Donate"
msgstr ""
#: ACh-Updates-Manager.php:103
#: includes/acupnm-settings.php:27
msgid "ACh Updates and Notices Manager"
msgstr ""
#: ACh-Updates-Manager.php:103
msgid "Updates Manager"
msgstr ""
#: includes/acupnm-settings.php:28
msgid "The ACh Update Manager plugin for WordPress. Manage all your WordPress updates and notifications with one click!"
msgstr ""
#: includes/acupnm-settings.php:33
msgid "Options"
msgstr ""
#: includes/acupnm-settings.php:44
msgid "&#10004; Disable all WP updates and notifs"
msgstr ""
#: includes/acupnm-settings.php:53
msgid "Disable all WordPress core, themes, plugins and translations updates and notifications."
msgstr ""
#: includes/acupnm-settings.php:57
msgid "&#10004; Hide all notices from WP dashboard"
msgstr ""
#: includes/acupnm-settings.php:66
msgid "Disable all notices from the WordPress dashboard. e.g. errors, updates, warning, rate us, license, dismissible and etc."
msgstr ""
#: includes/acupnm-settings.php:70
msgid "&#10004; Disable plugins updates and notifs"
msgstr ""
#: includes/acupnm-settings.php:79
msgid "Disable the WordPress plugins updates and notifications."
msgstr ""
#: includes/acupnm-settings.php:83
msgid "&#10004; Disable themes updates and notifs"
msgstr ""
#: includes/acupnm-settings.php:92
msgid "Disable the WordPress themes updates and notifications."
msgstr ""
#: includes/acupnm-settings.php:96
msgid "&#10004; Disable WP core update and notifs"
msgstr ""
#: includes/acupnm-settings.php:105
msgid "Disable the WordPress core update and notifications."
msgstr ""
#: includes/acupnm-settings.php:109
msgid "&#10004; Hide WordPress core update notice"
msgstr ""
#: includes/acupnm-settings.php:118
msgid "Hide WordPress core update notice from WP dashboard."
msgstr ""
#: includes/acupnm-settings.php:122
msgid "&#10004; Update theme and plugin from zip"
msgstr ""
#: includes/acupnm-settings.php:131
msgid "This feature allows you to update plugins and themes using a zip file. While upgrading, a backup copy of the old theme or plugin is first created. This allows you to install the old version in case of problems with the new version."
msgstr ""
#: includes/acupnm-settings.php:147
msgid "If you need assistance, see our help resources."
msgstr ""
#: includes/acupnm-settings.php:148
msgid "Please make a search to find help with your problem, or head over to our support forum to ask a question."
msgstr ""
#: includes/acupnm-settings.php:152
msgid "Visit my site"
msgstr ""
#: includes/acupnm-settings.php:155
msgid "Send email"
msgstr ""
#: includes/acupnm-settings.php:158
msgid "Support forum"
msgstr ""
#: includes/acupnm-settings.php:167
msgid "About us"
msgstr ""
#: includes/acupnm-settings.php:170
msgid "The ACh Updates and Notices Manager is an easy way to manage all your WordPress updates and notifications with one click!"
msgstr ""
#: includes/acupnm-settings.php:171
msgid "ACh Updates and Notices Manager was developed by <a class="achupnm-link-text" href="https://ach.li" target="_blank">A. Ch</a> and is <a class="achupnm-link-text" href="https://wordpress.org" target="_blank">available for free</a> on WordPress."
msgstr ""
#: includes/acupnm-settings.php:172
msgid "We work hard to give you an exceptional premium products and 5 star support. To show your appreciation you can buy us a coffee or simply by sharing or follow us on social media."
msgstr ""
#: includes/acupnm-settings.php:176
msgid "Buy us a coffee"
msgstr ""
#: includes/acupnm-settings.php:177
msgid "Like us"
msgstr ""
#: includes/acupnm-settings.php:178
msgid "Tweet us"
msgstr ""
#: includes/acupnm-settings.php:179
msgid "Rate us"
msgstr ""
#: includes/acupnm-settings.php:191
msgid "Save Changes"
msgstr ""
#: includes/easy-update/ach-plugin-updater.php:41
msgid "Upgrading the plugin&#8230;"
msgstr ""
#: includes/easy-update/ach-plugin-updater.php:42
msgid "Backing up the old version of the plugin&#8230;"
msgstr ""
#: includes/easy-update/ach-plugin-updater.php:88
msgid "A backup zip file of the old plugin version can be downloaded <a href="%1$s">here</a>."
msgstr ""
#: includes/easy-update/ach-plugin-updater.php:98
msgid "Moving the old version of the plugin to a new directory&#8230;"
msgstr ""
#: includes/easy-update/ach-plugin-updater.php:114
msgid "Unable to find a new directory name to move the old version of the plugin to. No backup will be created."
msgstr ""
#: includes/easy-update/ach-plugin-updater.php:120
msgid "Moved the old version of the plugin to a new plugin directory named %1$s. This directory should be backed up and removed from the site."
msgstr ""
#: includes/easy-update/ach-plugin-updater.php:122
msgid "Unable to move the old version of the plugin to a new directory. No backup will be created."
msgstr ""
#: includes/easy-update/ach-plugin-updater.php:142
msgid "A plugin backup can not be created since a destination path for the backup file could not be found."
msgstr ""
#: includes/easy-update/ach-plugin-updater.php:167
msgid "A plugin backup can not be created as creation of the zip file failed with the following error: %1$s"
msgstr ""
#: includes/easy-update/ach-plugin-updater.php:174
msgid "Plugin Backup - %1$s - %2$s"
msgstr ""
#: includes/easy-update/ach-theme-updater.php:41
msgid "Upgrading the theme&#8230;"
msgstr ""
#: includes/easy-update/ach-theme-updater.php:42
msgid "Backing up the old version of the theme&#8230;"
msgstr ""
#: includes/easy-update/ach-theme-updater.php:60
msgid "A backup zip file of the old theme version can be downloaded <a href="%1$s">here</a>."
msgstr ""
#: includes/easy-update/ach-theme-updater.php:70
msgid "Moving the old version of the theme to a new directory&#8230;"
msgstr ""
#: includes/easy-update/ach-theme-updater.php:91
msgid "Unable to find a new directory name to move the old version of the theme to. No backup will be created."
msgstr ""
#: includes/easy-update/ach-theme-updater.php:97
msgid "Moved the old version of the theme to a new theme directory named %1$s. This directory should be backed up and removed from the site."
msgstr ""
#: includes/easy-update/ach-theme-updater.php:99
msgid "Unable to move the old version of the theme to a new directory. No backup will be created."
msgstr ""
#: includes/easy-update/ach-theme-updater.php:119
msgid "A theme backup can not be created since a destination path for the backup file could not be found."
msgstr ""
#: includes/easy-update/ach-theme-updater.php:148
msgid "A theme backup can not be created as creation of the zip file failed with the following error: %1$s"
msgstr ""
#: includes/easy-update/ach-theme-updater.php:155
msgid "Theme Backup - %1$s - %2$s"
msgstr ""

View File

@@ -0,0 +1,42 @@
# Copyright (C) 2020 Acowebs
# This file is distributed under the same license as the Product Labels For Woocommerce plugin.
msgid ""
msgstr ""
"Project-Id-Version: Product Labels For Woocommerce 1.0.0\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/woocomerce-sales-badge\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"POT-Creation-Date: 2020-07-09T05:22:44+00:00\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"X-Generator: WP-CLI 2.3.0\n"
"X-Domain: aco-product-labels-for-woocommerce\n"
#. Plugin Name of the plugin
#. Description of the plugin
msgid "Product Labels For Woocommerce"
msgstr ""
#. Author of the plugin
msgid "Acowebs"
msgstr ""
#. Author URI of the plugin
msgid "http://acowebs.com"
msgstr ""
#: includes/class-acoplw-backend.php:130
#: includes/class-acoplw-backend.php:144
msgid "Badges"
msgstr ""
#: includes/class-acoplw-backend.php:132
#: includes/class-acoplw-backend.php:145
msgid "Product Lists"
msgstr ""
#: includes/class-acoplw-backend.php:134
msgid "Settings"
msgstr ""

View File

@@ -0,0 +1,111 @@
# Copyright (C) 2020 PRESSMAN
# This file is distributed under the same license as the Admin User Control plugin.
msgid ""
msgstr ""
"Project-Id-Version: Admin User Control 1.0.0\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/admin-user-"
"control\n"
"POT-Creation-Date: 2020-05-18T02:23:41+00:00\n"
"PO-Revision-Date: 2020-05-18 11:26+0900\n"
"Last-Translator: \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 2.3\n"
"X-Domain: admin-user-control\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. Plugin Name of the plugin
msgid "Admin User Control"
msgstr "Admin User Control"
#. Description of the plugin
msgid "Control admin user in administration screens in real time."
msgstr "管理画面にログインしているユーザーをリアルタイムで制御します。"
#. Author of the plugin
msgid "PRESSMAN"
msgstr "PRESSMAN"
#. Author URI of the plugin
msgid "https://www.pressman.ne.jp"
msgstr "https://www.pressman.ne.jp"
#: auc-login-monitor.php:22
msgid "Logged in"
msgstr "ログイン"
#: auc-maintenance.php:38 auc-maintenance.php:174
msgid "Maintenance"
msgstr "メンテナンス"
#: auc-maintenance.php:42 auc-maintenance.php:220
msgid "maintenance_start_date"
msgstr "メンテナンス開始日時"
#: auc-maintenance.php:59 auc-maintenance.php:221
msgid "maintenance_end_date"
msgstr "メンテナンス終了日時"
#: auc-maintenance.php:114
msgid "Forced logout after 10 seconds because the maintenance start time"
msgstr "メンテナンスの開始時刻になったため10秒後に強制ログアウトします"
#: auc-maintenance.php:115
msgid "Scheduled maintenance end time"
msgstr "メンテナンス終了予定時間"
#: auc-maintenance.php:175
msgid "Add New Maintenance"
msgstr "メンテナンスを追加"
#: auc-maintenance.php:176
msgid "Edit Maintenance"
msgstr "メンテナンスの編集"
#: auc-maintenance.php:246
msgid "Latest maintenance information"
msgstr "直近のメンテナンス情報"
#: auc-maintenance.php:269
msgid "Click a title to display a detail."
msgstr "タイトルをクリックすると詳細が表示されます。"
#: auc-maintenance.php:287
msgid "No maintenance information"
msgstr "メンテナンス情報がありません"
#: auc-notification.php:26
msgid "New notification"
msgstr "新しいお知らせがあります"
#: auc-notification.php:50
msgid "Notification"
msgstr "お知らせ"
#: auc-notification.php:51
msgid "Add New Notification"
msgstr "お知らせを追加"
#: auc-notification.php:52
msgid "Edit Notification"
msgstr "お知らせの編集"
#: auc-notification.php:70
msgid "Latest notifications"
msgstr "直近のお知らせ"
#: auc-notification.php:86
msgid "Click a title to display a detail. If you read it, mark it as read."
msgstr ""
"タイトルをクリックすると詳細が表示されます。読んだら既読にしてください。"
#: auc-notification.php:91
msgid "Mark as read"
msgstr "既読にする"
#: auc-notification.php:113
msgid "There is no notifications"
msgstr "お知らせがありません"

View File

@@ -0,0 +1,73 @@
# Copyright (C) 2020 Condless
# This file is distributed under the same license as the Advanced Options for WooCommerce plugin.
msgid ""
msgstr ""
"Project-Id-Version: Advanced Options for WooCommerce 1.0.1\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/advanced-options-"
"for-woocommerce\n"
"Language-Team: Condless <info@condless.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"POT-Creation-Date: 2020-04-24 08:53+0300\n"
"PO-Revision-Date: 2020-04-24 08:55+0300\n"
"X-Generator: Poedit 2.3\n"
"X-Domain: advanced-options-for-woocommerce\n"
"Last-Translator: Condless <info@condless.com>\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : n==2 ? 1 : n>10 && n%10==0 ? "
"2 : 3);\n"
"Language: he_IL\n"
#. Plugin Name of the plugin
msgid "Advanced Options for WooCommerce"
msgstr "אפשרויות מתקדמות לווקומרס"
#. Plugin URI of the plugin
msgid "https://en.condless.com/advanced-options-for-woocommerce/"
msgstr "https://www.condless.com/advanced-options-for-woocommerce/"
#. Description of the plugin
msgid ""
"WooCommerce plugin for more options and customizations. Simple and Easy to "
"use."
msgstr "תוסף לווקומרס לאפשרויות נוספות והתאמה אישית. פשוט וקל לשימוש."
#. Author of the plugin
msgid "Condless"
msgstr "Condless"
#. Author URI of the plugin
msgid "https://www.condless.com/"
msgstr "https://www.condless.com/"
#: advanced-options-for-woocommerce.php:163
msgid "contains letters not from the permitted languages"
msgstr "מכיל אותיות שלא שייכות לשפות המותרות"
#: advanced-options-for-woocommerce.php:200
msgid "Advanced Options"
msgstr "אפשרויות מתקדמות"
#: advanced-options-for-woocommerce.php:235
msgid ""
"Allow only ASCII chars (which prevent non-English letters) in the checkout "
"fields"
msgstr "אפשר רק תווי ASCII (מה שמונע אותיות שלא באנגלית) בשדות התשלום"
#: advanced-options-for-woocommerce.php:241
msgid ""
"Display the VAT amount and the product price include & exlude it in single "
"product page"
msgstr "הצג את סכום המע\"מ ואת מחיר המוצר איתו ובלעדיו בעמוד מוצר"
#: advanced-options-for-woocommerce.php:247
msgid "Display for variable products the attribute name instead of"
msgstr "הצג במוצרים עם וריאיציות את שם התכונה במקום"
#: advanced-options-for-woocommerce.php:253
msgid "Display only products in"
msgstr "הצג מוצרים בלבד ב"
#: advanced-options-for-woocommerce.php:259
msgid "Auto triggered by"
msgstr "פועל אוטומטית כאשר"

View File

@@ -0,0 +1,26 @@
{
"name": "affiliatewp-blocks",
"version": "1.0.1",
"description": "Blocks for AffiliateWP.",
"author": "Sandhills Development, LLC",
"license": "GPL-2.0-or-later",
"main": "build/index.js",
"scripts": {
"build": "wp-scripts build",
"format:js": "wp-scripts format-js",
"lint:css": "wp-scripts lint-style",
"lint:js": "wp-scripts lint-js",
"start": "wp-scripts start",
"packages-update": "wp-scripts packages-update"
},
"devDependencies": {
"@wordpress/scripts": "^7.2.0"
},
"dependencies": {
"@wordpress/icons": "^1.4.0",
"@wordpress/url": "^2.14.0",
"classnames": "^2.2.6",
"lodash": "^4.17.15",
"trailing-slash-it": "^0.3.0"
}
}

View File

@@ -0,0 +1,61 @@
# Copyright (C) 2020 aiaibot
# This file is distributed under the same license as the aiaibot plugin.
msgid ""
msgstr ""
"Project-Id-Version: aiaibot 1.0.3\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/aiaibot\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"POT-Creation-Date: 2020-05-20T09:25:54+00:00\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"X-Generator: WP-CLI 2.4.0\n"
"X-Domain: aiaibot\n"
#. Plugin Name of the plugin
#. Author of the plugin
msgid "aiaibot"
msgstr ""
#. Plugin URI of the plugin
msgid "https://wordpress.org/plugins/aiaibot/"
msgstr ""
#. Description of the plugin
msgid "Integrate your aiaibot chatbot."
msgstr ""
#. Author URI of the plugin
msgid "https://app.aiaibot.com"
msgstr ""
#: admin/class-aiaibot-admin.php:84
msgid "Integration Code"
msgstr ""
#: admin/class-aiaibot-admin.php:92
msgid "Enabled"
msgstr ""
#: admin/class-aiaibot-admin.php:112
msgid "Implement your chatbot on your Wordpress page"
msgstr ""
#: admin/class-aiaibot-admin.php:123
msgid "Config id is not valid."
msgstr ""
#: admin/class-aiaibot-admin.php:147
msgid "Chatbot Integration Settings"
msgstr ""
#. translators: %s: url to the app.aiaibot
#: admin/class-aiaibot-admin.php:155
msgid "Get the integration code on %s."
msgstr ""
#: admin/class-aiaibot-admin.php:157
msgid "Publish Chatbot"
msgstr ""

View File

@@ -0,0 +1,91 @@
# Blank WordPress Pot
# Copyright 2014 ...
# This file is distributed under the GNU General Public License v3 or later.
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: "
"Blank WordPress Pot "
"v1.0.0\n"
"POT-Creation-Date: "
"2020-07-27 14:57+0200\n"
"PO-Revision-Date: \n"
"Last-Translator: Fredrik Stigsson"
"<info@annytab.se>\n"
"Language-Team: Your Team "
"<translations@example."
"com>\n"
"Report-Msgid-Bugs-To: "
"Translator Name "
"<translations@example."
"com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/"
"plain; charset=UTF-8\n"
"Content-Transfer-"
"Encoding: 8bit\n"
"Plural-Forms: "
"nplurals=2; plural=n != "
"1;\n"
"X-Textdomain-Support: "
"yesX-Generator: Poedit "
"1.6.4\n"
"X-Poedit-SourceCharset: "
"UTF-8\n"
"X-Poedit-KeywordsList: "
"__;_e;esc_html_e;"
"esc_html_x:1,2c;"
"esc_html__;esc_attr_e;"
"esc_attr_x:1,2c;"
"esc_attr__;_ex:1,2c;"
"_nx:4c,1,2;"
"_nx_noop:4c,1,2;_x:1,2c;"
"_n:1,2;_n_noop:1,2;"
"__ngettext:1,2;"
"__ngettext_noop:1,2;_c,"
"_nc:4c,1,2\n"
"X-Poedit-Basepath: ..\n"
"Language: en_US\n"
"X-Generator: Poedit 2.4\n"
"X-Poedit-"
"SearchPath-0: .\n"
#: annytab-photoswipe.php:85
msgid "Share on Facebook"
msgstr ""
#: annytab-photoswipe.php:86
msgid "Tweet"
msgstr ""
#: annytab-photoswipe.php:87
msgid "Pin it"
msgstr ""
#: annytab-photoswipe.php:88
msgid "Download image"
msgstr ""
#: annytab-photoswipe.php:114
msgid "Close (Esc)"
msgstr ""
#: annytab-photoswipe.php:116
msgid "Share"
msgstr ""
#: annytab-photoswipe.php:118
msgid "Toggle fullscreen"
msgstr ""
#: annytab-photoswipe.php:120
msgid "Zoom in/out"
msgstr ""
#: annytab-photoswipe.php:137
msgid "Previous"
msgstr ""
#: annytab-photoswipe.php:140
msgid "Next"
msgstr ""

View File

@@ -0,0 +1,7 @@
== Changelog ==
= 0.5.1 - 2020-04-14 =
* fixed performance problem on sites with large amount of posts
= 0.5.0 - 2020-04-14 =
* Initial public release

View File

@@ -0,0 +1,41 @@
{
"name": "agu-apijoin",
"version": "1.0.0",
"description": "test",
"main": "index.js",
"scripts": {
"build": "wp-scripts build",
"check-engines": "wp-scripts check-engines",
"check-licenses": "wp-scripts check-licenses",
"format:js": "wp-scripts format-js",
"lint:css": "wp-scripts lint-style",
"lint:js": "wp-scripts lint-js",
"lint:md:docs": "wp-scripts lint-md-docs",
"lint:md:js": "wp-scripts lint-md-js",
"lint:pkg-json": "wp-scripts lint-pkg-json",
"packages-update": "wp-scripts packages-update",
"start": "wp-scripts start",
"test:e2e": "wp-scripts test-e2e",
"test:unit": "wp-scripts test-unit-js"
},
"author": "Miguras",
"license": "ISC",
"dependencies": {
"@wordpress/scripts": "^7.1.0",
"css-loader": "^3.4.2",
"html-react-parser": "^0.10.3",
"image-webpack-loader": "^6.0.0",
"react-responsive-carousel": "^3.1.51",
"react-slick": "^0.25.2",
"react-smart-slider": "^0.1.2",
"slick-carousel": "^1.8.1",
"style-loader": "^1.1.3",
"styled-jsx-plugin-stylelint": "^0.1.0",
"webpack": "^4.41.6"
},
"devDependencies": {
"file-loader": "^5.1.0",
"svgo": "^1.3.2",
"svgo-loader": "^2.2.1"
}
}

View File

@@ -0,0 +1,88 @@
# Copyright (C) 2020 PRESSMAN
# This file is distributed under the same license as the App Log plugin.
msgid ""
msgstr ""
"Project-Id-Version: App Log 1.1\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/app-log\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"POT-Creation-Date: 2020-07-29T02:35:19+00:00\n"
"PO-Revision-Date: 2020-08-07T06:01:23+00:00\n"
"X-Generator: WP-CLI 2.4.0\n"
"X-Domain: aplg\n"
#. Plugin Name of the plugin
#: admin/aplg-dashboard.php:48
#: admin/aplg-settings.php:38
msgid "App Log"
msgstr ""
#. Description of the plugin
msgid "A simple logger for debugging."
msgstr ""
#. Author of the plugin
msgid "PRESSMAN"
msgstr ""
#. Author URI of the plugin
msgid "https://www.pressman.ne.jp/"
msgstr ""
#: admin/aplg-dashboard.php:64
msgid "File will be deleted. Are you sure you want to proceed?"
msgstr ""
#: admin/aplg-dashboard.php:83
msgid "Delete"
msgstr ""
#: admin/aplg-dashboard.php:105
msgid "No logs found."
msgstr ""
#: admin/aplg-dashboard.php:117
msgid "Log File List"
msgstr ""
#: admin/aplg-dashboard.php:117
msgid "Path"
msgstr ""
#: admin/aplg-dashboard.php:152
msgid "Set path to where the application logs are stored"
msgstr ""
#: admin/aplg-dashboard.php:159
msgid "※No need to set if default path will be used. (Default Path: %s)"
msgstr ""
#: admin/aplg-dashboard.php:191
msgid "Invalid access"
msgstr ""
#: admin/aplg-dashboard.php:231
#: classes/class-aplg-logger.php:122
msgid "%s successfully deleted."
msgstr ""
#: admin/aplg-settings.php:37
#: admin/aplg-settings.php:53
msgid "App Log Settings"
msgstr ""
#: admin/aplg-settings.php:60
msgid "Log Directory"
msgstr ""
#: admin/aplg-settings.php:68
msgid "Enable/Disable Mail Log"
msgstr ""
#: classes/class-aplg-logger.php:114
#: classes/class-aplg-logger.php:127
msgid "Failed to delete log."
msgstr ""

View File

@@ -0,0 +1,292 @@
# Changelog
All notable changes to this project will be documented in this file.
##[1.8.4] - 2020-05-21
### Added
- Button icon size option
- Button appearing animation option
- Menu sidebar style
- Menu popup animation
- Menu sidebar animation
- Menu items animation
- Plugin core updated
##[1.8.3] - 2020-05-19
### Added
- Deactivation plugin for current domain
- PhpLive integration
- Paldesk integration
##[1.8.2] - 2020-05-15
### Fixed
- Small issues
##[1.8.1] - 2020-05-11
### Added
- Output filtration
- Server config values validation
##[1.8.0] - 2020-05-06
### Added
- Option to choose who can access callback list
### Fixed
- Security improvements
##[1.7.9] - 2020-04-09
### Fixed
- Skype integration
- FreshChat integration
##[1.7.8] - 2020-02-07
### Fixed
- Tawk.to appearance issue
##[1.7.7] - 2020-01-29
### Added
- FreshChat integration
##[1.7.6] - 2020-01-20
### Fixed
- Zoho SalesIQ chat integration fix
##[1.7.5] - 2020-01-14
### Added
- Zoho SalesIQ chat integration
##[1.7.4] - 2019-12-18
### Fixed
- Name validation unicode languages
##[1.7.3] - 2019-12-15
### Fixed
- Name validation unicode languages
##[1.7.2] - 2019-12-13
### Added
- Name field validation options
- Email field to callback form
- Email field to callback requests table
- Updated translations
### Fixed
- Email subject translation
##[1.7.1] - 2019-12-04
### Fixed
- Activation issue
##[1.7.0] - 2019-11-30
### Fixed
- Fixed JivoSite issue
##[1.6.9] - 2019-11-22
### Fixed
- Fixed Tawk.to issue
##[1.6.8] - 2019-09-30
### Fixed
- Fixed JivoSite issue
##[1.6.7] - 2019-09-25
### Fixed
- HTML code in GDRP Title
##[1.6.6] - 2019-09-03
### Added
- Tidio Integration
- Jivosite integration
- Added comments functionality to callback requests
- Updated translation template
- Updated Russian translation
- Added Google Analytics integration
### Fixed
- Callback requests admin table mobile view
##[1.6.4] - 2019-08-05
### Fixed
- LiveZilla integration
##[1.6.3] - 2019-07-31
### Added
- Name and referer fileds to email notification
- Name and referer fileds to webpush notification
- Name and referer fileds to sms notification
- Name and referer fileds to telegram notification
- Export callback requests to CSV file
- Delay initialization
- Disable initialization
- Open menu after timeout automatically
##[1.6.2] - 2019-06-01
### Fixed
- Crisp integration issue
- Callback customer name field
##[1.6.1] - 2019-05-27
### Added
- Custom popup item type - allows to open popup with text/html content by clicking menu item
- Name field to callback form
- Activation functionality
##[1.5.9] - 2019-05-01
### Added
- Background and color option for shortcode
### Fixed
- Exporting data issue on some PHP versions
- Button and menu z-index
- Modal conflict with SimpleModal
- Safari item editing/adding
##[1.5.8] - 2019-04-29
### Added
- GDPR checkbox
##[1.5.7] - 2019-04-25
### Added
- WooCommerce StoreFront theme integration to mobile footer
- New Menu style - icons without background
- 1-click auto update
- LiveZilla integration
- StoreFront theme compliant - now you can add "contact-us" button to storefront mobile footer
### Fixed
- LiveChat Pro integration issue
- Update issue
- Generate css after import
##[1.5.5] - 2019-04-08
### Added
- LiveChat Pro integration
- Close callback popup timeout
- Menu items subtitles
- Option to display menu item for all users or registred users or unregistred users only
- FontAwesome icons support
### Fixed
- Performance improved
##[1.5.3] - 2019-04-02
### Added
- New icons
### Fixed
- Skype WebControl integration
- UI bootstrap conflicts
##[1.5.2] - 2019-03-14
### Added
- Predefinded Brand Colors selector
### Fixed
- Landscape responsive
- Layout fixes
##[1.5.1] - 2019-02-26
### Added
- Menu width option
- Callback request form width option
##[1.5.0] - 2019-02-24
### Added
- LiveChat integration (livechatinc.com)
- SmartSupp integratin
- All button settings now can be set separately for descktop and mobile versions
- All menu settings now can be set separately for descktop and mobile versions
- All prompts settings now can be set separately for descktop and mobile versions
- Pause between main button animation loops
- Icon type option to menu settings
- Lines options to menu settings
- Header options to menu settings
- Header close button options to menu settings
- Shadow size/opacity to menu settings
- Export option (for exporting all module data)
- Import option (for impoting all module data)
- Prompt position option
- Russian translation
- Light design updates
### Fixed
- TextDomain loading
- Html email bug
- RTL bug
- Improved responsivness
- Email adress validation
##[1.3.9] - 2019-02-01
### Added
- Live helper chat integration
### Fixed
- Callback mobile form layout
- Zalo chat validation error
- Callback is not running custom JS code
##[1.3.8] - 2019-01-30
### Added
- OneSignal integration to receive webpush on callback request
- Link target option
- Option to control when display prompt messages again after visitor closed them
- Shortcodes for menu items
##[1.3.7] - 2019-01-26
### Fixed
- create_function deprecated in php 7.2
- load plugin text domain
##[1.3.5] - 2019-01-18
### Added
- LinkedIn icon
- Instagram icon
- Zendesk icon
- Zendesk chat support
- Sandbox mode
- Html mail support
- Main button mode option (callback only or menu)
- Zalo integration
### Fixed
- Problem with ajaxUrl on some WP versions
- CSS fixes
- Tawk.to hidding issue
##[1.3.3] - 2019-01-03
### Added
- Zalo icon
### Fixed
- Fixed bootstrap conflicts
##[1.3.2] - 2018-10-09
### Fixed
- Fixed innoDB tables creation
##[1.3.1] - 2018-09-25
### Added
- More icons
- Telegram bot
- Change main button feature
- Phone mask feature
- Crisp integration
- Tawk.to integration
- Hashtags commands
##[1.3.0] - 2018-08-02
### Added
- Skype Web Control integration
- Zendesk chat integration
- VK community messages integration
- Facebook customer chat integration
- Prompt messages feature
##[1.2.0] - 2018-07-21
### Added
- Menu size
- Main button size
- Twilio integration
##[1.0.0] - 2018-06-19
- First released version

View File

@@ -0,0 +1,316 @@
# Copyright (C) 2020 Konstantin Kröpfl
# This file is distributed under the same license as the Attachment Usage plugin.
msgid ""
msgstr ""
"Project-Id-Version: Attachment Usage 1.0.0\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/attachment-usage\n"
"POT-Creation-Date: 2020-07-01 17:28+0200\n"
"PO-Revision-Date: 2020-07-01 17:28+0200\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: 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.12\n"
"X-Domain: attachment-usage\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. Plugin Name of the plugin
msgid "Attachment Usage"
msgstr ""
#. Plugin URI of the plugin
msgid "https://wordpress.org/plugins/attachment-usage/"
msgstr ""
#. Description of the plugin
msgid ""
"This plugin shows the usage of attachments (posts, widgets, products) on the "
"website."
msgstr ""
"Dieses Plugin zeigt die Verwendung von Anhängen (Beiträge, Widgets, "
"Produkten) auf der Website an."
#. Author of the plugin
msgid "Konstantin Kröpfl"
msgstr ""
#. Author URI of the plugin
msgid "#"
msgstr ""
#: admin/class-attachment-usage-admin.php:135
#: admin/classes/attachment-list-table.php:13
#: includes/class-attachment-usage.php:214
msgid "Attachment Usages"
msgstr "Anhang-Verwendung"
#: admin/class-attachment-usage-admin.php:155
msgid "No valid Ajax request"
msgstr "keine gültige Ajax Anfrage"
#: admin/class-attachment-usage-admin.php:163
msgid "No valid Attachment Id sent"
msgstr "keine gültige Anhangs-Id übermittelt"
#: admin/classes/attachment-item-usage-db-controller.php:67
#: admin/classes/attachment-list-table.php:29
msgid "found"
msgstr "gefunden"
#: admin/classes/attachment-item-usage-db-controller.php:69
#: admin/classes/attachment-list-table.php:27
msgid "not-found"
msgstr "nicht gefunden"
#: admin/classes/fetch-button-content-helper.php:18
#: admin/js/attachment-usage-media-library-behavior.js:62
msgid "Fetch Attachment Usage"
msgstr "Anhang aktualisieren"
#: admin/classes/output_setting/attachment-output-setting-factory.php:25
msgid "(in widget)"
msgstr "(in Widget)"
#: admin/classes/output_setting/attachment-output-setting-factory.php:26
msgid "Widgets"
msgstr ""
#: admin/classes/output_setting/attachment-output-setting-factory.php:31
msgid "(in product category)"
msgstr "(in Produktkategorie)"
#: admin/classes/output_setting/attachment-output-setting-factory.php:32
msgid "Product Category"
msgstr "Produktkategorie"
#: admin/classes/output_setting/attachment-output-setting-factory.php:37
msgid "(in product gallery)"
msgstr "(in Produktgalerie)"
#: admin/classes/output_setting/attachment-output-setting-factory.php:38
msgid "Product Attachment"
msgstr "Produktanhang"
#: admin/classes/output_setting/attachment-output-setting-factory.php:43
msgid "(in product content)"
msgstr "(in Produktinhalt)"
#: admin/classes/output_setting/attachment-output-setting-factory.php:44
msgid "Product Content"
msgstr "Produktinhalt"
#: admin/classes/output_setting/attachment-output-setting-factory.php:49
msgid "(in post content)"
msgstr "(in Beitragsinhalt)"
#: admin/classes/output_setting/attachment-output-setting-factory.php:50
msgid "Post Content"
msgstr "Beitraginhalt"
#: admin/classes/output_setting/attachment-output-setting-factory.php:55
msgid "(in page content)"
msgstr "(in Seiteninhalt)"
#: admin/classes/output_setting/attachment-output-setting-factory.php:56
msgid "Page Content"
msgstr "Seiteninhalt"
#: admin/classes/output_setting/attachment-output-setting-factory.php:61
msgid "(thumbnail)"
msgstr "(Miniaturbild)"
#: admin/classes/output_setting/attachment-output-setting-factory.php:62
msgid "Post Attachment"
msgstr "Beitraganhang"
#: admin/classes/result_builder/result-builder-controller.php:36
msgid "Attachment not found"
msgstr "Anhang nicht gefunden"
#: admin/settings_page/elements/validators/email-validator.php:9
msgid "No valid Email"
msgstr "keine gültige E-Mail"
#: admin/settings_page/elements/validators/file-validator.php:9
msgid "The entered data is no valid attachment id"
msgstr "keine gültige Anhangs-Id"
#: admin/settings_page/elements/validators/number-validator.php:9
msgid "The entered data is not valid - just numbers"
msgstr "Daten sind nicht gültig - nur Zahlen"
#: admin/settings_page/elements/validators/string-validator.php:12
msgid "The entered data is not valid - just text"
msgstr "Daten sind nicht gültig - nur Text"
#: admin/settings_page/pages/attachment_usage_page/options.php:8
msgid "Attachment Usage Settings"
msgstr "Attachment Usage Einstellungen"
#: admin/settings_page/pages/attachment_usage_page/page_elements.php:15
msgid ""
"On this page you can modify the appearance and the way how the plugin does "
"the lookup. The relevant pages (media upload pages) are referred as:<br> <a "
"href=\"%1$s\" target=\"_blank\">Media Grid</a> & <a href=\"%2$s\" target="
"\"_blank\">Media List</a>"
msgstr ""
"Auf dieser Seite kann man die Erscheinung und die Art wie das Plugin nach "
"Daten sucht bearbeiten. Die relevanten Seiten (Medienübersichtsseiten) "
"werden folgendermaßen bezeichnet: <br> <a href=\"%1$s\" target=\"_blank"
"\">Medien-Grid</a> & <a href=\"%2$s\" target=\"_blank\">Medien-Liste</a>"
#: admin/settings_page/pages/attachment_usage_page/page_elements.php:25
msgid "General Settings"
msgstr "Generelle Einstellungen"
#: admin/settings_page/pages/attachment_usage_page/page_elements.php:29
msgid ""
"This section provides general settings, which impacts only the appearance of "
"the usage status."
msgstr ""
"Dieser Abschnitt bietet generelle Einstellungen, welche lediglich die "
"Erscheinungsweise des Plugins verändert."
#: admin/settings_page/pages/attachment_usage_page/page_elements.php:38
msgid "Performance Settings"
msgstr "Performance Einstellungen"
#: admin/settings_page/pages/attachment_usage_page/page_elements.php:42
msgid ""
"This section provides settings for performance, which might have a "
"significant impact on the loading time of the media upload pages.</br> If "
"you have a rather small site (little number of pages, a few attachments) you "
"will not notice a huge difference by switching between the options."
msgstr ""
"Dieser Abschnitt bietet Performance-Einstellungen, welche sich "
"möglicherweise spürbar auf die Ladezeit der Medienbibliothek auf der \"Media "
"Upload\" Seite ausüben kann.</br>Falls eine eher kleine Website (geringe "
"Anzahl von Seiten, wenig hochgeladen Anhänge) vorhanden ist, werden die "
"Änderung kaum spürbar sein."
#: admin/settings_page/pages/attachment_usage_page/page_elements.php:56
msgid "Display Attachment Usage Color"
msgstr "Farbanzeige für Anhang-Verwendung"
#: admin/settings_page/pages/attachment_usage_page/page_elements.php:62
msgid ""
"By enabling this option, the media grid items will have a colored border "
"depending on their usage. Red implies nothing found, whereas green shows an "
"usage"
msgstr ""
"Nach Aktivierung erhalten die Kacheln eine farbige Umrandung in Abhängigkeit "
"ihrer Verwendung. Rot steht für nicht gefunden, wohingegen Grün eine "
"Verwendung signalisiert."
#: admin/settings_page/pages/attachment_usage_page/page_elements.php:69
msgid "Display color"
msgstr "Farbe anzeigen"
#: admin/settings_page/pages/attachment_usage_page/page_elements.php:70
msgid "Hide color"
msgstr "Farbe nicht anzeigen"
#: admin/settings_page/pages/attachment_usage_page/page_elements.php:78
msgid "Filter attachment list by usage"
msgstr "Anhänge nach Verwendung sortieren"
#: admin/settings_page/pages/attachment_usage_page/page_elements.php:84
msgid ""
"By enabling this option, the media list view will contain a sortable column, "
"which allows to sort the attachments by their usage status (found/not-"
"found). This can be helpful to get an overview about not used attachments.</"
"br> Furthermore it is important to note that by enabling this option the "
"process of saving the relevant information changes and this can lead to "
"longer loading times on the media upload pages depending on the overall "
"amount of attachments and size of the website."
msgstr ""
"Nach Aktivierung enthält die Medien-Liste eine sortierbare Spalte, welche es "
"ermöglicht Anhänge nach deren Verwendung (gefunden/nicht gefunden) zu "
"sortieren. Dies kann hilfreich sein um einen Überblick über nicht verwendete "
"Anhänge zu erhalten. </br> Zusätzlich ist es wichtig anzumerken, dass durch "
"Verwendung dieser Option sich der Prozess wie Daten in der Datenbank "
"gespeichert werden verändert und dies unter Umständen zu längeren Ladezeiten "
"auf der Medienübersichtsseite führen kann. Dies ist auch von der Anzahl der "
"Anhänge und der Größe der Website abhängig."
#: admin/settings_page/pages/attachment_usage_page/page_elements.php:96
msgid "Make media column sortable"
msgstr "Medienspalte sortierbar machen"
#: admin/settings_page/pages/attachment_usage_page/page_elements.php:97
msgid "Do not make media column sortable"
msgstr "Medienspalte nicht sortierbar machen"
#: admin/settings_page/pages/attachment_usage_page/page_elements.php:105
msgid "Sync Attachment Usage on media upload site"
msgstr "Synchronisierung der Anhang-Verwendung auf Medienübersichtsseite"
#: admin/settings_page/pages/attachment_usage_page/page_elements.php:111
msgid ""
"By enabling this option, the attachment relevant data will be fetched as "
"soon as the media upload pages is opened. By disabling this option, a button "
"on the page will trigger the lookup process when clicked."
msgstr ""
"Nach Aktivierung werden die Verwendungen der Anhänge beim Laden der "
"Medienübersichtsseite aktualisiert. Nach Deaktivierung wird ein Button für "
"die Aktualisierung auf der Medienübersichtsseite angezeigt."
#: admin/settings_page/pages/attachment_usage_page/page_elements.php:119
msgid "Auto-sync attachments usage on page visit"
msgstr ""
"automatische Synchronisierung der Anhänge beim Aufruf der "
"Medienübersichtsseite"
#: admin/settings_page/pages/attachment_usage_page/page_elements.php:120
msgid "Do not auto-sync attachments usage"
msgstr ""
"keine automatische Synchronisierung der Anhänge beim Aufruf der "
"Medienübersichtsseite"
#: admin/settings_page/setting-string-helper.php:8
msgid "Field \"%s\" is required"
msgstr "Feld \"%s\" ist verpflichtend"
#: admin/settings_page/setting-string-helper.php:9
msgid "Do not change value of field \"%s\""
msgstr "ändere nicht den Wert von Feld \"%s\""
#: admin/settings_page/setting-string-helper.php:19
msgid "Field is required"
msgstr "Feld ist verpflichtend"
#: admin/settings_page/setting-string-helper.php:20
msgid "Do not change value of field"
msgstr "Ändere nicht den Wert des Feldes"
#: admin/settings_page/templates/pages/menu_page.php:16
#: admin/settings_page/templates/pages/tabbed_menu_page.php:31
msgid "Fields marked with * are required"
msgstr "Felder mit einem * sind verpflichtend"
#: admin/settings_page/templates/pages/menu_page.php:19
msgid "Save Settings"
msgstr "Einstellungen speichen"
#: admin/settings_page/templates/settings/fields/file.php:7
msgid "Upload File"
msgstr "Datei hochladen"
#: admin/settings_page/templates/settings/fields/file.php:14
msgid "Remove File"
msgstr "Datei entfernen"
#: admin/settings_page/templates/settings/fields/image.php:8
msgid "Upload Image"
msgstr "Bild hochladen"
#: admin/settings_page/templates/settings/fields/image.php:11
msgid "Remove Image"
msgstr "Bild entfernen"
#: admin/js/attachment-usage-media-frame.js:19
#: admin/js/attachment-usage-media-frame.js:25
msgid "Choose Attachment"
msgstr "Anhang entfernen"

View File

@@ -0,0 +1,3 @@
Version 1.0
- First Release
- A new version of Automatically add product to cart plug-in.

View File

@@ -0,0 +1,24 @@
# Changelog
## 1.3
- New: Removed OB features
## 1.2
- New: Added option to allow only embed or social share on front-end
- New: Made the popup compatible with badgeOS Congratulation add-on popup
- Fix: UI Tweaks
## 1.1
- New: Option to display social sharing popup on badge award
- New: Option to display social sharing option with BadgeOS earned achievement shortcode
- New: Option to share badges to social media from front-end
- Fix: Fixed email image issue
- Fix: string translation issues in email
## 1.0
- Initial

View File

@@ -0,0 +1,344 @@
# Copyright (C) 2020 Barn2 Plugins
# This file is distributed under the same license as the Block for Woo Product Table plugin.
msgid ""
msgstr ""
"Project-Id-Version: Block for Woo Product Table 1.0.0\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/block-for-woo-product-table\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"POT-Creation-Date: 2020-05-21T12:32:42+00:00\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"X-Generator: WP-CLI 2.3.0\n"
"X-Domain: block-for-woo-product-table\n"
#. Plugin Name of the plugin
msgid "Block for Woo Product Table"
msgstr ""
#. Plugin URI of the plugin
msgid "https://barn2.co.uk/wordpress-plugins/block-for-woo-product-table/"
msgstr ""
#. Description of the plugin
msgid "Adds an editor block to the WooCommerce Product Table plugin by Barn2, making it quick and easy to create product tables with the block editor."
msgstr ""
#. Author of the plugin
msgid "Barn2 Plugins"
msgstr ""
#. Author URI of the plugin
msgid "https://barn2.co.uk"
msgstr ""
#. translators: %s is the plugin name
#: src/class-block.php:120
msgid "Warning! This block is an add-on for the %s plugin, which is not currently installed. Please install the plugin before continuing."
msgstr ""
#. translators: %s is the plugin name
#: src/class-block.php:121
#: src/class-block.php:134
#: assets/js/editor.js:41
msgid "WooCommerce Product Table"
msgstr ""
#: src/class-block.php:133
msgid "Warning! This block requires WooCommerce to function."
msgstr ""
#: src/class-block.php:208
msgid "SKU"
msgstr ""
#: src/class-block.php:209
msgid "ID"
msgstr ""
#: src/class-block.php:210
msgid "Name"
msgstr ""
#: src/class-block.php:211
msgid "Description"
msgstr ""
#: src/class-block.php:212
msgid "Short Description"
msgstr ""
#: src/class-block.php:213
msgid "Date"
msgstr ""
#: src/class-block.php:214
msgid "Categories"
msgstr ""
#: src/class-block.php:215
msgid "Tags"
msgstr ""
#: src/class-block.php:216
msgid "Image"
msgstr ""
#: src/class-block.php:217
msgid "Reviews"
msgstr ""
#: src/class-block.php:218
msgid "Stock"
msgstr ""
#: src/class-block.php:219
msgid "Weight"
msgstr ""
#: src/class-block.php:220
msgid "Dimensions"
msgstr ""
#: src/class-block.php:221
msgid "Price"
msgstr ""
#: src/class-block.php:222
msgid "Add to Cart"
msgstr ""
#: src/class-block.php:223
#: assets/js/settings-panel.js:50
msgid "Button"
msgstr ""
#: src/class-block.php:225
msgid "Product Attribute"
msgstr ""
#: src/class-block.php:228
msgid "Custom Field Value"
msgstr ""
#: src/class-block.php:228
msgid "Enter a customer meta key"
msgstr ""
#: src/class-block.php:229
msgid "Custom Taxonomy"
msgstr ""
#: src/class-block.php:229
msgid "Enter a taxonomy name"
msgstr ""
#: src/class-plugin.php:143
msgid "PHP must be running on version 5.6 or above to use this plugin."
msgstr ""
#: src/class-plugin.php:147
msgid "This plugin requires WordPress 5.3 or above"
msgstr ""
#: src/class-plugin.php:151
msgid "This plugin requires WooCommerce to be active"
msgstr ""
#: src/class-plugin.php:159
msgid "The \"Block for WooCommerce Product Table\" plugin is active but not functioning!"
msgstr ""
#: assets/js/editor.js:31
msgid "Display a searchable table listing any or all of your products."
msgstr ""
#: assets/js/editor.js:36
msgid "Warning! This block is an add-on for the WooCommerce Product Table plugin, which is not currently installed. Please install the plugin before continuing."
msgstr ""
#: assets/js/editor.js:148
msgid "Product Table"
msgstr ""
#: assets/js/editor.js:159
msgid "Lists products in a table view using the WooCommerce Product Table plugin. "
msgstr ""
#: assets/js/editor.js:163
msgid "Documentation"
msgstr ""
#: assets/js/editor.js:198
msgid "You can configure additional settings in the 'Block' tab in the sidebar."
msgstr ""
#: assets/js/product-selection.js:95
msgid "Select products"
msgstr ""
#: assets/js/product-selection.js:221
msgid "Selections"
msgstr ""
#: assets/js/product-selection.js:224
#: assets/js/table-columns.js:357
msgid "Add"
msgstr ""
#: assets/js/product-selection.js:458
msgid "Products"
msgstr ""
#: assets/js/product-selection.js:477
#: assets/js/table-columns.js:307
msgid "(Using global options)"
msgstr ""
#: assets/js/product-selection.js:510
msgid "Products must match all values"
msgstr ""
#: assets/js/product-selection.js:559
msgid "Select"
msgstr ""
#: assets/js/product-selection.js:571
#: assets/js/table-columns.js:235
msgid "Done"
msgstr ""
#: assets/js/product-selection.js:581
msgid "Cancel"
msgstr ""
#: assets/js/settings-panel.js:41
msgid "Add to Cart Column Settings"
msgstr ""
#: assets/js/settings-panel.js:46
msgid "Add to Cart Button"
msgstr ""
#: assets/js/settings-panel.js:49
#: assets/js/settings-panel.js:73
#: assets/js/settings-panel.js:88
#: assets/js/settings-panel.js:118
msgid "(Use global option)"
msgstr ""
#: assets/js/settings-panel.js:51
msgid "Checkbox"
msgstr ""
#: assets/js/settings-panel.js:52
msgid "Button and Checkbox"
msgstr ""
#: assets/js/settings-panel.js:58
msgid "How 'Add to Cart' buttons are displayed in the table. "
msgstr ""
#: assets/js/settings-panel.js:62
#: assets/js/settings-panel.js:101
#: assets/js/settings-panel.js:134
msgid "Read More"
msgstr ""
#: assets/js/settings-panel.js:70
msgid "Quantities"
msgstr ""
#: assets/js/settings-panel.js:74
msgid "Show in add to cart column"
msgstr ""
#: assets/js/settings-panel.js:75
msgid "Do not show quantity selectors"
msgstr ""
#: assets/js/settings-panel.js:85
msgid "Variations"
msgstr ""
#: assets/js/settings-panel.js:89
msgid "Link to product page"
msgstr ""
#: assets/js/settings-panel.js:90
msgid "Dropdowns in add to cart column"
msgstr ""
#: assets/js/settings-panel.js:91
msgid "Separate rows in table"
msgstr ""
#: assets/js/settings-panel.js:97
msgid "How to display options for variable products. "
msgstr ""
#: assets/js/settings-panel.js:110
msgid "Table Controls"
msgstr ""
#: assets/js/settings-panel.js:115
msgid "Product Filters"
msgstr ""
#: assets/js/settings-panel.js:119
msgid "Disabled"
msgstr ""
#: assets/js/settings-panel.js:120
msgid "Show based on columns in table"
msgstr ""
#: assets/js/settings-panel.js:121
msgid "Custom"
msgstr ""
#: assets/js/settings-panel.js:130
msgid "Dropdown lists to filter the table by category, tag, attribute, or custom taxonomy. "
msgstr ""
#: assets/js/settings-panel.js:149
msgid "Custom Product Filters"
msgstr ""
#: assets/js/settings-panel.js:162
msgid "Additional Options"
msgstr ""
#: assets/js/settings-panel.js:168
msgid "You can configure additional options globally on the "
msgstr ""
#: assets/js/settings-panel.js:172
msgid "WooCommerce Product Table settings page"
msgstr ""
#: assets/js/settings-panel.js:174
msgid ", or by adding them below with one option per line (e.g. sort_by=\"name\"). "
msgstr ""
#: assets/js/settings-panel.js:178
msgid "See full list of options."
msgstr ""
#: assets/js/settings-panel.js:185
msgid "Additional Shortcode Attributes"
msgstr ""
#: assets/js/table-columns.js:32
msgid "Add column"
msgstr ""
#: assets/js/table-columns.js:53
msgid "Select global attribute"
msgstr ""
#: assets/js/table-columns.js:294
msgid "Table Columns"
msgstr ""

View File

@@ -0,0 +1,179 @@
# Copyright (C) 2020 Bluehost
# This file is distributed under the GPL V2 or later.
msgid ""
msgstr ""
"Project-Id-Version: Bluehost Site Migrator 1.0\n"
"Report-Msgid-Bugs-To: "
"https://wordpress.org/support/plugin/bluehost-site-migrator\n"
"POT-Creation-Date: 2020-06-24 20:12:32+00:00\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2020-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"X-Generator: wp-vue-i18n 1.1.4\n"
#. Plugin Name of the plugin/theme
msgid "Bluehost Site Migrator"
msgstr ""
#: includes/class-admin-page.php:14
msgid "Site Migrator"
msgstr ""
#: includes/class-rest-can-we-migrate-controller.php:66
#: includes/class-rest-manifest-controller.php:146
#: includes/class-rest-migration-id-controller.php:59
#: includes/class-rest-migration-package-controller.php:194
msgid "Sorry, you are not allowed to access this endpoint."
msgstr ""
#: includes/class-rest-manifest-controller.php:126
msgid "An error occured when delivering the migration payload."
msgstr ""
#: source/components/PageCheckCompatibility.vue:5
msgid "Let's get this truck rolling:"
msgstr ""
#: source/components/PageCheckCompatibility.vue:7
msgid "First we'll check to see if your website is compatible."
msgstr ""
#: source/components/PageCheckCompatibility.vue:8
msgid "If it's compatible, we'll transfer your site."
msgstr ""
#: source/components/PageCheckCompatibility.vue:9
msgid "And then send you a link for review."
msgstr ""
#: source/components/PageCheckCompatibility.vue:12
msgid "Check Compatibility"
msgstr ""
#: source/components/PageCheckCompatibility.vue:62
msgid "Checking environment..."
msgstr ""
#: source/components/PageCheckCompatibility.vue:63
msgid "Checking plugins..."
msgstr ""
#: source/components/PageCheckCompatibility.vue:64
msgid "Checking themes..."
msgstr ""
#: source/components/PageCheckCompatibility.vue:65
msgid "Checking configuration..."
msgstr ""
#: source/components/PageCompatible.vue:4
msgid "Looks like we're compatible!"
msgstr ""
#: source/components/PageCompatible.vue:5
msgid "Next, let's transfer your site."
msgstr ""
#: source/components/PageCompatible.vue:7
msgid ""
"Please wait to make changes to your website until the transfer is "
"completely done. For now, leave your DNS and domain the same as well."
msgstr ""
#: source/components/PageCompatible.vue:9
msgid "Start Transfer"
msgstr ""
#: source/components/PageComplete.vue:6
msgid "Welcome to the Bluehost family!"
msgstr ""
#: source/components/PageComplete.vue:9
msgid ""
"You've transferred your website to Bluehost. Now we just need to get it set "
"up on your Bluehost account so you can review it."
msgstr ""
#: source/components/PageComplete.vue:17
msgid "Login to Bluehost"
msgstr ""
#: source/components/PageComplete.vue:21
msgid "Don't have an account?"
msgstr ""
#: source/components/PageComplete.vue:27
msgid "Create account"
msgstr ""
#: source/components/PageError.vue:5
msgid "It looks like your site didn't transfer."
msgstr ""
#: source/components/PageError.vue:8
msgid ""
"We might have gotten disconnected, or there could be something else going "
"on. Let's figure it out."
msgstr ""
#: source/components/PageError.vue:12
msgid "Call us at 888-401-4678"
msgstr ""
#: source/components/PageError.vue:15
msgid "Try Again"
msgstr ""
#: source/components/PageIncompatible.vue:7
msgid "That didn't work:"
msgstr ""
#: source/components/PageIncompatible.vue:8
msgid "Let's bring in the pros."
msgstr ""
#: source/components/PageIncompatible.vue:12
msgid ""
"This can happen if you have a multisite, alternate directory structures, or "
"certain themes or plugins. The transfer might require some extra steps, or "
"we might need to look at other options."
msgstr ""
#: source/components/PageIncompatible.vue:15
msgid "Give us a call at 888-401-4678."
msgstr ""
#: source/components/PageTransfer.vue:4
msgid "Transferring your website"
msgstr ""
#: source/components/PageTransfer.vue:8
msgid "Cancel Transfer"
msgstr ""
#: source/components/PageTransfer.vue:32
msgid "Preparing to generate package files..."
msgstr ""
#: source/components/PageTransfer.vue:63
msgid "Packaging %s..."
msgstr ""
#. Plugin URI of the plugin/theme
msgid "https://wordpress.org/plugins/bluehost-site-migrator"
msgstr ""
#. Description of the plugin/theme
msgid "Quickly and easily migrate your website to Bluehost."
msgstr ""
#. Author of the plugin/theme
msgid "Bluehost"
msgstr ""
#. Author URI of the plugin/theme
msgid "https://www.bluehost.com/"
msgstr ""

View File

@@ -0,0 +1,141 @@
# Copyright (C) 2020 Marian Kanev
# This file is distributed under the same license as the TaxiBooking Light plugin.
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: TaxiBooking Light 1.0.1\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/tblight\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"POT-Creation-Date: 2020-03-31 19:53+0600\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"X-Generator: Poedit 2.3\n"
"X-Domain: tblight\n"
#. Plugin Name of the plugin
msgid "TaxiBooking Light"
msgstr ""
#. Plugin URI of the plugin
#. Author URI of the plugin
msgid "https://kanev.com/"
msgstr ""
#. Description of the plugin
msgid "Taxi Booking Light for Wordpress."
msgstr ""
#. Author of the plugin
msgid "Marian Kanev"
msgstr ""
#: views/tblight/default.php:11
msgid "BOOKING_FORM_NEW_ORDER_BTN_LABEL"
msgstr ""
#: views/tblight/default.php:19
msgid "BOOKING_FORM_FIRST_STEP_LABEL"
msgstr ""
#: views/tblight/default.php:25 views/tblight/default_step2.php:40
msgid "BOOKING_FORM_SECOND_STEP_LABEL"
msgstr ""
#: views/tblight/default.php:31
msgid "BOOKING_FORM_THIRD_STEP_LABEL"
msgstr ""
#: views/tblight/default_step1.php:7
msgid "BOOKING_FORM_SELECT_DATE_LABEL"
msgstr ""
#: views/tblight/default_step1.php:25
msgid "HRS"
msgstr ""
#: views/tblight/default_step1.php:48
msgid "MINS"
msgstr ""
#: views/tblight/default_step1.php:77
msgid "TAXI_FROM"
msgstr ""
#: views/tblight/default_step1.php:83 views/tblight/default_step1.php:97
msgid "ENTER_ADDRESS"
msgstr ""
#: views/tblight/default_step1.php:91
msgid "TAXI_TO"
msgstr ""
#: views/tblight/default_step1.php:104
msgid "VIEW_MAP_BTN_LBL"
msgstr ""
#: views/tblight/default_step1.php:112
msgid "PASSENGER_SEATS"
msgstr ""
#: views/tblight/default_step1.php:127
msgid "SUITCASE_NO"
msgstr ""
#: views/tblight/default_step1.php:140
msgid "BOOKING_FORM_RIDING_CHILD_BTN_LABEL"
msgstr ""
#: views/tblight/default_step1.php:147
msgid "BOOKING_FORM_ADDITIONAL_SEATS_HEADER"
msgstr ""
#: views/tblight/default_step1.php:149
msgid "BOOSTER_SEATS"
msgstr ""
#: views/tblight/default_step1.php:150
msgid "CHILD_SEATS"
msgstr ""
#: views/tblight/default_step1.php:151
msgid "INFANT_SEATS"
msgstr ""
#: views/tblight/default_step1.php:166 views/tblight/default_step1.php:196
msgid "SEE_PRICE"
msgstr ""
#: views/tblight/default_step2.php:47 views/tblight/default_step2.php:49
msgid "CARS_TABLE_LIST_BTN_LABEL"
msgstr ""
#: views/tblight/default_step2.php:51 views/tblight/default_step2.php:53
msgid "CARS_TABLE_GRID_BTN_LABEL"
msgstr ""
#: views/tblight/default_step2.php:217 views/tblight/default_step3.php:176
msgid "BACK_TO_PREVIOUS"
msgstr ""
#: views/tblight/default_step3.php:8
msgid "BOOKING_FORM_PASSENGER_INFORMATION_HEADER"
msgstr ""
#: views/tblight/default_step3.php:10
msgid "NAME"
msgstr ""
#: views/tblight/default_step3.php:16
msgid "EMAIL"
msgstr ""
#: views/tblight/default_step3.php:22
msgid "PHONE"
msgstr ""
#: views/tblight/default_step3.php:52
msgid "ONEPAGE_BOOKING_FOURTH_STEP_HEADER"
msgstr ""

View File

@@ -0,0 +1,6 @@
## 1.4.2
- Added Changelog
- Fixed bug with widgets
- Fixed bug with Twitter auth token

View File

@@ -0,0 +1,503 @@
# Copyright (C) 2020 Christopher Graham
# This file is distributed under the same license as the Card Oracle plugin.
msgid ""
msgstr ""
"Project-Id-Version: Card Oracle 0.5.0\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/card-oracle\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"POT-Creation-Date: 2020-05-01T12:01:11+01:00\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"X-Generator: WP-CLI 2.3.0\n"
"X-Domain: card-oracle\n"
#. Plugin Name of the plugin
#: admin/class-card-oracle-admin.php:67
#: admin/class-card-oracle-admin.php:578
#: admin/partials/card-oracle-admin-display.php:19
msgid "Card Oracle"
msgstr ""
#. Plugin URI of the plugin
msgid "https://chillichalli.com/card-oracle"
msgstr ""
#. Description of the plugin
msgid "This plugin lets you create tarot and oracle readings using your own cards, spreads and interpretations."
msgstr ""
#. Author of the plugin
msgid "Christopher Graham"
msgstr ""
#. Author URI of the plugin
msgid "https://cdgraham.com"
msgstr ""
#: admin/class-card-oracle-admin.php:66
msgid "Card Oracle Settings"
msgstr ""
#. translators: %d is a number
#: admin/class-card-oracle-admin.php:156
#: admin/class-card-oracle-admin.php:160
#: admin/class-card-oracle-admin.php:164
#: admin/class-card-oracle-admin.php:168
msgid "%d Total"
msgid_plural "%d Total"
msgstr[0] ""
msgstr[1] ""
#: admin/class-card-oracle-admin.php:193
msgid "General Settings"
msgstr ""
#: admin/class-card-oracle-admin.php:195
msgid "Email Options"
msgstr ""
#: admin/class-card-oracle-admin.php:230
#: admin/class-card-oracle-admin.php:1178
msgid "Multiple Positions for a Description"
msgstr ""
#: admin/class-card-oracle-admin.php:235
msgid "Enabling this will allow you to select multiple Positions for a Description"
msgstr ""
#: admin/class-card-oracle-admin.php:239
msgid "Allow users to send reading to an email address"
msgstr ""
#: admin/class-card-oracle-admin.php:247
msgid "From email address"
msgstr ""
#: admin/class-card-oracle-admin.php:252
msgid "The From email address used when the user sends the reading."
msgstr ""
#: admin/class-card-oracle-admin.php:253
msgid "If blank this defaults to the Admin email address."
msgstr ""
#: admin/class-card-oracle-admin.php:257
msgid "From email name"
msgstr ""
#: admin/class-card-oracle-admin.php:262
msgid "The Name displayed as the From email address."
msgstr ""
#: admin/class-card-oracle-admin.php:263
msgid "If blank this defaults to the site title."
msgstr ""
#: admin/class-card-oracle-admin.php:267
#: admin/class-card-oracle-admin.php:277
msgid "Text to display"
msgstr ""
#: admin/class-card-oracle-admin.php:272
msgid "Text to display on the email form."
msgstr ""
#: admin/class-card-oracle-admin.php:273
msgid "If blank this defaults \"Email this Reading to:\"."
msgstr ""
#: admin/class-card-oracle-admin.php:282
msgid "Text to display after the user submits the email form."
msgstr ""
#: admin/class-card-oracle-admin.php:283
msgid "If blank this defaults \"Your email has been sent. Please make sure to check your spam folder.\""
msgstr ""
#: admin/class-card-oracle-admin.php:500
#: admin/class-card-oracle-admin.php:514
#: admin/class-card-oracle-admin.php:529
#: admin/class-card-oracle-admin.php:544
msgid "Settings"
msgstr ""
#: admin/class-card-oracle-admin.php:580
msgid "Card Oracle Options"
msgstr ""
#: admin/class-card-oracle-admin.php:580
msgid "Dashboard"
msgstr ""
#: admin/class-card-oracle-admin.php:582
msgid "Card Oracle Readings Admin"
msgstr ""
#: admin/class-card-oracle-admin.php:582
#: admin/partials/card-oracle-admin-display.php:39
msgid "Readings"
msgstr ""
#: admin/class-card-oracle-admin.php:584
msgid "Card Oracle positions Admin"
msgstr ""
#: admin/class-card-oracle-admin.php:584
#: admin/class-card-oracle-admin.php:1384
#: admin/partials/card-oracle-admin-display.php:50
msgid "Positions"
msgstr ""
#: admin/class-card-oracle-admin.php:586
msgid "Card Oracle cards Admin"
msgstr ""
#: admin/class-card-oracle-admin.php:586
#: admin/class-card-oracle-admin.php:833
#: admin/partials/card-oracle-admin-display.php:61
msgid "Cards"
msgstr ""
#: admin/class-card-oracle-admin.php:588
msgid "Card Oracle Descriptions Admin"
msgstr ""
#: admin/class-card-oracle-admin.php:588
#: admin/partials/card-oracle-admin-display.php:73
msgid "Descriptions"
msgstr ""
#: admin/class-card-oracle-admin.php:604
msgid "Front of Card Image"
msgstr ""
#: admin/class-card-oracle-admin.php:609
msgid "Back of Card Image"
msgstr ""
#: admin/class-card-oracle-admin.php:614
msgid "Previous Page"
msgstr ""
#: admin/class-card-oracle-admin.php:773
msgid "Sorry, the maximum number of Readings has been reached."
msgstr ""
#: admin/class-card-oracle-admin.php:782
msgid "Sorry, the maxiumum number of Positions has been reached."
msgstr ""
#: admin/class-card-oracle-admin.php:791
msgid "Sorry, the maxiumum number of Cards has been reached."
msgstr ""
#: admin/class-card-oracle-admin.php:807
msgid "Please consider upgrading to our premium version."
msgstr ""
#: admin/class-card-oracle-admin.php:810
msgid "You can purchase it here at "
msgstr ""
#: admin/class-card-oracle-admin.php:812
msgid "Maximum reached"
msgstr ""
#: admin/class-card-oracle-admin.php:834
#: admin/class-card-oracle-admin.php:1047
#: admin/class-card-oracle-admin.php:1363
msgid "Card"
msgstr ""
#: admin/class-card-oracle-admin.php:835
#: admin/class-card-oracle-admin.php:836
msgid "Add New Card"
msgstr ""
#: admin/class-card-oracle-admin.php:837
msgid "Edit Card"
msgstr ""
#: admin/class-card-oracle-admin.php:838
msgid "New Card"
msgstr ""
#: admin/class-card-oracle-admin.php:839
msgid "All Cards"
msgstr ""
#: admin/class-card-oracle-admin.php:840
msgid "View Card"
msgstr ""
#: admin/class-card-oracle-admin.php:841
msgid "Search Cards"
msgstr ""
#: admin/class-card-oracle-admin.php:842
msgid "Card Image"
msgstr ""
#: admin/class-card-oracle-admin.php:843
msgid "Add Card Image"
msgstr ""
#: admin/class-card-oracle-admin.php:867
msgid "Card Descriptions"
msgstr ""
#: admin/class-card-oracle-admin.php:868
msgid "Card Description"
msgstr ""
#: admin/class-card-oracle-admin.php:869
#: admin/class-card-oracle-admin.php:870
msgid "Add New Card Description"
msgstr ""
#: admin/class-card-oracle-admin.php:871
msgid "Edit Card Description"
msgstr ""
#: admin/class-card-oracle-admin.php:872
msgid "New Card Description"
msgstr ""
#: admin/class-card-oracle-admin.php:873
msgid "All Card Descriptions"
msgstr ""
#: admin/class-card-oracle-admin.php:874
msgid "View Card Description"
msgstr ""
#: admin/class-card-oracle-admin.php:875
msgid "Search Card Descriptions"
msgstr ""
#: admin/class-card-oracle-admin.php:876
msgid "Card Description Image"
msgstr ""
#: admin/class-card-oracle-admin.php:877
msgid "Add Card Description Image"
msgstr ""
#: admin/class-card-oracle-admin.php:901
msgid "Card Readings"
msgstr ""
#: admin/class-card-oracle-admin.php:902
#: admin/class-card-oracle-admin.php:1010
#: admin/class-card-oracle-admin.php:1108
#: admin/class-card-oracle-admin.php:1401
msgid "Card Reading"
msgstr ""
#: admin/class-card-oracle-admin.php:903
#: admin/class-card-oracle-admin.php:904
msgid "Add New Card Reading"
msgstr ""
#: admin/class-card-oracle-admin.php:905
msgid "Edit Card Reading"
msgstr ""
#: admin/class-card-oracle-admin.php:906
msgid "New Card Reading"
msgstr ""
#: admin/class-card-oracle-admin.php:907
msgid "All Card Readings"
msgstr ""
#: admin/class-card-oracle-admin.php:908
msgid "View Card Reading"
msgstr ""
#: admin/class-card-oracle-admin.php:909
msgid "Search Card Readings"
msgstr ""
#: admin/class-card-oracle-admin.php:910
msgid "Card Back"
msgstr ""
#: admin/class-card-oracle-admin.php:911
msgid "Add Card Back"
msgstr ""
#: admin/class-card-oracle-admin.php:935
msgid "Card Positions"
msgstr ""
#: admin/class-card-oracle-admin.php:936
msgid "Card Position"
msgstr ""
#: admin/class-card-oracle-admin.php:937
#: admin/class-card-oracle-admin.php:938
msgid "Add New Card Position"
msgstr ""
#: admin/class-card-oracle-admin.php:939
msgid "Edit Card Position"
msgstr ""
#: admin/class-card-oracle-admin.php:940
msgid "New Card Position"
msgstr ""
#: admin/class-card-oracle-admin.php:941
msgid "All Card Positions"
msgstr ""
#: admin/class-card-oracle-admin.php:942
msgid "View Card Position"
msgstr ""
#: admin/class-card-oracle-admin.php:943
msgid "Search Card Positions"
msgstr ""
#: admin/class-card-oracle-admin.php:944
msgid "Card Position Image"
msgstr ""
#: admin/class-card-oracle-admin.php:945
msgid "Add Card Position Image"
msgstr ""
#: admin/class-card-oracle-admin.php:976
msgid "Allow multiple Positions for a Card Description."
msgstr ""
#: admin/class-card-oracle-admin.php:1051
#: admin/class-card-oracle-admin.php:1085
msgid "(no card)"
msgstr ""
#: admin/class-card-oracle-admin.php:1059
msgid "Description Position"
msgstr ""
#: admin/class-card-oracle-admin.php:1126
msgid "Card Order"
msgstr ""
#: admin/class-card-oracle-admin.php:1186
msgid "Display Question Input Box"
msgstr ""
#: admin/class-card-oracle-admin.php:1192
msgid "Enabling this will display an input field to the users to enter a question."
msgstr ""
#: admin/class-card-oracle-admin.php:1195
msgid "Text for question input box"
msgstr ""
#: admin/class-card-oracle-admin.php:1200
msgid "Avoid using apostrophes in the text if you plan on allowing users to email the readings."
msgstr ""
#: admin/class-card-oracle-admin.php:1204
msgid "Footer to be displayed on daily and random cards"
msgstr ""
#: admin/class-card-oracle-admin.php:1345
msgid "Associated Reading(s)"
msgstr ""
#: admin/class-card-oracle-admin.php:1346
msgid "Number of Descriptions"
msgstr ""
#: admin/class-card-oracle-admin.php:1347
#: admin/class-card-oracle-admin.php:1367
#: admin/class-card-oracle-admin.php:1385
#: admin/class-card-oracle-admin.php:1403
msgid "Date"
msgstr ""
#: admin/class-card-oracle-admin.php:1365
#: admin/class-card-oracle-admin.php:1402
msgid "Position"
msgstr ""
#: admin/class-card-oracle-admin.php:1366
msgid "Position Number"
msgstr ""
#: admin/class-card-oracle-admin.php:1383
msgid "Shortcode"
msgstr ""
#: admin/partials/card-oracle-admin-display.php:84
msgid "Reading Statistics"
msgstr ""
#: admin/partials/card-oracle-admin-display.php:88
msgid "Reading Shortcodes"
msgstr ""
#: admin/partials/card-oracle-admin-display.php:89
msgid "Copy to clipboard"
msgstr ""
#. translators: %d is a number
#: admin/partials/card-oracle-admin-display.php:93
msgid "%d position"
msgid_plural "%d positions"
msgstr[0] ""
msgstr[1] ""
#. translators: %d is a number
#: admin/partials/card-oracle-admin-display.php:96
msgid "%d card"
msgid_plural "%d cards"
msgstr[0] ""
msgstr[1] ""
#. translators: %d is a number
#: admin/partials/card-oracle-admin-display.php:99
msgid "%d description"
msgid_plural "%d descriptions"
msgstr[0] ""
msgstr[1] ""
#: admin/partials/card-oracle-admin-display.php:125
#: admin/partials/card-oracle-admin-display.php:135
#: admin/partials/card-oracle-admin-display.php:145
msgid "Click to copy shortcode"
msgstr ""
#: admin/partials/card-oracle-admin-display.php:130
msgid "Daily Card Shortcode"
msgstr ""
#: admin/partials/card-oracle-admin-display.php:140
msgid "Random Card Shortcode"
msgstr ""
#: public/class-card-oracle-public.php:145
msgid "Your Reading"
msgstr ""
#: public/class-card-oracle-public.php:165
msgid "Your email has been sent. Please make sure to check your spam folder."
msgstr ""
#. translators: %d is a number
#: public/class-card-oracle-public.php:324
msgid "Next select %d card."
msgid_plural "Next select %d cards."
msgstr[0] ""
msgstr[1] ""
#: public/class-card-oracle-public.php:350
msgid "Email this Reading to:"
msgstr ""

View File

@@ -0,0 +1,40 @@
# Copyright (C) 2020 Rimes Gold
msgid ""
msgstr ""
"Project-Id-Version: CF7 File Download 1.0\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/cf7-file-download\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"POT-Creation-Date: 2020-07-24 11:14+0300\n"
"PO-Revision-Date: 2020-07-25 10:18+0300\n"
"X-Generator: Poedit 1.8.7.1\n"
"X-Domain: cf-file-download\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: en\n"
#: classes/class-cf7-file-download.php:34
#: classes/class-cf7-file-download.php:35
msgid "CF7 File Download"
msgstr ""
#: classes/class-cf7-file-download.php:53
msgid "File Download Settings"
msgstr ""
#: classes/class-cf7-file-download.php:59
msgid "Download Settings"
msgstr ""
#: classes/class-cf7-file-download.php:78
msgid "Contact Form ID"
msgstr ""
#: classes/class-cf7-file-download.php:87
msgid "Attachment URL"
msgstr ""
#: classes/class-cf7-file-download.php:95
msgid "Downloaded File Name"
msgstr ""

View File

@@ -0,0 +1,685 @@
# Copyright (C) 2020 Frankspress
# This file is distributed under the GPLv2 or later.
msgid ""
msgstr ""
"Project-Id-Version: chatster 1.0.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: yyyy-mm-dd hh:mm+0000\n"
"PO-Revision-Date: 2020-07-18 14:46-0500\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
"X-Generator: Eazy Po 0.9.5.3\n"
#: includes/api/class.request-all.php:207
msgid "Testing Chatster! Your email setup works! "
msgstr ""
#: includes/api/class.request-all.php:209
msgid "Mock request message.. Customer original message will be shown here!"
msgstr ""
#: includes/api/class.request-all.php:210
msgid "This is a test email sent by"
msgstr ""
#: includes/api/class.request-all.php:211
msgid "The plugin is working. For more testing, please read the documentation."
msgstr ""
#: includes/api/class.request-all.php:212
msgid "Test your website link here: "
msgstr ""
#: includes/api/class.request-all.php:213
msgid "Thank you."
msgstr ""
#: includes/core/action.global.php:17 views/admin/function.header.php:17
msgid "Settings"
msgstr ""
#: includes/core/class.add-admin-menu.php:27
msgid "Started"
msgstr ""
#: includes/core/class.add-admin-menu.php:28
msgid "more than one hour ago"
msgstr ""
#: includes/core/class.add-admin-menu.php:29
msgid "hour ago"
msgstr ""
#: includes/core/class.add-admin-menu.php:30
msgid "minutes ago"
msgstr ""
#: includes/core/class.add-admin-menu.php:31
msgid "minute ago"
msgstr ""
#: includes/core/class.add-admin-menu.php:32
msgid "just now"
msgstr ""
#: includes/core/class.add-admin-menu.php:33
msgid "Edit"
msgstr ""
#: includes/core/class.add-admin-menu.php:34
#: views/admin/function.request.php:90
msgid "Delete"
msgstr ""
#: includes/core/class.add-admin-menu.php:35
msgid "Reset settings?"
msgstr ""
#: includes/core/class.add-admin-menu.php:36
msgid "Reset All settings?"
msgstr ""
#: includes/core/class.add-admin-menu.php:37
msgid "Disconnect"
msgstr ""
#: includes/core/class.add-admin-menu.php:38
msgid "Replied by admin"
msgstr ""
#: includes/core/class.add-admin-menu.php:102
msgid "Chatster"
msgstr ""
#: includes/core/class.add-admin-menu.php:103
msgid "Online"
msgstr ""
#: includes/core/class.add-chat-public.php:118
msgid "open"
msgstr ""
#: includes/core/class.cron-manager.php:30
msgid "Once every 3 minutes"
msgstr ""
#: includes/core/class.cron-manager.php:59
msgid "New Request received on"
msgstr ""
#: includes/core/class.cron-manager.php:60
msgid "Hello"
msgstr ""
#: includes/core/class.cron-manager.php:61
msgid "You have received "
msgstr ""
#: includes/core/class.cron-manager.php:62
#, php-format
msgid "%s new request"
msgid_plural "%s new requests"
msgstr[0] ""
msgstr[1] ""
#: includes/core/class.cron-manager.php:63
msgid "on"
msgstr ""
#: includes/core/class.cron-manager.php:64
msgid "To login to your website go here:"
msgstr ""
#: includes/core/class.cron-manager.php:65
msgid "Thank you for using Chatster!"
msgstr ""
#: includes/core/class.emailer.php:27
msgid "Your original message: "
msgstr ""
#: includes/core/class.emailer.php:55
msgid "RE:"
msgstr ""
#: includes/core/class.notices.php:15
msgid "Thank you and Welcome to"
msgstr ""
#: includes/core/class.notices.php:15
msgid "Chatster!"
msgstr ""
#: includes/core/class.notices.php:17
msgid "Testing:"
msgstr ""
#: includes/core/class.notices.php:18
msgid ""
"- Please use only <b>incognito windows</b> or <b>second browser</b> to test "
"chat functionalities.<br>"
msgstr ""
#: includes/core/class.notices.php:19
msgid "- API functionality <b>must be enabled!</b><br>"
msgstr ""
#: includes/core/class.notices.php:20
msgid ""
"- Email delivery only works if you have a <b>transactional email service</b>."
"<br>"
msgstr ""
#: includes/core/class.notices.php:21
msgid ""
"- Go to <i>Settings->Request/Response->Test Functionality</i> and verify "
"email delivery."
msgstr ""
#: includes/core/class.notices.php:22
msgid "Suggestions:"
msgstr ""
#: includes/core/class.notices.php:23
msgid ""
"- For any questions or suggestions please visit the <a target=\"_blank\" "
"href=\""
msgstr ""
#: includes/options/class.add-options-bot-qa.php:32
msgid "Bot Q &amp; A"
msgstr ""
#: includes/options/class.add-options-bot-qa.php:43
msgid "Add a question or questions"
msgstr ""
#: includes/options/class.add-options-bot-qa.php:44
msgid "What are your opening hours? What time do you open?"
msgstr ""
#: includes/options/class.add-options-bot-qa.php:46
msgid ""
"The Bot will look for similarities between saved questions and user question."
msgstr ""
#: includes/options/class.add-options-bot-qa.php:55
msgid "Bot Response to the question or questions"
msgstr ""
#: includes/options/class.add-options-bot-qa.php:56
msgid "Our stores are open from 7 a.m. to 8:30 p.m."
msgstr ""
#: includes/options/class.add-options-bot-qa.php:58
msgid "This answer will be given when a similar question is asked."
msgstr ""
#: includes/options/class.add-options-bot.php:27
msgid "Hi!! How can I help you today?"
msgstr ""
#: includes/options/class.add-options-bot.php:28
msgid "If you have any other questions please feel free to ask."
msgstr ""
#: includes/options/class.add-options-bot.php:29
msgid ""
"Sorry, I couldn't find what you're looking for..\n"
" Please try again"
msgstr ""
#: includes/options/class.add-options-bot.php:79
msgid "Give your bot your favorite name."
msgstr ""
#: includes/options/class.add-options-bot.php:89
msgid "Give your bot a friendly image"
msgstr ""
#: includes/options/class.add-options-bot.php:99
msgid ""
"Bot introductory sentece used when the chat is initially displayed.\n"
" <br><span class=\"ch-field-descr-extra\">(Each "
"line break is shown as separate message)</span>"
msgstr ""
#: includes/options/class.add-options-bot.php:110
msgid ""
"The bot sentece that follows a successfull reply.\n"
" <br><span class=\"ch-field-descr-extra\">"
"(Each line break is shown as separate message)</span>"
msgstr ""
#: includes/options/class.add-options-bot.php:121
msgid ""
"When no answer is found the bot will use this sentence.\n"
" <br><span class=\"ch-field-descr-extra\">"
"(Each line break is shown as separate message)</span>"
msgstr ""
#: includes/options/class.add-options-bot.php:132
msgid ""
"BOT will search full text in both questions and answers. <br>When not "
"enabled it will only search among the saved questions."
msgstr ""
#: includes/options/class.add-options-bot.php:155
msgid "BOT settings have been reset!"
msgstr ""
#: includes/options/class.add-options-bot.php:171
#: includes/options/class.add-options-bot.php:184
#: includes/options/class.add-options-chat.php:279
#, php-format
msgid "A field text exceeds %d character"
msgid_plural "A field text exceeds %d characters"
msgstr[0] ""
msgstr[1] ""
#: includes/options/class.add-options-chat.php:24
msgid "Chat or get in touch!"
msgstr ""
#: includes/options/class.add-options-chat.php:25
msgid "Contact Us"
msgstr ""
#: includes/options/class.add-options-chat.php:47
#: includes/options/class.add-options-chat.php:48
#: includes/options/class.add-options-chat.php:49
#: includes/options/class.add-options-chat.php:50
#: includes/options/class.add-options-chat.php:51
msgid "Customers"
msgstr ""
#: includes/options/class.add-options-chat.php:57
#: includes/options/class.add-options-chat.php:58
#: includes/options/class.add-options-chat.php:59
#: includes/options/class.add-options-chat.php:60
#: includes/options/class.add-options-chat.php:66
#: includes/options/class.add-options-chat.php:67
#: includes/options/class.add-options-chat.php:68
msgid "Minutes"
msgstr ""
#: includes/options/class.add-options-chat.php:81
msgid "Small Text"
msgstr ""
#: includes/options/class.add-options-chat.php:82
msgid "Medium Text"
msgstr ""
#: includes/options/class.add-options-chat.php:83
msgid "Large Text"
msgstr ""
#: includes/options/class.add-options-chat.php:88
msgid "Left Side of the screen"
msgstr ""
#: includes/options/class.add-options-chat.php:89
msgid "Right Side of the screen"
msgstr ""
#: includes/options/class.add-options-chat.php:218
msgid ""
"Will automatically switch the current admin to offline mode when "
"\"conversation\" screen is not open.\n"
" <br/>You can choose how long before that happens."
msgstr ""
#: includes/options/class.add-options-chat.php:229
msgid ""
"Automatically disconnects conversations that have been inactive <br>for a "
"selected amount of time."
msgstr ""
#: includes/options/class.add-options-chat.php:263
msgid "Chatster Chat settings have been reset!"
msgstr ""
#: includes/options/class.add-options-chat.php:290
msgid "Wrong Hex color"
msgstr ""
#: includes/options/class.add-options-chat.php:302
msgid "Wrong Volume Setting"
msgstr ""
#: includes/options/class.add-options-request.php:39
msgid "Chatster Request Settings"
msgstr ""
#: includes/options/class.add-options-request.php:45
msgid "Test Functionality"
msgstr ""
#: includes/options/class.add-options-request.php:56
msgid "Email Header Image"
msgstr ""
#: includes/options/class.add-options-request.php:58
msgid ""
"Your response email can display an header image.<br>\n"
" Go to Media -> Library -> Add New, then copy "
"and paste the link in this field.<br>\n"
" (Optimal aspect ratio: 600 X 230 px.)"
msgstr ""
#: includes/options/class.add-options-request.php:71
msgid "Enable Reply Forward"
msgstr ""
#: includes/options/class.add-options-request.php:84
msgid "Replies will be sent to: your@email.com"
msgstr ""
#: includes/options/class.add-options-request.php:85
msgid ""
"If your WordPress website sends email from an email address you don't check "
"daily, <br>\n"
" with this option you can redirect customer "
"replies to an account of your choice.<br><br>\n"
" Customers replying your initial response email "
"sent from the <i>\"Received Messages\"</i> section <br>\n"
" and all future back and forth emails will be "
"routed to this email address instead."
msgstr ""
#: includes/options/class.add-options-request.php:98
msgid "Enable Email Alert"
msgstr ""
#: includes/options/class.add-options-request.php:110
msgid "Alerts sent to: your@email.com"
msgstr ""
#: includes/options/class.add-options-request.php:111
msgid ""
"Receive an email alert when a new request is submitted.<br>\n"
" (Wordpress will check for new requests every "
"hour.)"
msgstr ""
#: includes/options/class.add-options-request.php:122
msgid "Enter an Email Address."
msgstr ""
#: includes/options/class.add-options-request.php:124
msgid "Ex: your@email.com"
msgstr ""
#: includes/options/class.add-options-request.php:125
msgid ""
"You will receive a mock email to check functionalities.<br>\n"
" (Depending on your server and service status "
"it may take <br>\n"
" a few minutes to receive the email. Also "
"check your \"junk folder\".)"
msgstr ""
#: includes/options/class.add-options-request.php:141
msgid "Chatster Request settings have been reset!"
msgstr ""
#: includes/options/class.add-options-request.php:158
msgid "Wrong URL submitted"
msgstr ""
#: views/functions.basic-templates.php:7
msgid "support page"
msgstr ""
#: views/admin/function.chat.php:25
msgid "Your conversations will be shown here.."
msgstr ""
#: views/admin/function.chat.php:36
msgid "Current conversation will be shown here."
msgstr ""
#: views/admin/function.chat.php:45
#, php-format
msgid "There is %s customer waiting in line"
msgstr ""
#: views/admin/function.chat.php:48
#, php-format
msgid "There are %s customers waiting in line"
msgstr ""
#: views/admin/function.chat.php:60
msgid "Attach a link to a page or product."
msgstr ""
#: views/admin/function.header.php:15
msgid "Conversations"
msgstr ""
#: views/admin/function.header.php:16
msgid "Received Messages"
msgstr ""
#: views/admin/function.request.php:16
msgid "No Messages yet"
msgstr ""
#: views/admin/function.request.php:28
msgid "Show Replied Messages"
msgstr ""
#: views/admin/function.request.php:35
msgid "User Name"
msgstr ""
#: views/admin/function.request.php:36
msgid "Subject"
msgstr ""
#: views/admin/function.request.php:37
msgid "Date Received"
msgstr ""
#: views/admin/function.request.php:38
msgid "Last Replied"
msgstr ""
#: views/admin/function.request.php:39
msgid "Pinned"
msgstr ""
#: views/admin/function.request.php:42
msgid "Message Data"
msgstr ""
#: views/admin/function.request.php:70
msgid "By: "
msgstr ""
#: views/admin/function.request.php:89
msgid "Reply"
msgstr ""
#: views/admin/function.request.php:89
msgid "Show&#47;Reply"
msgstr ""
#: views/admin/function.request.php:92
msgid "asks"
msgstr ""
#: views/admin/function.request.php:97 views/public/function.front-chat.php:56
msgid "Type here your message.."
msgstr ""
#: views/admin/function.request.php:100
msgid "Send Email"
msgstr ""
#: views/admin/function.request.php:121 views/admin/function.settings.php:54
msgid "&laquo;"
msgstr ""
#: views/admin/function.request.php:122 views/admin/function.settings.php:55
msgid "&raquo;"
msgstr ""
#: views/admin/function.settings.php:16
msgid "Bot Setup"
msgstr ""
#: views/admin/function.settings.php:25
msgid "Reset Settings"
msgstr ""
#: views/admin/function.settings.php:32
msgid "Bot Q &amp; A"
msgstr ""
#: views/admin/function.settings.php:35
msgid "Q&A Was Reset Successfully!"
msgstr ""
#: views/admin/function.settings.php:36
msgid "Dismiss this notice."
msgstr ""
#: views/admin/function.settings.php:43
msgid "You didn't add any Q&A yet!"
msgstr ""
#: views/admin/function.settings.php:71
msgid "Reset Bot Q&A"
msgstr ""
#: views/admin/function.settings.php:80
msgid "Chat Configuration"
msgstr ""
#: views/admin/function.settings.php:100
msgid "Request&#47;Response"
msgstr ""
#: views/admin/function.settings.php:100
msgid "Configuration"
msgstr ""
#: views/admin/function.settings.php:116
msgid "Send Test Email"
msgstr ""
#: views/admin/function.settings.php:118
msgid "Sent Successfully!"
msgstr ""
#: views/admin/function.settings.php:119
msgid "Something went wrong."
msgstr ""
#: views/admin/function.settings.php:131
msgid "Reset All Configuration"
msgstr ""
#: views/public/function.front-chat.php:22
msgid "Customers already waiting: "
msgstr ""
#: views/public/function.front-chat.php:23
msgid "An admin will be here shortly.."
msgstr ""
#: views/public/function.front-chat.php:24
msgid "You are beign helped by "
msgstr ""
#: views/public/function.front-chat.php:25
msgid "Sorry, we are currently unavailable.. "
msgstr ""
#: views/public/function.front-chat.php:26
msgid "You are now disconnected.."
msgstr ""
#: views/public/function.front-chat.php:27
msgid "You are chatting with "
msgstr ""
#: views/public/function.front-chat.php:32
#: views/public/function.front-chat.php:100
msgid "Your message here.."
msgstr ""
#: views/public/function.front-chat.php:36
msgid "End Chat"
msgstr ""
#: views/public/function.front-chat.php:38
#: views/public/function.front-chat.php:60
msgid "Back"
msgstr ""
#: views/public/function.front-chat.php:45
msgid "Please fill out this form to get in touch!"
msgstr ""
#: views/public/function.front-chat.php:61
msgid "Sent"
msgstr ""
#: views/public/function.front-chat.php:63
msgid "Try Again"
msgstr ""
#: views/public/function.front-chat.php:64
msgid "Send"
msgstr ""
#: views/public/function.front-chat.php:72
msgid "Start Chatting now!"
msgstr ""
#: views/public/function.front-chat.php:74
msgid "Your name"
msgstr ""
#: views/public/function.front-chat.php:77
msgid "Your email"
msgstr ""
#: views/public/function.front-chat.php:80
msgid "Type here your question.."
msgstr ""
#: views/public/function.front-chat.php:84
msgid "Cancel"
msgstr ""
#: views/public/function.front-chat.php:86
msgid "Start Chatting"
msgstr ""
#: views/public/function.front-chat.php:97
msgid "Our Bot "
msgstr ""
#: views/public/function.front-chat.php:97
msgid "is here to help you."
msgstr ""
#: views/public/function.front-chat.php:104
msgid "Chat unavailable at the moment."
msgstr ""
#: views/public/function.front-chat.php:104
msgid "Live Chat"
msgstr ""
#: views/public/function.front-chat.php:105
msgid "Message Us"
msgstr ""

View File

@@ -0,0 +1,32 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [0.0.6] - 2020-06-29
### Added
- First release version for wordpress repository
## [0.0.5] - 2020-02-26
### Fixed
- Avoid settings link in module overview overloading other modules settings links
## [0.0.4] - 2020-01-27
### Added
- count(): Parameter must be an array or an object that implements Countable as of as of PHP 7.2
- Updating composer/installers (v1.5.0 => v1.7.0)
## [0.0.3] - 2018-04-27
### Added
- Added defined check and prefix to constants.php
- Re-Worked Failsave email
## [0.0.2] - 2018-04-27
### Added
- Disabled Failsave email
- Make sure default timezone is set
## [0.0.1] - 2018-04-13
### Added
- Started changelog

View File

@@ -0,0 +1,19 @@
{
"name": "cloudtables-wordpress",
"version": "1.0.0",
"description": "CloudTables easy integration plug-in for WordPress",
"main": "block.js",
"scripts": {
"build": "wp-scripts build",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"cloudtables",
"wordpress"
],
"author": "SpryMedia Ltd",
"license": "MIT",
"devDependencies": {
"@wordpress/scripts": "9.1.0"
}
}

View File

@@ -0,0 +1,222 @@
# Copyright (C) 2018 Arman Afzal <rman.afzal@gmail.com>
# This file is distributed under the same license as the Code Injection plugin.
msgid ""
msgstr ""
"Project-Id-Version: Code Injection 2.4.4\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/code-injection\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"
"POT-Creation-Date: 2020-07-14T13:51:32+00:00\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"X-Generator: WP-CLI 2.4.0\n"
#. Plugin Name of the plugin
#: code-injection.php:254
#: includes/plugin-widget.php:19
msgid "Code Injection"
msgstr ""
#. Plugin URI of the plugin
msgid "https://github.com/Rmanaf/wp-code-injection"
msgstr ""
#. Description of the plugin
#: includes/plugin-widget.php:20
msgid "This plugin allows you to inject code snippets into the pages."
msgstr ""
#. Author of the plugin
msgid "Rmanaf"
msgstr ""
#. Author URI of the plugin
msgid "https://profiles.wordpress.org/rmanaf/"
msgstr ""
#: code-injection.php:280
msgid "Shortcodes"
msgstr ""
#: code-injection.php:309
msgid "Activator Keys"
msgstr ""
#: code-injection.php:359
msgid "Allow nested shortcodes"
msgstr ""
#: code-injection.php:372
msgid "Keys:"
msgstr ""
#: code-injection.php:375
msgid "Generate Key"
msgstr ""
#: code-injection.php:379
msgid "Enter Keys:"
msgstr ""
#: code-injection.php:398
msgid "Ignore activator keys"
msgstr ""
#: code-injection.php:410
msgid "Allow shortcodes in the Custom HTML widget"
msgstr ""
#: code-injection.php:422
msgid "Enable %s shortcode"
msgstr ""
#: code-injection.php:627
msgid "Developer"
msgstr ""
#: includes/code-metabox.php:42
msgid "Code Settings"
msgstr ""
#: includes/code-metabox.php:183
msgid "You can find useful codes in the CI %1$s."
msgstr ""
#: includes/code-metabox.php:187
msgid "Library"
msgstr ""
#: includes/code-metabox.php:221
msgid "Description"
msgstr ""
#: includes/code-metabox.php:223
msgid "Write something about your code..."
msgstr ""
#: includes/code-metabox.php:235
msgid "Tracking"
msgstr ""
#: includes/code-metabox.php:249
msgid "Publicly Queryable"
msgstr ""
#: includes/code-metabox.php:260
msgid "Content-Type"
msgstr ""
#: includes/code-metabox.php:291
msgid "As Plugin"
msgstr ""
#: includes/code-metabox.php:296
msgid "Activator key"
msgstr ""
#: includes/code-metabox.php:298
msgid "Enter key..."
msgstr ""
#: includes/code-metabox.php:315
msgid "From File"
msgstr ""
#: includes/code-metabox.php:317
msgid "Select File"
msgstr ""
#: includes/code-metabox.php:328
msgid "Enabled"
msgstr ""
#: includes/code-type.php:83
msgid "Show All %s"
msgstr ""
#: includes/code-type.php:152
msgid "Copy the Code ID into the Clipboard"
msgstr ""
#: includes/code-type.php:153
msgid "Copy CID"
msgstr ""
#: includes/code-type.php:296
msgid "Codes"
msgstr ""
#: includes/code-type.php:297
#: includes/code-type.php:356
msgid "Code"
msgstr ""
#: includes/code-type.php:298
msgid "Add New Code"
msgstr ""
#: includes/code-type.php:299
msgid "Edit Code"
msgstr ""
#: includes/code-type.php:300
msgid "New Code"
msgstr ""
#: includes/code-type.php:301
msgid "Search Codes"
msgstr ""
#: includes/code-type.php:302
msgid "No codes found"
msgstr ""
#: includes/code-type.php:303
msgid "No codes found in Trash"
msgstr ""
#: includes/code-type.php:304
msgid "All Codes"
msgstr ""
#: includes/code-type.php:357
msgid "Hits"
msgstr ""
#: includes/code-type.php:358
msgid "Info"
msgstr ""
#: includes/code-type.php:384
msgid "Categories"
msgstr ""
#: includes/code-type.php:396
msgid "Author"
msgstr ""
#: includes/code-type.php:405
msgid "Date"
msgstr ""
#: includes/code-type.php:436
msgid "Code ID"
msgstr ""
#: includes/plugin-widget.php:62
msgid "Code ID:"
msgstr ""
#: assets/js/code-editor.js:205
msgid "The File is too large. Do you want to proceed?"
msgstr ""
#: assets/js/code-editor.js:212
msgid "The selected file type is not supported."
msgstr ""
#: assets/js/code-editor.js:226
msgid "Are you sure? You are about to replace the current code with the selected file content."
msgstr ""

View File

@@ -0,0 +1,3 @@
= 1.0.0 =
16 Jun 2020
* Initial release

View File

@@ -46,6 +46,10 @@ Ahalogy wordpress plugin [version 2.1.0] is installed but Client ID not set
<!-- This site is powered by All In One WP Solution Plugin v3.2.9.6 - Download: https://wordpress.org/plugins/all-in-one-wp-solution --> <!-- This site is powered by All In One WP Solution Plugin v3.2.9.6 - Download: https://wordpress.org/plugins/all-in-one-wp-solution -->
<!-- angwp -->
<!-- Ads on this site are served by Adning v1.5.1 - adning.com -->
<!-- ank-simplified-ga --> <!-- ank-simplified-ga -->
<!-- Google Analytics is disabled, Reason: GA ID is not set (v1.4.2)--> <!-- Google Analytics is disabled, Reason: GA ID is not set (v1.4.2)-->
<!-- GA Tracking ends (v1.4.2) --> <!-- GA Tracking ends (v1.4.2) -->
@@ -1190,3 +1194,7 @@ s0.parentNode.insertBefore(s1,s0);
<!-- provesource -->
<!-- Start of Async ProveSource Code (Wordpress / Woocommerce v2.1.0) -->

View File

@@ -0,0 +1,66 @@
# Copyright (C) 2020 Solice GmbH
# This file is distributed under the same license as the Conformis Cookie Banner plugin.
msgid ""
msgstr ""
"Project-Id-Version: Conformis Cookie Banner 0.1.0\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/conformis\n"
"POT-Creation-Date: 2020-04-23T08:20:03+00:00\n"
"PO-Revision-Date: 2020-04-23 10:22+0200\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: en_GB\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.3\n"
"X-Domain: conformis\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. Plugin Name of the plugin
#: views/settings.php:34
msgid "Conformis Cookie Banner"
msgstr "Conformis Cookie Banner"
#. Description of the plugin
msgid "A simple customisable GDPR Banner"
msgstr "A simple customisable GDPR Banner"
#. Author of the plugin
msgid "Solice GmbH"
msgstr "Solice GmbH"
#. Author URI of the plugin
msgid "https://www.conformis.io/"
msgstr "https://www.conformis.io/"
#: views/settings.php:54
msgid "Save Settings"
msgstr "Save Settings"
#: views/settings.php:73
msgid "Banner Position"
msgstr "Banner Position"
#: views/settings.php:81
msgid "Top"
msgstr "Top"
#: views/settings.php:82
msgid "Center"
msgstr "Center"
#: views/settings.php:83
msgid "Bottom"
msgstr "Bottom"
#: views/settings.php:90
msgid "Banner Message"
msgstr "Banner Message"
#: views/settings.php:102
msgid "Confirm Button Text"
msgstr "Confirm Button Text"
#: views/settings.php:197
msgid "Settings"
msgstr "Settings"

View File

@@ -0,0 +1,34 @@
{
"name": "cora",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "gulp"
},
"repository": {
"type": "git",
"url": "git+https://github.com/omarbadran/cora.git"
},
"author": "Omar Badran",
"license": "GPL-3.0",
"bugs": {
"url": "https://github.com/omarbadran/cora/issues"
},
"homepage": "https://github.com/omarbadran/cora#readme",
"devDependencies": {
"@babel/core": "^7.8.4",
"@babel/preset-env": "^7.8.4",
"autoprefixer": "^9.7.4",
"cssnano": "^4.1.10",
"gulp": "^4.0.2",
"gulp-babel": "^8.0.0",
"gulp-concat": "^2.6.1",
"gulp-postcss": "^8.0.0",
"gulp-sass": "^4.0.2",
"gulp-sass-glob": "^1.1.0",
"gulp-sourcemaps": "^2.6.5",
"gulp-uglify": "^3.0.2",
"node-sass": "^4.13.1"
}
}

View File

@@ -0,0 +1,15 @@
== Cornell Notes Changelog ==
1.0.3
* Changed name for clarity to `Cornell Notes Gutenberg Block`
* changed Github repo URL
1.0.2
* Readme edits
* Corrected `register_block_type` reference in `init.php`
1.0.1
* Changed styling for increased backwards compatibility with older versions of Gutenberg
* Added assets for the WordPress plugin Repo
1.0
*Initial release into the wild

View File

@@ -0,0 +1,14 @@
{
"name": "cornell-notes-gutenberg-block",
"version": "1.0.3",
"private": true,
"scripts": {
"start": "cgb-scripts start",
"build": "cgb-scripts build",
"eject": "cgb-scripts eject"
},
"dependencies": {
"cgb-scripts": "1.23.0",
"mem": ">=4.0.0"
}
}

View File

@@ -0,0 +1,89 @@
# Copyright (C) 2020 Chris Ebbinger
# This file is distributed under the same license as the Corona VAT Germany plugin.
msgid ""
msgstr ""
"Project-Id-Version: Corona VAT Germany 1.0.0\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/ce_corona_tax\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"POT-Creation-Date: 2020-06-29T16:45:10+02:00\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"X-Generator: WP-CLI 2.4.0\n"
"X-Domain: cect\n"
#. Plugin Name of the plugin
#: ce_corona_tax.php:229
msgid "Corona VAT Germany"
msgstr ""
#. Plugin URI of the plugin
#. Author URI of the plugin
msgid "https://ebbinger.com"
msgstr ""
#. Description of the plugin
msgid "Adjusts the WooCommerce VAT rates (19% -> 16% / 7% -> 5%) for period beginning from 2020-07-01 and resets the tax rates after 2020-12-31."
msgstr ""
#. Author of the plugin
msgid "Chris Ebbinger"
msgstr ""
#: ce_corona_tax.php:158
msgid "Tax Reduce Date already passed and the automated action was executed immediately."
msgstr ""
#: ce_corona_tax.php:163
msgid "Tax Restore Date already passed and the automated action was executed immediately."
msgstr ""
#: ce_corona_tax.php:230
msgid "Corona VAT Germany Settings"
msgstr ""
#: ce_corona_tax.php:236
msgid "General"
msgstr ""
#: ce_corona_tax.php:237
msgid "Select the tax classes that should be adjusted automatically. Separate multiple entries with a comma (<code>, </code>). The following classes are defined in WooCommerce:"
msgstr ""
#: ce_corona_tax.php:241
msgid "Standard Tax Classes<br>(previously 19%)"
msgstr ""
#: ce_corona_tax.php:246
msgid "Reduced Tax Classes<br>(previously 7%)"
msgstr ""
#: ce_corona_tax.php:252
msgid "Schedule"
msgstr ""
#: ce_corona_tax.php:253
msgid "Choose the timing for the tax changes. The changes will be executed during the first visit of the website after the given time."
msgstr ""
#: ce_corona_tax.php:257
msgid "Reduce Tax Date"
msgstr ""
#: ce_corona_tax.php:258
msgid "Choose when the tax rate will be reduced."
msgstr ""
#: ce_corona_tax.php:264
msgid "Restore Tax Date"
msgstr ""
#: ce_corona_tax.php:265
msgid "Choose when the original tax rate will be restored."
msgstr ""
#: ce_corona_tax.php:282
msgid "Settings"
msgstr ""

View File

@@ -0,0 +1,87 @@
# Changelog #
## 1.2.3 ##
* Fixed - issue with notice placement (whoops)
## 1.2.1 ##
* Updated sanitization to match wordpress.org audit.
## 1.2.0 ##
* Updated - Namespace changed from courier to courier-notices due to plugin conflict on wordpress.org
* Fixed - Duplicate modal/popup issue
* Submission to wordpress.org
## 1.1.4 ##
* Fixed - Fatal error when assigning data to a template view
## 1.1.3 ##
* Fixed - Icon font specificity
## 1.1.2 ##
* Remove - Notice font styles, allow styling to inherit from theme
## 1.1.1 ##
* Fixed - Issue with default styles not being created on install
* Fixed - Security updates provided by github audit
## 1.1.0 ##
* Fixed - Minor security updates
* Fixed - Minor code cleanup
* Fixed - Link to Types/Design was broken
* Fixed - Link to Settings was broken
* Fixed - Minor updates to strings to allow for translation
* Fixed - Modal notice was not working properly (dismissible)
* Fixed - Error log was being utilized and should not have been
* Fixed - Cron was running hourly and not every 5 minutes
* Fixed - Various typos (We talk pretty one day)
* Fixed - utilizing iris wpColorPicker (For the time being)
* Fixed - Fixed an issue with color changes in the design panel did not show until page refresh
* Added - New UI/UX for creating and styling "Types" of notices
* Added - Courier actually has some branding now
* Added - Default data on plugin activation
* Added - Utility method to sanitize kses content
* Added - Cleaned up CSS across the entire plugin
* Added - New cron schedule (Every 5 minutes)
* Added - New taxonomy for "Style of Notice". This will allow for all different kinds of notices in the future
* Added - Base for CRUD in the future. Mainly just R right now.
* Improved - Added more flexibility to how tabs and subtabs can extend the plugin
* Improved - CSS is only generated and output if CSS is not disabled
* Improved - Placement logic is more flexible now
* Improved - UI/UX to show different notice options depending on other selections
* Improved - How css and javascript is enqueued based on context of admin
* Improved - Code Organization
* Improved - Templates
* Improved - Updated the expiration of notices to increment every 5 minutes for better accuracy and less stress on servers
## 1.0.4 ##
* Cleaned up deployment process further.
## 1.0.2 ##
* Migrated to using composer as our autoloader instead of a proprietary one
* Added Parsedown dependency for Markdown display within the plugin
* Added a changelog.md display to the settings page as a tab
* Added more automation for release to get releases out the door quicker
* Minor code formatting changes
## 1.0.1 ##
* Updated dependencies based on github security notification
## 1.0.0 ##
Initial Release
* Cleaned up UI for date and time selection.
* You can no longer select an expiration date from the past.
* Implemented datetimepicker so time selection is easier.
* Minor typo fix in admin area.
* Minor data sanitization/security hardening.

View File

@@ -0,0 +1,43 @@
{
"name": "linchpin/courier",
"description": "Courier Notification for WordPress",
"homepage": "https://github.com/linchpin/courier",
"version": "1.2.3",
"authors": [
{
"name": "Linchpin",
"email": "sayhi@linchpin.com",
"homepage": "https://linchpin.com",
"role": "Developer"
}
],
"keywords": [
"WordPress",
"linchpin",
"notices",
"notifications",
"alerts",
"gdpr"
],
"support": {
"issues": "https://github.com/linchpin/courier/issues",
"source": "https://github.com/linchpin/courier"
},
"license": "GPL-2.0+",
"require-dev": {
},
"type": "wordpress-plugin",
"require": {
"php": ">=7.0",
"erusev/parsedown": "^1.7"
},
"autoload": {
"psr-4": {
"CourierNotices\\": "src/"
}
},
"scripts": {
"lint": "phpcs .",
"lint-fix": "phpcbf ."
}
}

View File

@@ -0,0 +1,369 @@
# Copyright (C) 2020 Joommasters
# This file is distributed under the same license as the JMS Covid 19 plugin.
msgid ""
msgstr ""
"Project-Id-Version: JMS Covid 19 1.0.0\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/jms-covid-19\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"POT-Creation-Date: 2020-04-03T09:35:09+00:00\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"X-Generator: WP-CLI 2.1.0\n"
"X-Domain: jms-covid-19\n"
#. Plugin Name of the plugin
#: admin/widgets/jms_covid.php:32
#: front/widget.php:14
msgid "JMS Covid 19"
msgstr ""
#. Plugin URI of the plugin
#. Author URI of the plugin
msgid "http://joommasters.com"
msgstr ""
#. Description of the plugin
msgid "COVID-19 Coronavirus."
msgstr ""
#. Author of the plugin
msgid "Joommasters"
msgstr ""
#: admin/admin.php:19
msgid "JMS COVID-19"
msgstr ""
#: admin/elementor.php:21
msgid "Jms"
msgstr ""
#: admin/params.php:24
msgid "Your settings have been saved."
msgstr ""
#: admin/params.php:80
#: admin/widgets/jms_covid.php:52
msgid "General"
msgstr ""
#: admin/params.php:81
#: admin/widgets/jms_covid.php:63
msgid "Style 1"
msgstr ""
#: admin/params.php:82
#: admin/widgets/jms_covid.php:64
msgid "Style 2"
msgstr ""
#: admin/params.php:83
#: admin/widgets/jms_covid.php:65
msgid "Style 3"
msgstr ""
#: admin/params.php:84
#: admin/widgets/jms_covid.php:66
msgid "Style 4"
msgstr ""
#: admin/params.php:85
#: admin/widgets/jms_covid.php:67
msgid "Style 5"
msgstr ""
#: admin/params.php:86
#: admin/widgets/jms_covid.php:68
msgid "Style 6"
msgstr ""
#: admin/params.php:92
msgid "Data Sources"
msgstr ""
#: admin/params.php:115
#: admin/params.php:166
#: admin/params.php:281
#: admin/params.php:432
#: admin/params.php:498
msgid "Title Color"
msgstr ""
#: admin/params.php:121
#: admin/params.php:172
#: admin/params.php:287
#: admin/params.php:438
#: admin/params.php:504
msgid "Title Font Size"
msgstr ""
#: admin/params.php:127
#: admin/params.php:299
#: admin/params.php:362
msgid "Text Font Size"
msgstr ""
#: admin/params.php:133
#: admin/params.php:202
#: admin/params.php:305
#: admin/params.php:465
msgid "C(confirm) Color"
msgstr ""
#: admin/params.php:139
#: admin/params.php:214
#: admin/params.php:317
#: admin/params.php:471
msgid "D(deaths) Color"
msgstr ""
#: admin/params.php:145
#: admin/params.php:220
#: admin/params.php:323
#: admin/params.php:477
msgid "R(recovered) Color"
msgstr ""
#: admin/params.php:178
msgid "Global Title Color"
msgstr ""
#: admin/params.php:184
msgid "Global Title Font Size"
msgstr ""
#: admin/params.php:190
msgid "SubTitle Color"
msgstr ""
#: admin/params.php:196
msgid "SubTitle Font Size"
msgstr ""
#: admin/params.php:208
#: admin/params.php:311
msgid "A(active) Color"
msgstr ""
#: admin/params.php:227
msgid "Tab Background Color"
msgstr ""
#: admin/params.php:233
#: admin/params.php:330
msgid "Tab Text Color"
msgstr ""
#: admin/params.php:239
msgid "Tab Text Font Size"
msgstr ""
#: admin/params.php:245
msgid "Tab Active Background Color"
msgstr ""
#: admin/params.php:251
#: admin/params.php:336
msgid "Tab Actice Text Color"
msgstr ""
#: admin/params.php:272
msgid "Show title"
msgstr ""
#: admin/params.php:293
#: admin/params.php:356
msgid "Text Color"
msgstr ""
#: admin/params.php:369
msgid "Column Heading Color"
msgstr ""
#: admin/params.php:375
msgid "Column Heading Font Size"
msgstr ""
#: admin/params.php:382
msgid "Pagination Active Background Color"
msgstr ""
#: admin/params.php:388
msgid "Pagination Active Text Color"
msgstr ""
#: admin/params.php:394
msgid "Pagination Font Size"
msgstr ""
#: admin/params.php:401
msgid "Datatables Show"
msgstr ""
#: admin/params.php:423
msgid "Show Title"
msgstr ""
#: admin/params.php:444
msgid "Show Subtitle"
msgstr ""
#: admin/params.php:453
msgid "Subtitle Color"
msgstr ""
#: admin/params.php:459
msgid "Subtitle Font Size"
msgstr ""
#: admin/params.php:510
msgid "Color for background"
msgstr ""
#: admin/params.php:516
msgid "Color for country"
msgstr ""
#: admin/params.php:522
msgid "Border Color for country"
msgstr ""
#: admin/params.php:528
msgid "Border Color on hover"
msgstr ""
#: admin/params.php:534
msgid "Color type for country have confirm case"
msgstr ""
#: admin/params.php:538
msgid "Opacity"
msgstr ""
#: admin/params.php:542
msgid "Number of case"
msgstr ""
#: admin/params.php:547
msgid "Color for country have confirm case"
msgstr ""
#: admin/params.php:553
msgid "Color for country by number of confirm case"
msgstr ""
#: admin/params.php:584
msgid "Save"
msgstr ""
#: admin/widgets/jms_covid.php:60
msgid "Style"
msgstr ""
#: admin/widgets/jms_covid.php:77
msgid "Country"
msgstr ""
#: admin/widgets/jms_covid.php:90
msgid "Countries"
msgstr ""
#: admin/widgets/jms_covid.php:106
msgid "Title"
msgstr ""
#: admin/widgets/jms_covid.php:118
msgid "SubTitle"
msgstr ""
#: front/front.php:52
#: front/front.php:443
#: front/front.php:936
msgid "Confirmed"
msgstr ""
#: front/front.php:53
#: front/front.php:444
#: front/front.php:922
#: front/front.php:940
msgid "Deaths"
msgstr ""
#: front/front.php:54
#: front/front.php:921
#: front/front.php:944
msgid "Recovered"
msgstr ""
#: front/front.php:320
#: front/front.php:364
#: front/front.php:409
#: front/front.php:461
msgid "Confirmed Cases"
msgstr ""
#: front/front.php:324
#: front/front.php:376
#: front/front.php:421
msgid "Active cases"
msgstr ""
#: front/front.php:328
#: front/front.php:379
#: front/front.php:424
#: front/front.php:465
msgid "Recovered cases"
msgstr ""
#: front/front.php:332
#: front/front.php:382
#: front/front.php:427
#: front/front.php:469
msgid "Deaths cases"
msgstr ""
#: front/front.php:442
msgid "Country, Other"
msgstr ""
#: front/front.php:483
#: front/front.php:962
#: front/front.php:1010
#: front/widget.php:65
msgid "Global"
msgstr ""
#: front/front.php:915
msgid "Zoom in"
msgstr ""
#: front/front.php:916
msgid "Zoom out"
msgstr ""
#: front/front.php:920
msgid "Cases"
msgstr ""
#: front/widget.php:42
msgid "Covid 19"
msgstr ""
#: front/widget.php:52
msgid "Title:"
msgstr ""
#: front/widget.php:55
msgid "Style:"
msgstr ""
#: front/widget.php:63
msgid "Country:"
msgstr ""
#: jms-covid-19.php:58
msgid "Every 10 minutes"
msgstr ""

View File

@@ -0,0 +1,14 @@
Changelog
=========
#### 1.0.3 - July 16 2020
- Small fixes in the plugin readme.
#### 1.0.2 - July 16 2020
- Small fixes in the plugin readme.
#### 1.0.1 - July 16 2020
- Fixes an issue where the "Let's get started" button needed to be clicked twice in some cases.
#### 1.0.0 - July 16 2020
- Initial version of the plugin

Some files were not shown because too many files have changed in this diff Show More