xref: /plugin/deletepageguard/build/create-dist.php (revision 9a383d51b90310842e2a3f0f9d693178d0875b32)
1*9a383d51SJohann Duscher<?php
2*9a383d51SJohann Duscher/**
3*9a383d51SJohann Duscher * Distribution Creator for Delete Page Guard Plugin
4*9a383d51SJohann Duscher *
5*9a383d51SJohann Duscher * Creates a distribution directory for DokuWiki plugin installation.
6*9a383d51SJohann Duscher * You can manually ZIP this directory later for upload.
7*9a383d51SJohann Duscher *
8*9a383d51SJohann Duscher * @license GPL 2 (https://www.gnu.org/licenses/gpl-2.0.html)
9*9a383d51SJohann Duscher * @author  Johann Duscher <jonny.dee@posteo.net>
10*9a383d51SJohann Duscher */
11*9a383d51SJohann Duscher
12*9a383d51SJohann Duscher// Change to project root directory
13*9a383d51SJohann Duscherchdir(__DIR__ . '/..');
14*9a383d51SJohann Duscher
15*9a383d51SJohann Duscher// Load version information
16*9a383d51SJohann Duscher$version_info = include 'version.php';
17*9a383d51SJohann Duscher$version = $version_info['version'];
18*9a383d51SJohann Duscher$distDir = 'dist/deletepageguard-' . $version;
19*9a383d51SJohann Duscher$pluginDirName = 'deletepageguard'; // Must match 'base' in plugin.info.txt
20*9a383d51SJohann Duscher
21*9a383d51SJohann Duscherecho "Creating distribution package for version $version...\n";
22*9a383d51SJohann Duscher
23*9a383d51SJohann Duscher// Files and directories to include
24*9a383d51SJohann Duscher$files = [
25*9a383d51SJohann Duscher    'action.php',
26*9a383d51SJohann Duscher    'admin.php',
27*9a383d51SJohann Duscher    'plugin.info.txt',
28*9a383d51SJohann Duscher    'LICENSE.md',
29*9a383d51SJohann Duscher    'README.md',
30*9a383d51SJohann Duscher    'CHANGELOG.md',
31*9a383d51SJohann Duscher    'conf/',
32*9a383d51SJohann Duscher    'lang/'
33*9a383d51SJohann Duscher];
34*9a383d51SJohann Duscher
35*9a383d51SJohann Duscher// Create dist directory structure
36*9a383d51SJohann Duscher$targetDir = $distDir . '/' . $pluginDirName;
37*9a383d51SJohann Duscherif (!is_dir($targetDir)) {
38*9a383d51SJohann Duscher    mkdir($targetDir, 0755, true);
39*9a383d51SJohann Duscher}
40*9a383d51SJohann Duscher
41*9a383d51SJohann Duscher// Copy files to distribution directory
42*9a383d51SJohann Duscherfunction copyFileOrDir($source, $dest) {
43*9a383d51SJohann Duscher    // Normalize paths for Windows
44*9a383d51SJohann Duscher    $source = rtrim(str_replace('\\', '/', $source), '/');
45*9a383d51SJohann Duscher    $dest = rtrim(str_replace('\\', '/', $dest), '/');
46*9a383d51SJohann Duscher
47*9a383d51SJohann Duscher    if (is_file($source)) {
48*9a383d51SJohann Duscher        $destDir = dirname($dest);
49*9a383d51SJohann Duscher        if (!is_dir($destDir)) {
50*9a383d51SJohann Duscher            mkdir($destDir, 0755, true);
51*9a383d51SJohann Duscher        }
52*9a383d51SJohann Duscher        copy($source, $dest);
53*9a383d51SJohann Duscher        return true;
54*9a383d51SJohann Duscher    } elseif (is_dir($source)) {
55*9a383d51SJohann Duscher        if (!is_dir($dest)) {
56*9a383d51SJohann Duscher            mkdir($dest, 0755, true);
57*9a383d51SJohann Duscher        }
58*9a383d51SJohann Duscher
59*9a383d51SJohann Duscher        $sourceLen = strlen($source);
60*9a383d51SJohann Duscher        $iterator = new RecursiveIteratorIterator(
61*9a383d51SJohann Duscher            new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS),
62*9a383d51SJohann Duscher            RecursiveIteratorIterator::SELF_FIRST
63*9a383d51SJohann Duscher        );
64*9a383d51SJohann Duscher
65*9a383d51SJohann Duscher        foreach ($iterator as $fileObj) {
66*9a383d51SJohann Duscher            // Normalize and get relative path
67*9a383d51SJohann Duscher            $currentPath = str_replace('\\', '/', $fileObj->getPathname());
68*9a383d51SJohann Duscher            $relativePath = substr($currentPath, $sourceLen + 1);
69*9a383d51SJohann Duscher            $destPath = $dest . '/' . $relativePath;
70*9a383d51SJohann Duscher
71*9a383d51SJohann Duscher            if ($fileObj->isDir()) {
72*9a383d51SJohann Duscher                if (!is_dir($destPath)) {
73*9a383d51SJohann Duscher                    mkdir($destPath, 0755, true);
74*9a383d51SJohann Duscher                }
75*9a383d51SJohann Duscher            } elseif ($fileObj->isFile()) {
76*9a383d51SJohann Duscher                $destDir = dirname($destPath);
77*9a383d51SJohann Duscher                if (!is_dir($destDir)) {
78*9a383d51SJohann Duscher                    mkdir($destDir, 0755, true);
79*9a383d51SJohann Duscher                }
80*9a383d51SJohann Duscher                copy($currentPath, $destPath);
81*9a383d51SJohann Duscher            }
82*9a383d51SJohann Duscher        }
83*9a383d51SJohann Duscher        return true;
84*9a383d51SJohann Duscher    }
85*9a383d51SJohann Duscher    return false;
86*9a383d51SJohann Duscher}
87*9a383d51SJohann Duscher
88*9a383d51SJohann Duscher// Copy all files
89*9a383d51SJohann Duscher$fileCount = 0;
90*9a383d51SJohann Duscherforeach ($files as $file) {
91*9a383d51SJohann Duscher    if (!file_exists($file)) {
92*9a383d51SJohann Duscher        echo "⚠ Warning: File not found: $file\n";
93*9a383d51SJohann Duscher        continue;
94*9a383d51SJohann Duscher    }
95*9a383d51SJohann Duscher
96*9a383d51SJohann Duscher    $destPath = $targetDir . '/' . $file;
97*9a383d51SJohann Duscher    if (copyFileOrDir($file, $destPath)) {
98*9a383d51SJohann Duscher        echo "✓ Copied: $file\n";
99*9a383d51SJohann Duscher        $fileCount++;
100*9a383d51SJohann Duscher    }
101*9a383d51SJohann Duscher}
102*9a383d51SJohann Duscher
103*9a383d51SJohann Duscherecho "\n✅ Successfully created distribution directory!\n";
104*9a383d51SJohann Duscherecho "�� Location: $distDir/\n";
105*9a383d51SJohann Duscherecho "�� Plugin directory: $pluginDirName/\n";
106*9a383d51SJohann Duscherecho "�� Files copied: $fileCount\n";
107*9a383d51SJohann Duscher
108*9a383d51SJohann Duscherecho "\n�� Next steps:\n";
109*9a383d51SJohann Duscherecho "   1. Review the contents in: $distDir/\n";
110*9a383d51SJohann Duscherecho "   2. Create ZIP file manually:\n";
111*9a383d51SJohann Duscherecho "      cd dist && zip -r deletepageguard-$version.zip deletepageguard-$version/\n";
112*9a383d51SJohann Duscherecho "   3. Upload to GitHub Release or DokuWiki Extension Manager\n";
113