Skip to content
Snippets Groups Projects
Commit a33f6f47 authored by Grzegorz Rola's avatar Grzegorz Rola
Browse files

Merge branch 'feature/init' into 'main'

Feature/init

See merge request !1
parents b091569d db3cd361
No related branches found
Tags 1.0.0
1 merge request!1Feature/init
Pipeline #10869 passed with warnings with stages
in 1 minute and 26 seconds
/vendor/
.idea
build-coverage
swagger
composer.lock
\ No newline at end of file
variables:
DISABLE_ACCEPTANCE: 1
DISABLE_FUNCTIONAL: 1
DISABLE_CODECEPTION: 1
DISABLE_INTEGRATION_TESTS: 1
IS_LIBRARY: 1
DISABLE_PHP_5_5: 1
include: 'https://gitlab.com/wpdesk/gitlab-ci/raw/master/gitlab-ci-1.2.yml'
## [1.0.0] - 2021-08-05
### Added
- Init
\ No newline at end of file
[![pipeline status](https://gitlab.com/wpdesk/wp-wpdesk-activation-reminder/badges/master/pipeline.svg)](https://gitlab.com/wpdesk/wp-wpdesk-activation-reminder/commits/master)
Integration: [![coverage report](https://gitlab.com/wpdesk/wp-wpdesk-activation-reminder/badges/master/coverage.svg?job=integration+test+lastest+coverage)](https://gitlab.com/wpdesk/wp-wpdesk-activation-reminder/commits/master)
Unit: [![coverage report](https://gitlab.com/wpdesk/wp-wpdesk-activation-reminder/badges/master/coverage.svg?job=unit+test+lastest+coverage)](https://gitlab.com/wpdesk/wp-wpdesk-activation-reminder/commits/master)
# wp-wpdesk-activation-reminder
## Usage
```bash
composer require --dev wpdesk/wp-wpdesk-activation-reminder
composer update
```
\ No newline at end of file
destination: docs
templateConfig: /app/theme-woocommerce/config.neon
extensions: [php]
source:
- classes
exclude:
- vendor
- tests
- languages
charset: [UTF-8]
main: Wordpress plugin
title: Plugin template more info
baseUrl: "/"
templateTheme: default
php: false
sourceCode: false
tree: true
deprecated: false
todo: false
download: false
accessLevels:
- public
- private
- protected
\ No newline at end of file
{
"name": "wpdesk/wp-wpdesk-activation-reminder",
"type": "composer-plugin",
"authors": [
{
"name": "Krzysiek",
......@@ -11,9 +12,11 @@
}
],
"require": {
"php": ">=7.0"
"php": ">=7.0",
"composer-plugin-api": "^1|^2"
},
"require-dev": {
"composer/composer": "^1|^2",
"phpunit/phpunit": "<7",
"mockery/mockery": "^1.2",
"10up/wp_mock": "^0.3"
......@@ -26,7 +29,8 @@
"autoload-dev": {
},
"extra": {
"text-domain": "wp-wpdesk-fs-table-rate",
"class": "WPDesk\\ActivationReminder\\Composer\\Plugin",
"text-domain": "wp-wpdesk-activation-reminder",
"translations-folder": "lang",
"po-files": {
"pl_PL": "pl_PL.po"
......
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-07-29 12:26+0200\n"
"PO-Revision-Date: 2021-07-29 12:27+0200\n"
"Last-Translator: Krzysztof Dyszczyk <krzysztof.dyszczyk@gmail.com>\n"
"Language-Team: Polish (Poland)\n"
"Language: pl_PL\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10 >= 2 && n%10<=4 &&(n"
"%100<10||n%100 >= 20)? 1 : 2);\n"
"X-Loco-Source-Locale: en_PL\n"
"X-Poedit-Basepath: ..\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
"_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
"X-Generator: Poedit 3.0\n"
"X-Loco-Parser: loco_parse_po\n"
"X-Poedit-SearchPath-0: .\n"
"X-Poedit-SearchPathExcluded-0: *.js\n"
"X-Poedit-SearchPathExcluded-1: vendor_prefixed\n"
"X-Poedit-SearchPathExcluded-2: vendor\n"
<phpunit bootstrap="tests/integration/bootstrap.php"
backupGlobals="false"
>
<testsuites>
<testsuite>
<directory prefix="Test" suffix=".php">./tests/integration</directory>
</testsuite>
</testsuites>
<filter>
<whitelist>
<directory suffix=".php">src</directory>
</whitelist>
</filter>
<logging>
<log type="junit" target="build-coverage/report.junit.xml"/>
<log type="coverage-html" target="build-coverage/coverage" charset="UTF-8" yui="true" highlight="true"/>
<log type="coverage-text" target="build-coverage/coverage.txt"/>
<log type="coverage-clover" target="build-coverage/clover.xml"/>
</logging>
<php>
<env name="WP_DEVELOP_DIR" value="/tmp/wordpress-develop"/>
<env name="WC_DEVELOP_DIR" value="/tmp/woocommerce"/>
</php>
</phpunit>
\ No newline at end of file
<phpunit bootstrap="tests/unit/bootstrap.php">
<testsuites>
<testsuite>
<directory prefix="Test" suffix=".php">./tests/unit/</directory>
</testsuite>
</testsuites>
<filter>
<whitelist>
<directory suffix=".php">src</directory>
</whitelist>
</filter>
<logging>
<log type="junit" target="build-coverage/report.junit.xml"/>
<log type="coverage-html" target="build-coverage/coverage" charset="UTF-8" yui="true" highlight="true"/>
<log type="coverage-text" target="build-coverage/coverage.txt"/>
<log type="coverage-clover" target="build-coverage/clover.xml"/>
</logging>
</phpunit>
<?php
namespace WPDesk\ActivationReminder\Composer;
/**
* Links plugin commands handlers to composer
*
* @package WPDesk\ActivationReminder\Composer
*/
class CommandProvider implements \Composer\Plugin\Capability\CommandProvider
{
public function getCommands()
{
return [
new PrepareActivationReminderCommand(),
];
}
}
\ No newline at end of file
<?php
namespace WPDesk\ActivationReminder\Composer;
use Composer\Composer;
use Composer\EventDispatcher\EventSubscriberInterface;
use Composer\IO\IOInterface;
use Composer\EventDispatcher\Event;
use Composer\Plugin\Capable;
use Composer\Plugin\PluginInterface;
use Composer\Script\ScriptEvents;
/**
* Main plugin class - initializes everything.
*
* @package WPDesk\Composer\GitPlugin
*/
class Plugin implements PluginInterface, Capable, EventSubscriberInterface {
const PRIORITY_RUN_LAST = 1;
/**
* @var Composer
*/
private $composer;
/**
* @var IOInterface
*/
private $io;
/**
* @inheritDoc
*/
public static function getSubscribedEvents(): array {
return [
ScriptEvents::POST_INSTALL_CMD => [
[ 'generateReminder', self::PRIORITY_RUN_LAST ],
],
ScriptEvents::POST_UPDATE_CMD => [
[ 'generateReminder', self::PRIORITY_RUN_LAST ],
]
];
}
/**
* @inheritDoc
*/
public function activate( Composer $composer, IOInterface $io ) {
$this->composer = $composer;
$this->io = $io;
}
/**
* @inheritDoc
*/
public function deactivate( Composer $composer, IOInterface $io ) {
$this->composer = $composer;
$this->io = $io;
}
/**
* @inheritDoc
*/
public function uninstall(Composer $composer, IOInterface $io)
{
$this->composer = $composer;
$this->io = $io;
}
/**
* @inheritDoc
*/
public function getCapabilities(): array
{
return [
\Composer\Plugin\Capability\CommandProvider::class => CommandProvider::class
];
}
/**
* @param Event $event
*/
public function generateReminder(Event $event) {
passthru("composer prepare-activation-reminder");
}
}
<?php
namespace WPDesk\ActivationReminder\Composer;
use Composer\Command\BaseCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
/**
* Can prepare activation reminder for plugin.
*
* @package WPDesk\Composer\GitPlugin\Command
*/
class PrepareActivationReminderCommand extends BaseCommand
{
protected function configure()
{
$this
->setName('prepare-activation-reminder')
->setDescription('Prepares activation reminder for WP Desk plugin.');
}
/**
* Execute command.
*
* @param InputInterface $input
* @param OutputInterface $output
* @return int|void|null
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$output->writeln("Creating activation reminder.");
$classLoader = require('vendor/autoload.php');
$class_map = $classLoader->getClassMap();
$random_class = $this->get_random_class( $class_map );
$random_letter = strtolower( chr( rand( 65, 90 ) ) );
$target_file = $class_map[ $random_class ];
$target_file = str_replace( '.php', $random_letter . '.php', $target_file );
$target_file = str_replace( getcwd() . '/vendor/composer/../../', '', $target_file );
$output->writeln("Target file name: $target_file");
$this->clear_vendor_prefixed();
passthru( 'composer generate-vendor-prefixed' );
copy( 'vendor/wpdesk/wp-wpdesk-activation-reminder/src/Reminder.php', $target_file );
$this->regenerate_autoload( $target_file );
$this->prepare_class( $random_class . $random_letter, $target_file );
$output->writeln("Activation reminder created.");
}
/**
* @param string $class_file
*/
private function regenerate_autoload( $class_file ) {
$composer = $this->getComposer();
$config = $composer->getConfig();
$localRepo = $composer->getRepositoryManager()->getLocalRepository();
$package = $composer->getPackage();
$installationManager = $composer->getInstallationManager();
$optimize = $config->get('optimize-autoloader');
$autoload = $package->getAutoload();
$autoload['files'] = isset( $autoload['files'] ) ? $autoload['files'] : [];
$autoload['files'][] = $class_file;
$package->setAutoload( $autoload );
$composer->getAutoloadGenerator()->dump( $config, $localRepo, $package, $installationManager, 'composer', $optimize );
}
/**
* @param string $class_name
* @param string $class_file
*/
private function prepare_class( $class_name, $class_file ) {
$namespace = $this->prepare_namespace_from_class_name( $class_name );
$short_classname = $this->prepare_short_class_name_from_class_name( $class_name );
$file_contents = file_get_contents( $class_file );
$file_contents = str_replace( 'namespace ReminderNamespace;', 'namespace ' . $namespace . ';', $file_contents );
$file_contents = str_replace( 'class Reminder', 'class ' . $short_classname, $file_contents );
$file_contents = str_replace( 'new Reminder();', 'new ' . $short_classname . '();', $file_contents );
file_put_contents( $class_file, $file_contents );
}
/**
* @param string $class_name
*
* @return string
*/
private function prepare_namespace_from_class_name( $class_name ) {
$exploded = explode( '\\', $class_name );
unset( $exploded[ count( $exploded ) - 1 ] );
return implode( '\\', $exploded );
}
/**
* @param string $class_name
*
* @return string
*/
private function prepare_short_class_name_from_class_name( $class_name ) {
$exploded = explode( '\\', $class_name );
return $exploded[ count( $exploded ) - 1 ];
}
/**
* @param array $class_map
*
* @return string
*/
private function get_random_class( $class_map ) {
do {
$class_name = array_rand( $class_map );
} while ( strpos( $class_map[ $class_name ], '../../vendor_prefixed/wpdesk' ) === false );
return $class_name;
}
/**
*
*/
private function clear_vendor_prefixed() {
$this->delete_all( 'vendor_prefixed' );
}
/**
* @param string $dir
*/
private function delete_all( $dir ) {
foreach ( glob( $dir . '/*' ) as $file ) {
if ( is_dir( $file ) ) {
$this->delete_all( $file );
} else {
unlink( $file );
}
}
rmdir( $dir );
}
}
<?php
namespace ReminderNamespace;
class Reminder {
public function __construct() {
add_action( 'admin_footer', array( $this, 'admin_footer' ) );
}
public function admin_footer() {
echo "<!-- footer reminder -->\n";
}
}
new Reminder();
version: '2.0'
services:
wordpress:
image: wpdesknet/phpunit-woocommerce:0-0
volumes:
- .././:/opt/project
depends_on:
- mysql0
environment:
WORDPRESS_DB_NAME: wptest
WORDPRESS_DB_USER: mysql
WORDPRESS_DB_PASSWORD: mysql
WORDPRESS_DB_HOST: mysql0
wordpress-0-1:
image: wpdesknet/phpunit-woocommerce:0-1
volumes:
- .././:/opt/project
depends_on:
- mysql1
environment:
WORDPRESS_DB_NAME: wptest
WORDPRESS_DB_USER: mysql
WORDPRESS_DB_PASSWORD: mysql
WORDPRESS_DB_HOST: mysql1
wordpress-0-2:
image: wpdesknet/phpunit-woocommerce:0-2
volumes:
- .././:/opt/project
depends_on:
- mysql2
environment:
WORDPRESS_DB_NAME: wptest
WORDPRESS_DB_USER: mysql
WORDPRESS_DB_PASSWORD: mysql
WORDPRESS_DB_HOST: mysql2
wordpress-0-3:
image: wpdesknet/phpunit-woocommerce:0-3
volumes:
- .././:/opt/project
depends_on:
- mysql3
environment:
WORDPRESS_DB_NAME: wptest
WORDPRESS_DB_USER: mysql
WORDPRESS_DB_PASSWORD: mysql
WORDPRESS_DB_HOST: mysql3
wordpress-0-4:
image: wpdesknet/phpunit-woocommerce:0-4
volumes:
- .././:/opt/project
depends_on:
- mysql4
environment:
WORDPRESS_DB_NAME: wptest
WORDPRESS_DB_USER: mysql
WORDPRESS_DB_PASSWORD: mysql
WORDPRESS_DB_HOST: mysql4
wordpress-0-5:
image: wpdesknet/phpunit-woocommerce:0-5
volumes:
- .././:/opt/project
depends_on:
- mysql5
environment:
WORDPRESS_DB_NAME: wptest
WORDPRESS_DB_USER: mysql
WORDPRESS_DB_PASSWORD: mysql
WORDPRESS_DB_HOST: mysql5
wordpress-1-0:
image: wpdesknet/phpunit-woocommerce:1-0
volumes:
- .././:/opt/project
depends_on:
- mysql0
environment:
WORDPRESS_DB_NAME: wptest
WORDPRESS_DB_USER: mysql
WORDPRESS_DB_PASSWORD: mysql
WORDPRESS_DB_HOST: mysql0
wordpress-2-0:
image: wpdesknet/phpunit-woocommerce:2-0
volumes:
- .././:/opt/project
depends_on:
- mysql0
environment:
WORDPRESS_DB_NAME: wptest
WORDPRESS_DB_USER: mysql
WORDPRESS_DB_PASSWORD: mysql
WORDPRESS_DB_HOST: mysql0
wordpress-3-0:
image: wpdesknet/phpunit-woocommerce:3-0
volumes:
- .././:/opt/project
depends_on:
- mysql0
environment:
WORDPRESS_DB_NAME: wptest
WORDPRESS_DB_USER: mysql
WORDPRESS_DB_PASSWORD: mysql
WORDPRESS_DB_HOST: mysql0
wordpress-4-0:
image: wpdesknet/phpunit-woocommerce:4-0
volumes:
- .././:/opt/project
depends_on:
- mysql0
environment:
WORDPRESS_DB_NAME: wptest
WORDPRESS_DB_USER: mysql
WORDPRESS_DB_PASSWORD: mysql
WORDPRESS_DB_HOST: mysql0
mysql0:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: mysql
MYSQL_DATABASE: wptest
MYSQL_USER: mysql
MYSQL_PASSWORD: mysql
mysql1:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: mysql
MYSQL_DATABASE: wptest
MYSQL_USER: mysql
MYSQL_PASSWORD: mysql
mysql2:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: mysql
MYSQL_DATABASE: wptest
MYSQL_USER: mysql
MYSQL_PASSWORD: mysql
mysql3:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: mysql
MYSQL_DATABASE: wptest
MYSQL_USER: mysql
MYSQL_PASSWORD: mysql
mysql4:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: mysql
MYSQL_DATABASE: wptest
MYSQL_USER: mysql
MYSQL_PASSWORD: mysql
mysql5:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: mysql
MYSQL_DATABASE: wptest
MYSQL_USER: mysql
MYSQL_PASSWORD: mysql
<?php
ini_set( 'error_reporting', E_ALL ); // or error_reporting(E_ALL);
ini_set( 'display_errors', '1' );
ini_set( 'display_startup_errors', '1' );
require_once __DIR__ . '/../../vendor/autoload.php';
// disable xdebug backtrace
if ( function_exists( 'xdebug_disable' ) ) {
xdebug_disable();
}
if ( getenv( 'PLUGIN_PATH' ) !== false ) {
define( 'PLUGIN_PATH', getenv( 'PLUGIN_PATH' ) );
} else {
define( 'PLUGIN_PATH', __DIR__ . DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR );
}
require_once( getenv( 'WP_DEVELOP_DIR' ) . '/tests/phpunit/includes/functions.php' );
tests_add_filter( 'muplugins_loaded',
function () {
},
100 );
putenv( 'WP_TESTS_DIR=' . getenv( 'WP_DEVELOP_DIR' ) . '/tests/phpunit' );
require_once( getenv( 'WC_DEVELOP_DIR' ) . '/tests/bootstrap.php' );
do_action( 'plugins_loaded' );
\ No newline at end of file
<?php
/**
* PHPUnit bootstrap file
*/
require_once __DIR__ . '/../../vendor/autoload.php';
WP_Mock::setUsePatchwork( true );
WP_Mock::bootstrap();
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment