Support for Premium Resources (#809)

* Initial premium preparation for licenses and gpm handling

* Premium styling

* Removed unused import

* Synced CSS

* Updated selectize
This commit is contained in:
Djamil Legato
2016-10-13 10:13:18 -07:00
committed by GitHub
parent d3556255c2
commit 02eeca78e8
16 changed files with 110 additions and 15 deletions

View File

@@ -5,6 +5,7 @@ use DateTime;
use Grav\Common\Data;
use Grav\Common\File\CompiledYamlFile;
use Grav\Common\GPM\GPM;
use Grav\Common\GPM\Licenses;
use Grav\Common\GPM\Response;
use Grav\Common\Grav;
use Grav\Common\Language\LanguageCodes;
@@ -472,7 +473,7 @@ class Admin
*
* @param bool $local
*
* @return array
* @return mixed
*/
public function plugins($local = true)
{
@@ -500,6 +501,11 @@ class Admin
return $package;
}
public function license($package_slug)
{
return Licenses::get($package_slug);
}
/**
* Generate an array of dependencies for a package, used to generate a list of
* packages that can be removed when removing a package.
@@ -932,6 +938,22 @@ class Admin
}
}
/**
* Determine if the plugin or theme info passed is premium
*
* @param object $info Plugin or Theme info object
*
* @return bool
*/
public function isPremiumProduct($info)
{
if (isset($info['premium'])) {
return true;
} else {
return false;
}
}
/**
* Renders phpinfo
*

View File

@@ -3,6 +3,7 @@ namespace Grav\Plugin\Admin;
use Grav\Common\Grav;
use Grav\Common\GPM\GPM as GravGPM;
use Grav\Common\GPM\Licenses;
use Grav\Common\GPM\Installer;
use Grav\Common\GPM\Response;
use Grav\Common\GPM\Upgrader;
@@ -92,7 +93,8 @@ class Gpm
return false;
}
$local = static::download($package);
$license = Licenses::get($package->slug);
$local = static::download($package, $license);
Installer::install($local, $options['destination'],
['install_path' => $package->install_path, 'theme' => $options['theme']]);
@@ -194,9 +196,28 @@ class Gpm
*
* @return string
*/
private static function download(Package $package)
private static function download(Package $package, $license = null)
{
$contents = Response::get($package->zipball_url, []);
$query = '';
if ($package->premium) {
$query = \json_encode(array_merge(
$package->premium,
[
'slug' => $package->slug,
'filename' => $package->premium['filename'],
'license_key' => $license
]
));
$query = '?d=' . base64_encode($query);
}
try {
$contents = Response::get($package->zipball_url . $query, []);
} catch (\Exception $e) {
throw new \RuntimeException($e->getMessage());
}
$tmp_dir = Admin::getTempDir() . '/Grav-' . uniqid();
Folder::mkdir($tmp_dir);

View File

@@ -610,6 +610,7 @@ PLUGIN_ADMIN:
DROPZONE_MAX_FILES_EXCEEDED: "You can not upload any more files."
DROPZONE_REMOVE_FILE: "Remove file"
DROPZONE_RESPONSE_ERROR: "Server responded with {{statusCode}} code."
PREMIUM_PRODUCT: "Premium"
ADMIN_CACHING: "Enable Admin Caching"
ADMIN_CACHING_HELP: "Caching in the admin can be controlled independently from the front-end site"
DESTINATION_NOT_SPECIFIED: "Destination not specified"

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -27,7 +27,7 @@
"js-yaml": "^3.6.1",
"mout": "^1.0.0",
"remodal": "^1.1.0",
"selectize": "^0.12.3",
"selectize": "^0.12.4",
"sortablejs": "^1.4.2",
"speakingurl": "^10.0.0",
"toastr": "^2.1.2",

View File

@@ -254,6 +254,12 @@ tr {
}
}
#admin-main .admin-block a.gumroad-button {
background: $critical-bg !important;
color: $critical-text !important;
}
#admin-login-wrapper {
background: radial-gradient(circle at center, lighten($page-bg, 10%) 0%, darken($page-bg, 10%) 100%);
}
@@ -940,6 +946,10 @@ form {
}
}
.notice-reverse, .note-reverse {
color: $notice-bg;
}
.error, .warning {
background: $critical-bg;
color: $critical-text;
@@ -960,6 +970,10 @@ form {
}
}
.error-reverse, .warning-reverse {
color: $critical-bg;
}
.primary-accent {
background: darken($primary-accent-bg, 5%);
color: $primary-accent-fg;

View File

@@ -101,3 +101,18 @@
left: 0;
z-index: 990;
}
// Override style for stubborn gumroad button
#admin-main .admin-block a.gumroad-button {
padding: 0.3rem 1.5rem !important;
font-size: inherit !important;
font-weight: 300 !important;
line-height: inherit !important;
font-family: inherit !important;
border-radius: 4px !important;
box-shadow: inherit !important;
.gumroad-button-logo {
display: none !important;
background-image: none !important;
}
}

View File

@@ -2,6 +2,7 @@
{% set installed = gpm.isPluginInstalled(admin.route) %}
{% set isTestingRelease = gpm.isTestingRelease(plugin.slug) %}
<script src="//gumroad.com/js/gumroad.js"></script>
<div class="grav-update plugin" data-gpm-plugin="{{ admin.route }}">
</div>
@@ -10,6 +11,9 @@
{% if admin.isTeamGrav(plugin) %}
<small><span class="info-reverse"><i class="fa fa-check-circle" title="{{ "PLUGIN_ADMIN.GRAV_OFFICIAL_PLUGIN"|tu }}"></i></span></small>
{% endif %}
{% if admin.isPremiumProduct(plugin) %}
<small><span class="badge warning premium"><i class="fa fa-star-o"></i> {{ "PLUGIN_ADMIN.PREMIUM_PRODUCT"|tu }}</span></small>
{% endif %}
{% if plugin.symlink %}
<small class="hint--bottom" data-hint="{{ "PLUGIN_ADMIN.PLUGIN_SYMBOLICALLY_LINKED"|tu }}">
<i class="fa fa-fw fa-link"></i>
@@ -36,7 +40,11 @@
{% else %}
<div class="button-bar success">
<a class="button" href="#" data-remodal-target="add-package" data-packages-slugs="{{ plugin.slug }}" data-plugin-action="start-package-installation"><i class="fa fa-plus"></i> {{ "PLUGIN_ADMIN.INSTALL_PLUGIN"|tu }}</a>
{% if (plugin.premium and not admin.license(plugin.slug)) %}
<a class="gumroad-button button" href="https://gum.co/{{ plugin.premium.product_permalink }}" target="_blank" data-gumroad-single-product="true"><i class="fa fa-shopping-cart"></i> {{ "Buy Now"|tu }}</a>
{% else %}
<a class="button" href="#" data-remodal-target="add-package" data-packages-slugs="{{ plugin.slug }}" data-plugin-action="start-package-installation"><i class="fa fa-plus"></i> {{ "PLUGIN_ADMIN.INSTALL_PLUGIN"|tu }}</a>
{% endif %}
</div>
{% endif %}

View File

@@ -1,3 +1,4 @@
<script src="//gumroad.com/js/gumroad.js"></script>
<div class="grav-update plugins"></div>
{% if installing %}
{% include 'partials/release-toggle.html.twig' %}
@@ -25,6 +26,9 @@
{% if admin.isTeamGrav(plugin) %}
<small><span class="info-reverse"><i class="fa fa-check-circle" title="{{ "PLUGIN_ADMIN.GRAV_OFFICIAL_PLUGIN"|tu }}"></i></span></small>
{% endif %}
{% if admin.isPremiumProduct(plugin) %}
<small><span class="badge warning premium"><i class="fa fa-star-o"></i> {{ "PLUGIN_ADMIN.PREMIUM_PRODUCT"|tu }}</span></small>
{% endif %}
{% if plugin.symlink %}
<span class="hint--bottom" data-hint="{{ "PLUGIN_ADMIN.PLUGIN_SYMBOLICALLY_LINKED"|tu }}">
<i class="fa fa-fw fa-link"></i>
@@ -39,7 +43,11 @@
<i class="fa fa-fw fa-toggle-{{ data.get('enabled') ? 'on' : 'off' }}"></i>
</a>
{% elseif (installing) %}
<a class="button" href="#" data-remodal-target="add-package" data-packages-slugs="{{ plugin.slug }}" data-plugin-action="start-package-installation"><i class="fa fa-plus"></i> {{ "PLUGIN_ADMIN.INSTALL"|tu }}</a>
{% if (plugin.premium and not admin.license(plugin.slug)) %}
<a class="gumroad-button button" href="https://gum.co/{{ plugin.premium.product_permalink }}" target="_blank" data-gumroad-single-product="true"><i class="fa fa-shopping-cart"></i> {{ "Buy Now"|tu }}</a>
{% else %}
<a class="button" href="#" data-remodal-target="add-package" data-packages-slugs="{{ plugin.slug }}" data-plugin-action="start-package-installation"><i class="fa fa-plus"></i> {{ "PLUGIN_ADMIN.INSTALL"|tu }}</a>
{% endif %}
{% endif %}
<span class="gpm-details-expand"><i class="fa fa-chevron-down"></i></span>
</td>

View File

@@ -10,6 +10,9 @@
{% if admin.isTeamGrav(theme) %}
<small><span class="info-reverse"><i class="fa fa-check-circle" title="Grav Official Theme"></i></span></small>
{% endif %}
{% if admin.isPremiumProduct(theme) %}
<small><span class="badge warning premium"><i class="fa fa-star-o"></i> {{ "PLUGIN_ADMIN.PREMIUM_PRODUCT"|tu }}</span></small>
{% endif %}
{% if theme.symlink %}
<small class="hint--bottom" data-hint="{{ "PLUGIN_ADMIN.THEME_SYMBOLICALLY_LINKED"|tu }}">
<i class="fa fa-fw fa-link"></i>

View File

@@ -27,6 +27,9 @@
{% if admin.isTeamGrav(theme) %}
<small><span class="info-reverse"><i class="fa fa-check-circle" title="{{ "PLUGIN_ADMIN.GRAV_OFFICIAL_THEME"|tu }}"></i></span></small>
{% endif %}
{% if admin.isPremiumProduct(theme) %}
<small><span class="badge warning premium"><i class="fa fa-star-o"></i> {{ "PLUGIN_ADMIN.PREMIUM_PRODUCT"|tu }}</span></small>
{% endif %}
{% if theme.symlink %}
<span class="hint--bottom" data-hint="{{ "PLUGIN_ADMIN.THEME_SYMBOLICALLY_LINKED"|tu }}">
<i class="fa fa-fw fa-link"></i>

View File

@@ -3788,9 +3788,9 @@ sax@~1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a"
selectize@^0.12.3:
version "0.12.3"
resolved "https://registry.yarnpkg.com/selectize/-/selectize-0.12.3.tgz#25a5c0a89e4c6c4da5e17ea311b1b530df46849d"
selectize@^0.12.4:
version "0.12.4"
resolved "https://registry.yarnpkg.com/selectize/-/selectize-0.12.4.tgz#50c697526b609dea11da153cf7252b98948f4c0e"
dependencies:
microplugin "0.0.3"
sifter "^0.5.1"