Initial commit: Open sourcing all of the Maple Open Technologies code.

This commit is contained in:
Bartlomiej Mika 2025-12-02 14:33:08 -05:00
commit 755d54a99d
2010 changed files with 448675 additions and 0 deletions

View file

@ -0,0 +1,745 @@
# MaplePress Plugin - Getting Started Guide
This guide will walk you through setting up the MaplePress plugin for both local development and production release. No prior WordPress experience required!
---
## Table of Contents
1. [What is WordPress?](#what-is-wordpress)
2. [Local Development Setup](#local-development-setup)
3. [Production Release Workflow](#production-release-workflow)
4. [Common Tasks](#common-tasks)
5. [Troubleshooting](#troubleshooting)
---
## What is WordPress?
**WordPress** is a content management system (CMS) written in PHP. It powers over 40% of websites on the internet.
**WordPress Plugin** = A piece of software that adds specific functionality to a WordPress site. Our MaplePress plugin adds cloud-powered search functionality.
**Key WordPress Concepts:**
- **wp-admin** = WordPress admin dashboard (where you configure plugins)
- **wp-config.php** = WordPress configuration file (like a .env file for WordPress)
- **wp-content/plugins/** = Directory where all plugins are stored
- **Activation** = Turning on a plugin in WordPress
- **Settings Page** = Admin interface where users configure your plugin
---
## Local Development Setup
### Prerequisites
Make sure you have:
- Docker running
- Task (taskfile.dev) installed
- MaplePress backend running
### Step 1: Start WordPress
```bash
# From the infrastructure directory
cd cloud/infrastructure/development
# Start all services (includes WordPress)
task dev:start
# OR if using docker-compose directly:
docker-compose -f docker-compose.dev.yml up -d
```
**What this does:**
- Starts MariaDB (WordPress database) on port 3306
- Starts WordPress on port 8081
- Starts Cassandra cluster (3 nodes) for backend
- Starts Redis for caching
- Starts Meilisearch for search indexing
- Starts SeaweedFS for object storage
- Mounts your plugin directory into WordPress
**Note:** This starts the entire infrastructure, not just WordPress. The `task dev:start` command will:
1. Start all Docker containers
2. Wait for services to be healthy (this can take 1-2 minutes)
3. Initialize Cassandra keyspaces
4. Show you the status of all running services
**Access WordPress:**
- Frontend: http://localhost:8081
- Admin: http://localhost:8081/wp-admin
**Other Services (for backend development):**
- Backend API: http://localhost:8000 (when you start maplepress-backend)
- Meilisearch: http://localhost:7700
- SeaweedFS: http://localhost:9333
### Step 2: Initial WordPress Setup (First Time Only)
If this is your first time, WordPress will ask you to set it up:
1. Open http://localhost:8081 in your browser
2. Select language (English)
3. Click "Let's go!"
4. Database settings are already configured (from docker-compose.dev.yml):
- Database Name: `wordpress`
- Username: `wordpress`
- Password: `wordpress`
- Database Host: `mariadb` (the container name)
- Table Prefix: `wp_` (leave default)
5. Click "Submit" then "Run the installation"
6. Create admin user:
- Site Title: "MaplePress Development"
- Username: `admin` (or your choice)
- Password: (choose a strong password)
- Email: your email
7. Click "Install WordPress"
8. Login with your admin credentials
**You only need to do this once.** WordPress saves everything in the database.
### Step 3: Configure Plugin for Local Development
```bash
# From the plugin directory
cd native/wordpress/maplepress-plugin
# Run the setup command
task dev:setup
```
**What this does:**
1. Creates `wp-config.local.php` with `MAPLEPRESS_API_URL` set to `http://localhost:8000`
2. Modifies WordPress `wp-config.php` to load your local config
3. Pre-configures the plugin to connect to your local backend
**Output:**
```
Created wp-config.local.php
Added loader to wp-config.php
Local development environment configured
API URL pre-configured to http://localhost:8000
Go to Settings > MaplePress to enter your API key
```
### Step 4: Activate the Plugin in WordPress
1. Go to http://localhost:8081/wp-admin/plugins.php
2. Find "MaplePress" in the plugin list
3. Click "Activate"
4. You'll be redirected to Settings → MaplePress
### Step 5: Enter Your API Key
1. You should now be on the MaplePress settings page
2. You'll see:
- **API URL** - Pre-filled with `http://localhost:8000`
- **API Key** - Empty (you need to enter this)
3. Get your API key:
- If you don't have one yet, follow the backend setup guide:
- See `cloud/maplepress-backend/GETTING-STARTED.md` → "Create Test Data"
- Or use the quick commands below:
```bash
# Register a user and create a site (returns API key)
# See backend GETTING-STARTED.md for detailed instructions
curl -X POST http://localhost:8000/api/v1/register \
-H "Content-Type: application/json" \
-d '{"email":"test@example.com","password":"TestPassword123!","name":"Test User","tenant_name":"Test Org","tenant_slug":"test-org"}'
# Then create a site (save the API key from response)
curl -X POST http://localhost:8000/api/v1/sites \
-H "Authorization: JWT YOUR_TOKEN_HERE" \
-H "Content-Type: application/json" \
-d '{"domain":"localhost:8081","site_url":"http://localhost:8081","plan_tier":"free"}'
```
4. Paste the API key
5. Click "Save Settings & Verify Connection"
**If successful:**
- Green message: "✓ API connection verified successfully!"
- You'll see your site details (Site ID, Tenant ID, Domain, Plan)
- Status shows "Active"
**If it fails:**
- Red error message explaining what went wrong
- Check that backend is running: `curl http://localhost:8000/health`
- Check API key is valid
- See backend docs: `cloud/maplepress-backend/GETTING-STARTED.md`
### Step 6: Start Developing
Your local development environment is now ready!
**Making code changes:**
Option 1: Auto-sync (Recommended)
```bash
cd native/wordpress/maplepress-plugin
# Watch for changes and auto-sync
task watch
```
This will automatically copy changes to WordPress whenever you save a file.
Option 2: Manual sync
```bash
# After making changes, sync manually
task sync
```
Option 3: Direct editing (Advanced)
- Plugin is mounted as a volume, so changes are usually reflected immediately
- Just refresh your browser after editing PHP files
- Some changes require plugin reactivation
**Viewing logs:**
```bash
# See WordPress debug logs
task logs
# Access WordPress container shell
task shell
```
---
## Production Release Workflow
### Understanding Production vs Development
**Development:**
- API URL: `http://localhost:8000` (your local backend)
- API Key: Your test API key
- Config file: `wp-config.local.php` (git-ignored)
**Production:**
- API URL: `https://getmaplepress.ca` (production backend)
- API Key: User enters their own API key from dashboard
- Config file: None (users configure via settings)
### Step 1: Prepare for Release
**Clean up local config:**
```bash
cd native/wordpress/maplepress-plugin
# Remove local development settings
task dev:reset
```
This removes:
- `wp-config.local.php` (local config file)
- Loader code from WordPress `wp-config.php`
**Verify production behavior:**
1. Deactivate the plugin in WordPress
2. Delete plugin options: Settings → MaplePress → Delete (if there's an option)
3. Reactivate the plugin
4. Go to Settings → MaplePress
5. Both API URL and API Key should be **empty**
This is what users will see when they install your plugin.
### Step 2: Build Production Zip
```bash
cd native/wordpress/maplepress-plugin
# Build the distribution package
task build
```
**What this does:**
1. Creates `dist/` directory
2. Copies all plugin files EXCEPT:
- `wp-config.local.php` (local dev config)
- `.git/` (version control)
- `node_modules/` (dependencies)
- `Taskfile.yml` (development tool)
- `composer.json/lock` (PHP dependencies)
- `.gitignore` (git config)
- `dist/` (avoid nested builds)
3. Creates `dist/maplepress-plugin.zip`
**Output:**
```
Plugin built at dist/maplepress-plugin.zip
Local dev files excluded from build
```
### Step 3: Test Production Build Locally (Optional but Recommended)
Before releasing, test the production build:
```bash
# Extract and verify contents
cd dist
unzip -l maplepress-plugin.zip
# Should NOT contain:
# - wp-config.local.php
# - Taskfile.yml
# - composer.json
# - .gitignore
# - .git/
# Should contain:
# - maplepress-plugin.php (main file)
# - includes/ (PHP classes)
# - assets/ (CSS/JS)
# - readme.txt (WordPress.org readme)
# - CHANGELOG.md, TESTING.md, etc.
```
**Test installation:**
1. Copy the zip to a clean WordPress install (or delete current plugin)
2. Go to Plugins → Add New → Upload Plugin
3. Choose `dist/maplepress-plugin.zip`
4. Click "Install Now"
5. Activate the plugin
6. Verify settings page shows:
- Empty API URL field ✓
- Empty API Key field ✓
- Placeholder: `https://getmaplepress.ca`
### Step 4: Release to WordPress.org
**WordPress Plugin Directory Submission:**
1. **Create WordPress.org Account**
- Go to https://wordpress.org/support/register.php
- Create an account (you'll need this to submit plugins)
2. **Submit Plugin for Review**
- Go to https://wordpress.org/plugins/developers/add/
- Upload your `dist/maplepress-plugin.zip`
- Wait for manual review (can take 2-14 days)
- You'll receive an email with SVN repository access
3. **Using SVN (Subversion)**
WordPress.org uses SVN, not Git:
```bash
# Checkout your plugin's SVN repository
# (URL provided in approval email)
svn co https://plugins.svn.wordpress.org/maplepress YOUR_LOCAL_DIR
cd YOUR_LOCAL_DIR
# Directory structure:
# /trunk/ - Development version
# /tags/ - Released versions (1.0.0, 1.0.1, etc.)
# /assets/ - Screenshots, banners, icons
```
4. **Initial Release (Version 1.0.0)**
```bash
# Extract your plugin to /trunk/
cd trunk
unzip ../../dist/maplepress-plugin.zip
mv maplepress-plugin/* .
rmdir maplepress-plugin
# Add files to SVN
svn add --force * --auto-props --parents --depth infinity -q
# Commit to trunk
svn ci -m "Initial release v1.0.0"
# Create a tag for this version
cd ..
svn cp trunk tags/1.0.0
svn ci -m "Tagging version 1.0.0"
```
5. **Add Screenshots and Assets**
```bash
# Add to /assets/ directory
cd assets
# Required files:
# - icon-128x128.png (plugin icon)
# - icon-256x256.png (retina icon)
# - screenshot-1.png (settings page)
# - screenshot-2.png (search widget)
# - banner-772x250.png (plugin page banner)
# - banner-1544x500.png (retina banner)
svn add *.png
svn ci -m "Add plugin assets"
```
### Step 5: Version Updates
When releasing a new version:
```bash
# 1. Update version in plugin files
# Edit maplepress-plugin.php:
# Version: 1.0.1
# Edit readme.txt:
# Stable tag: 1.0.1
# 2. Build new release
cd native/wordpress/maplepress-plugin
task build
# 3. Update SVN trunk
cd YOUR_SVN_DIR/trunk
# Replace files with new build
unzip ../../dist/maplepress-plugin.zip
mv maplepress-plugin/* .
# Commit to trunk
svn stat # See what changed
svn ci -m "Update to version 1.0.1"
# 4. Create new tag
cd ..
svn cp trunk tags/1.0.1
svn ci -m "Tagging version 1.0.1"
```
WordPress.org will automatically update users' plugins within 24 hours.
---
## Common Tasks
### Switch Between Local Dev and Production Testing
**Enable local development:**
```bash
task dev:setup
# Restart WordPress
docker-compose -f ../../cloud/infrastructure/development/docker-compose.dev.yml restart wordpress
```
**Test production behavior:**
```bash
task dev:reset
# Deactivate/reactivate plugin in WordPress
```
### View Plugin in WordPress
- **Plugins page:** http://localhost:8081/wp-admin/plugins.php
- **Settings page:** http://localhost:8081/wp-admin/options-general.php?page=maplepress
### Check If Plugin Is Active
```bash
# From container
docker exec maple-wordpress-dev wp plugin list
# Should show:
# name status
# maplepress active
```
### Manually Inspect Database
```bash
# Connect to MariaDB
docker exec -it maple-mariadb-dev mysql -u wordpress -pwordpress wordpress
# Check plugin options
SELECT * FROM wp_options WHERE option_name = 'maplepress_settings';
# Exit
exit
```
### Reset WordPress Completely
```bash
# Stop containers
docker-compose -f docker-compose.dev.yml down
# Delete volumes (WARNING: Deletes all data)
docker volume rm maple-wordpress-dev
docker volume rm maple-mariadb-dev
# Start fresh
docker-compose -f docker-compose.dev.yml up -d
# You'll need to go through WordPress setup again
```
### Check Plugin Files in Container
```bash
# Access container shell
task shell
# Inside container:
cd /var/www/html/wp-content/plugins/maplepress-plugin
ls -la
# Check if wp-config.local.php exists
cat wp-config.local.php # Should show MAPLEPRESS_API_URL
# Check WordPress config has loader
grep -A2 "MaplePress local" /var/www/html/wp-config.php
```
---
## Troubleshooting
### "Task does not exist" Error
**Error:** `task: Task "dev" does not exist`
**Solution:** The correct command is `task dev:start` (not `task dev`)
```bash
cd cloud/infrastructure/development
task dev:start # ✓ Correct
# NOT: task dev # ✗ Wrong
```
**Available infrastructure tasks:**
- `task dev:start` - Start all services
- `task dev:stop` - Stop all services
- `task dev:status` - Show service status
- `task dev:restart` - Restart all services
- `task dev:logs` - View logs
- `task dev:clean` - Remove all data (destructive)
### "Cannot connect to API" Error
**Possible causes:**
1. **Backend not running**
```bash
# Check if backend is up
curl http://localhost:8000/health
# Should return: {"status":"healthy"}
# If not, start backend:
cd cloud/maplepress-backend
task dev
# For detailed setup, see: cloud/maplepress-backend/GETTING-STARTED.md
```
2. **Wrong API URL**
- Check Settings → MaplePress
- For local dev, should be: `http://localhost:8000`
- Not `localhost:8081` (that's WordPress)
- Not `https://` (local dev is http)
3. **Invalid API Key**
- API key must exist in backend database
- Check backend logs for authentication errors
### "Plugin not showing up"
1. **Check plugin directory:**
```bash
docker exec maple-wordpress-dev ls -la /var/www/html/wp-content/plugins/
```
Should see `maplepress-plugin/`
2. **Check main plugin file exists:**
```bash
docker exec maple-wordpress-dev ls -la /var/www/html/wp-content/plugins/maplepress-plugin/maplepress-plugin.php
```
3. **Check plugin header:**
```bash
docker exec maple-wordpress-dev head -n 15 /var/www/html/wp-content/plugins/maplepress-plugin/maplepress-plugin.php
```
Should show "Plugin Name: MaplePress"
4. **Restart WordPress:**
```bash
docker-compose -f docker-compose.dev.yml restart wordpress
```
### "API URL not pre-filled" in Local Dev
1. **Check local config exists:**
```bash
cat wp-config.local.php
```
Should show `define('MAPLEPRESS_API_URL', 'http://localhost:8000');`
2. **Check WordPress config has loader:**
```bash
docker exec maple-wordpress-dev grep -A2 "MaplePress" /var/www/html/wp-config.php
```
Should show loader code
3. **Re-run setup:**
```bash
task dev:reset
task dev:setup
```
4. **Deactivate and reactivate plugin:**
- Go to http://localhost:8081/wp-admin/plugins.php
- Click "Deactivate" under MaplePress
- Click "Activate"
- Check settings page again
### "Changes not showing up"
**For PHP changes:**
1. **Deactivate and reactivate plugin**
- WordPress caches plugin code
2. **Or sync manually:**
```bash
task sync
```
3. **Or restart WordPress:**
```bash
docker-compose -f ../../cloud/infrastructure/development/docker-compose.dev.yml restart wordpress
```
**For CSS/JS changes:**
- Hard refresh browser: Cmd+Shift+R (Mac) or Ctrl+Shift+R (Windows)
- Or clear browser cache
### "Permission denied" Errors
```bash
# Fix plugin directory permissions
docker exec maple-wordpress-dev chown -R www-data:www-data /var/www/html/wp-content/plugins/maplepress-plugin
# Restart WordPress
docker-compose -f docker-compose.dev.yml restart wordpress
```
### WordPress Shows "Fatal Error"
**Check PHP error log:**
```bash
docker exec maple-wordpress-dev tail -f /var/www/html/wp-content/debug.log
```
**Enable WordPress debug mode:**
```bash
docker exec maple-wordpress-dev bash -c "
grep -q 'WP_DEBUG' /var/www/html/wp-config.php ||
sed -i \"/That's all, stop editing/i define('WP_DEBUG', true);\ndefine('WP_DEBUG_LOG', true);\ndefine('WP_DEBUG_DISPLAY', false);\" /var/www/html/wp-config.php
"
```
**Syntax error in PHP:**
- Check PHP syntax: `php -l includes/class-maplepress-admin.php`
- Look for missing semicolons, quotes, or brackets
### "Can't access wp-admin"
```bash
# Reset admin password
docker exec maple-wordpress-dev wp user update admin --user_pass=newpassword
```
### Build Includes Local Dev Files
**Verify build excludes:**
```bash
cd dist
unzip -l maplepress-plugin.zip | grep "wp-config.local"
# Should return nothing
unzip -l maplepress-plugin.zip | grep "Taskfile"
# Should return nothing
```
**If they're included, rebuild:**
```bash
task clean
task build
```
---
## Quick Reference
### Commands Cheat Sheet
```bash
# Infrastructure
cd cloud/infrastructure/development
task dev:start # Start all services
task dev:stop # Stop all services
task dev:status # Show service status
task dev:logs # View logs
# Plugin Development
cd native/wordpress/maplepress-plugin
task dev:setup # Set up local dev (first time)
task dev:reset # Reset to production config
task sync # Sync changes to WordPress
task watch # Auto-sync on file changes
task logs # View WordPress logs
task shell # Access WordPress container
# Production Release
task build # Build distribution zip
task clean # Clean build artifacts
# Testing
task lint # Check code style
task test # Run tests
```
### URLs
- WordPress Frontend: http://localhost:8081
- WordPress Admin: http://localhost:8081/wp-admin
- Plugin Settings: http://localhost:8081/wp-admin/options-general.php?page=maplepress
- Backend API: http://localhost:8000
### WordPress CLI (inside container)
```bash
# Access container
docker exec -it maple-wordpress-dev /bin/bash
# WordPress CLI commands
wp plugin list # List plugins
wp plugin activate maplepress
wp plugin deactivate maplepress
wp option get maplepress_settings
wp option delete maplepress_settings
wp user list # List users
wp db query "SELECT * FROM wp_options WHERE option_name LIKE 'maplepress%'"
```
---
## Next Steps
1. **For Development:**
- Follow "Local Development Setup"
- Run `task dev:setup`
- Start coding!
2. **For First Release:**
- Follow "Production Release Workflow"
- Build with `task build`
- Submit to WordPress.org
3. **Learn More:**
- WordPress Plugin Handbook: https://developer.wordpress.org/plugins/
- WordPress Coding Standards: https://developer.wordpress.org/coding-standards/
- Plugin Directory Guidelines: https://developer.wordpress.org/plugins/wordpress-org/
---
**Still stuck? Check:**
- `TESTING.md` - Testing scenarios and checklist
- `CHANGELOG.md` - Recent changes and updates
- Backend docs: `cloud/maplepress-backend/GETTING-STARTED.md` and `API.md`