forked from Arsenal21/software-license-manager
-
-
Notifications
You must be signed in to change notification settings - Fork 28
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- added: support for email reminder, user will receive an email when license has expired - fixed: a bug where email will be send-out - added: custom fields to woocommece order - added: product type (license) for woocommerce - rebuilt my licenses in my account page - added: until version and current version to api - ui: change styles to match more wp interface
- Loading branch information
Showing
136 changed files
with
17,950 additions
and
671 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,28 +1,24 @@ | ||
<?php | ||
|
||
|
||
// ---- ---- ---- | ||
// A. Define a cron job interval if it doesn't exist | ||
|
||
add_filter('cron_schedules', 'slm_check_every_minute'); | ||
|
||
function slm_check_every_minute($schedules) | ||
{ | ||
$schedules['every_minute'] = array( | ||
'interval' => 1*60, | ||
'display' => __('Every 1 minute'), | ||
add_filter('cron_schedules', 'slm_check_expiration_daily'); | ||
add_action('slm_expired_send_email_reminder', 'slm_run_lic_check'); | ||
|
||
// for dev | ||
function slm_check_expiration_daily($schedules){ | ||
$schedules['slm_daily'] = array( | ||
'interval' => 21600*4, | ||
'display' => __('Every day'), | ||
); | ||
return $schedules; | ||
} | ||
|
||
|
||
// send automatic scheduled email | ||
if (!wp_next_scheduled('slm_expired_send_email_reminder')) { | ||
wp_schedule_event(time(), 'every_minute', 'slm_expired_send_email_reminder'); | ||
wp_schedule_event(time(), 'slm_daily', 'slm_expired_send_email_reminder'); | ||
} | ||
add_action('slm_expired_send_email_reminder', 'run_slm_lic_check'); | ||
|
||
|
||
function run_slm_lic_check(){ | ||
function slm_run_lic_check(){ | ||
SLM_Utility::check_for_expired_lic(); | ||
} | ||
} | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
[*] | ||
charset=utf-8 | ||
end_of_line=lf | ||
insert_final_newline=false | ||
indent_style=tab | ||
tab_width=4 | ||
|
||
[{phpunit.xml.dist,*.jhm,*.xslt,*.xul,*.rng,*.xsl,*.xsd,*.ant,*.tld,*.fxml,*.jrxml,*.xml,*.jnlp,*.wsdl}] | ||
indent_style=space | ||
indent_size=4 | ||
|
||
[*.svg] | ||
indent_style=space | ||
indent_size=4 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
<?php | ||
if ( !class_exists('Puc_v4_Factory', false) ): | ||
|
||
class Puc_v4_Factory extends Puc_v4p6_Factory { } | ||
|
||
endif; |
49 changes: 49 additions & 0 deletions
49
admin/includes/plugin-update-checker/Puc/v4p6/Autoloader.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
<?php | ||
|
||
if ( !class_exists('Puc_v4p6_Autoloader', false) ): | ||
|
||
class Puc_v4p6_Autoloader { | ||
private $prefix = ''; | ||
private $rootDir = ''; | ||
private $libraryDir = ''; | ||
|
||
private $staticMap; | ||
|
||
public function __construct() { | ||
$this->rootDir = dirname(__FILE__) . '/'; | ||
$nameParts = explode('_', __CLASS__, 3); | ||
$this->prefix = $nameParts[0] . '_' . $nameParts[1] . '_'; | ||
|
||
$this->libraryDir = realpath($this->rootDir . '../..') . '/'; | ||
$this->staticMap = array( | ||
'PucReadmeParser' => 'vendor/readme-parser.php', | ||
'Parsedown' => 'vendor/ParsedownLegacy.php', | ||
); | ||
if ( version_compare(PHP_VERSION, '5.3.0', '>=') ) { | ||
$this->staticMap['Parsedown'] = 'vendor/Parsedown.php'; | ||
} | ||
|
||
spl_autoload_register(array($this, 'autoload')); | ||
} | ||
|
||
public function autoload($className) { | ||
if ( isset($this->staticMap[$className]) && file_exists($this->libraryDir . $this->staticMap[$className]) ) { | ||
/** @noinspection PhpIncludeInspection */ | ||
include ($this->libraryDir . $this->staticMap[$className]); | ||
return; | ||
} | ||
|
||
if (strpos($className, $this->prefix) === 0) { | ||
$path = substr($className, strlen($this->prefix)); | ||
$path = str_replace('_', '/', $path); | ||
$path = $this->rootDir . $path . '.php'; | ||
|
||
if (file_exists($path)) { | ||
/** @noinspection PhpIncludeInspection */ | ||
include $path; | ||
} | ||
} | ||
} | ||
} | ||
|
||
endif; |
177 changes: 177 additions & 0 deletions
177
admin/includes/plugin-update-checker/Puc/v4p6/DebugBar/Extension.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,177 @@ | ||
<?php | ||
if ( !class_exists('Puc_v4p6_DebugBar_Extension', false) ): | ||
|
||
class Puc_v4p6_DebugBar_Extension { | ||
const RESPONSE_BODY_LENGTH_LIMIT = 4000; | ||
|
||
/** @var Puc_v4p6_UpdateChecker */ | ||
protected $updateChecker; | ||
protected $panelClass = 'Puc_v4p6_DebugBar_Panel'; | ||
|
||
public function __construct($updateChecker, $panelClass = null) { | ||
$this->updateChecker = $updateChecker; | ||
if ( isset($panelClass) ) { | ||
$this->panelClass = $panelClass; | ||
} | ||
|
||
add_filter('debug_bar_panels', array($this, 'addDebugBarPanel')); | ||
add_action('debug_bar_enqueue_scripts', array($this, 'enqueuePanelDependencies')); | ||
|
||
add_action('wp_ajax_puc_v4_debug_check_now', array($this, 'ajaxCheckNow')); | ||
} | ||
|
||
/** | ||
* Register the PUC Debug Bar panel. | ||
* | ||
* @param array $panels | ||
* @return array | ||
*/ | ||
public function addDebugBarPanel($panels) { | ||
if ( $this->updateChecker->userCanInstallUpdates() ) { | ||
$panels[] = new $this->panelClass($this->updateChecker); | ||
} | ||
return $panels; | ||
} | ||
|
||
/** | ||
* Enqueue our Debug Bar scripts and styles. | ||
*/ | ||
public function enqueuePanelDependencies() { | ||
wp_enqueue_style( | ||
'puc-debug-bar-style-v4', | ||
$this->getLibraryUrl("/css/puc-debug-bar.css"), | ||
array('debug-bar'), | ||
'20171124' | ||
); | ||
|
||
wp_enqueue_script( | ||
'puc-debug-bar-js-v4', | ||
$this->getLibraryUrl("/js/debug-bar.js"), | ||
array('jquery'), | ||
'20170516' | ||
); | ||
} | ||
|
||
/** | ||
* Run an update check and output the result. Useful for making sure that | ||
* the update checking process works as expected. | ||
*/ | ||
public function ajaxCheckNow() { | ||
if ( $_POST['uid'] !== $this->updateChecker->getUniqueName('uid') ) { | ||
return; | ||
} | ||
$this->preAjaxRequest(); | ||
$update = $this->updateChecker->checkForUpdates(); | ||
if ( $update !== null ) { | ||
echo "An update is available:"; | ||
echo '<pre>', htmlentities(print_r($update, true)), '</pre>'; | ||
} else { | ||
echo 'No updates found.'; | ||
} | ||
|
||
$errors = $this->updateChecker->getLastRequestApiErrors(); | ||
if ( !empty($errors) ) { | ||
printf('<p>The update checker encountered %d API error%s.</p>', count($errors), (count($errors) > 1) ? 's' : ''); | ||
|
||
foreach (array_values($errors) as $num => $item) { | ||
$wpError = $item['error']; | ||
/** @var WP_Error $wpError */ | ||
printf('<h4>%d) %s</h4>', $num + 1, esc_html($wpError->get_error_message())); | ||
|
||
echo '<dl>'; | ||
printf('<dt>Error code:</dt><dd><code>%s</code></dd>', esc_html($wpError->get_error_code())); | ||
|
||
if ( isset($item['url']) ) { | ||
printf('<dt>Requested URL:</dt><dd><code>%s</code></dd>', esc_html($item['url'])); | ||
} | ||
|
||
if ( isset($item['httpResponse']) ) { | ||
if ( is_wp_error($item['httpResponse']) ) { | ||
$httpError = $item['httpResponse']; | ||
/** @var WP_Error $httpError */ | ||
printf( | ||
'<dt>WordPress HTTP API error:</dt><dd>%s (<code>%s</code>)</dd>', | ||
esc_html($httpError->get_error_message()), | ||
esc_html($httpError->get_error_code()) | ||
); | ||
} else { | ||
//Status code. | ||
printf( | ||
'<dt>HTTP status:</dt><dd><code>%d %s</code></dd>', | ||
wp_remote_retrieve_response_code($item['httpResponse']), | ||
wp_remote_retrieve_response_message($item['httpResponse']) | ||
); | ||
|
||
//Headers. | ||
echo '<dt>Response headers:</dt><dd><pre>'; | ||
foreach (wp_remote_retrieve_headers($item['httpResponse']) as $name => $value) { | ||
printf("%s: %s\n", esc_html($name), esc_html($value)); | ||
} | ||
echo '</pre></dd>'; | ||
|
||
//Body. | ||
$body = wp_remote_retrieve_body($item['httpResponse']); | ||
if ( $body === '' ) { | ||
$body = '(Empty response.)'; | ||
} else if ( strlen($body) > self::RESPONSE_BODY_LENGTH_LIMIT ) { | ||
$length = strlen($body); | ||
$body = substr($body, 0, self::RESPONSE_BODY_LENGTH_LIMIT) | ||
. sprintf("\n(Long string truncated. Total length: %d bytes.)", $length); | ||
} | ||
|
||
printf('<dt>Response body:</dt><dd><pre>%s</pre></dd>', esc_html($body)); | ||
} | ||
} | ||
echo '<dl>'; | ||
} | ||
} | ||
|
||
exit; | ||
} | ||
|
||
/** | ||
* Check access permissions and enable error display (for debugging). | ||
*/ | ||
protected function preAjaxRequest() { | ||
if ( !$this->updateChecker->userCanInstallUpdates() ) { | ||
die('Access denied'); | ||
} | ||
check_ajax_referer('puc-ajax'); | ||
|
||
error_reporting(E_ALL); | ||
@ini_set('display_errors', 'On'); | ||
} | ||
|
||
/** | ||
* @param string $filePath | ||
* @return string | ||
*/ | ||
private function getLibraryUrl($filePath) { | ||
$absolutePath = realpath(dirname(__FILE__) . '/../../../' . ltrim($filePath, '/')); | ||
|
||
//Where is the library located inside the WordPress directory structure? | ||
$absolutePath = Puc_v4p6_Factory::normalizePath($absolutePath); | ||
|
||
$pluginDir = Puc_v4p6_Factory::normalizePath(WP_PLUGIN_DIR); | ||
$muPluginDir = Puc_v4p6_Factory::normalizePath(WPMU_PLUGIN_DIR); | ||
$themeDir = Puc_v4p6_Factory::normalizePath(get_theme_root()); | ||
|
||
if ( (strpos($absolutePath, $pluginDir) === 0) || (strpos($absolutePath, $muPluginDir) === 0) ) { | ||
//It's part of a plugin. | ||
return plugins_url(basename($absolutePath), $absolutePath); | ||
} else if ( strpos($absolutePath, $themeDir) === 0 ) { | ||
//It's part of a theme. | ||
$relativePath = substr($absolutePath, strlen($themeDir) + 1); | ||
$template = substr($relativePath, 0, strpos($relativePath, '/')); | ||
$baseUrl = get_theme_root_uri($template); | ||
|
||
if ( !empty($baseUrl) && $relativePath ) { | ||
return $baseUrl . '/' . $relativePath; | ||
} | ||
} | ||
|
||
return ''; | ||
} | ||
} | ||
|
||
endif; |
Oops, something went wrong.