/** * AlgorithmPress PHP Component Templates * Collection of PHP component templates for the AlgorithmPress PHP-WASM Builder */ const PHPComponentTemplates = [ // Basic Components { id: 'text-block', name: 'Text Block', description: 'A simple text block with PHP variable support', category: 'Basic', icon: ` `, template: `
`, defaultProps: { content: 'Text content here', className: '' }, properties: [ { name: 'content', label: 'Content', type: 'textarea', description: 'Text content (supports PHP variables)' }, { name: 'className', label: 'CSS Class', type: 'text', description: 'Additional CSS classes' } ] }, { id: 'heading', name: 'Heading', description: 'Heading element with PHP variable support', category: 'Basic', icon: ` `, template: `<{{ tag }} class="heading-component {{ className }}"> `, defaultProps: { tag: 'h2', content: 'Heading', className: '' }, properties: [ { name: 'tag', label: 'Heading Level', type: 'select', options: [ { value: 'h1', label: 'H1' }, { value: 'h2', label: 'H2' }, { value: 'h3', label: 'H3' }, { value: 'h4', label: 'H4' }, { value: 'h5', label: 'H5' }, { value: 'h6', label: 'H6' } ], description: 'Heading level tag' }, { name: 'content', label: 'Content', type: 'text', description: 'Heading text (supports PHP variables)' }, { name: 'className', label: 'CSS Class', type: 'text', description: 'Additional CSS classes' } ] }, { id: 'image', name: 'Image', description: 'Image element with PHP variable support for src', category: 'Basic', icon: ` `, template: `" alt="" class="image-component {{ className }}" style="max-width: {{ maxWidth }}; height: {{ height }};" />`, defaultProps: { src: 'https://via.placeholder.com/300x200', alt: 'Image', maxWidth: '100%', height: 'auto', className: '' }, properties: [ { name: 'src', label: 'Image Source', type: 'text', description: 'URL of the image (supports PHP variables)' }, { name: 'alt', label: 'Alt Text', type: 'text', description: 'Alternative text for the image' }, { name: 'maxWidth', label: 'Max Width', type: 'text', description: 'Maximum width (px, %, etc.)' }, { name: 'height', label: 'Height', type: 'text', description: 'Height (px, auto, etc.)' }, { name: 'className', label: 'CSS Class', type: 'text', description: 'Additional CSS classes' } ] }, { id: 'container', name: 'Container', description: 'A container div for organizing content', category: 'Basic', icon: ` `, template: `
`, defaultProps: { content: '', padding: '20px', margin: '0', backgroundColor: 'transparent', className: '' }, properties: [ { name: 'content', label: 'Content', type: 'textarea', description: 'HTML content for the container' }, { name: 'padding', label: 'Padding', type: 'text', description: 'Padding (px, em, etc.)' }, { name: 'margin', label: 'Margin', type: 'text', description: 'Margin (px, em, etc.)' }, { name: 'backgroundColor', label: 'Background Color', type: 'color', description: 'Background color of the container' }, { name: 'className', label: 'CSS Class', type: 'text', description: 'Additional CSS classes' } ] }, // PHP-Specific Components { id: 'php-code', name: 'PHP Code', description: 'Raw PHP code execution', category: 'PHP', icon: ` `, template: `
`, defaultProps: { code: '// Your PHP code here\n$greeting = "Hello World!";\necho $greeting;', className: '' }, properties: [ { name: 'code', label: 'PHP Code', type: 'code', language: 'php', description: 'PHP code to execute' }, { name: 'className', label: 'CSS Class', type: 'text', description: 'Additional CSS classes' } ] }, { id: 'php-include', name: 'PHP Include', description: 'Include an external PHP file', category: 'PHP', icon: ` `, template: `
`, defaultProps: { filename: 'includes/header.php', className: '' }, properties: [ { name: 'filename', label: 'File Path', type: 'text', description: 'Path to the PHP file to include' }, { name: 'className', label: 'CSS Class', type: 'text', description: 'Additional CSS classes' } ] }, { id: 'php-form', name: 'PHP Form', description: 'Form with PHP processing', category: 'PHP', icon: ` `, template: `
$value) { $formData[$key] = htmlspecialchars($value); } } ?>
{{ formFields }}
{{ successMessage }}
        
      
`, defaultProps: { formFields: `
`, processingCode: `// Validate inputs if (empty($_POST['name'])) { $formErrors['name'] = 'Name is required'; } if (empty($_POST['email'])) { $formErrors['email'] = 'Email is required'; } elseif (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { $formErrors['email'] = 'Email is invalid'; } if (empty($_POST['message'])) { $formErrors['message'] = 'Message is required'; } // If no errors, process form if (empty($formErrors)) { // Here you can save to database, send email, etc. // For example: // mail('your@email.com', 'Contact Form Submission', $_POST['message'], "From: {$_POST['email']}"); }`, successMessage: '

Thank you for your submission! We will get back to you soon.

', formClass: 'needs-validation', submitButtonText: 'Submit', submitButtonClass: 'btn btn-primary', successMessageClass: 'alert alert-success', showDebug: 'false', className: '' }, properties: [ { name: 'formFields', label: 'Form Fields', type: 'textarea', description: 'HTML for form fields' }, { name: 'processingCode', label: 'Processing Code', type: 'code', language: 'php', description: 'PHP code for form processing' }, { name: 'successMessage', label: 'Success Message', type: 'textarea', description: 'Message shown after successful submission' }, { name: 'formClass', label: 'Form Class', type: 'text', description: 'CSS class for the form' }, { name: 'submitButtonText', label: 'Submit Button Text', type: 'text', description: 'Text for the submit button' }, { name: 'submitButtonClass', label: 'Submit Button Class', type: 'text', description: 'CSS class for the submit button' }, { name: 'successMessageClass', label: 'Success Message Class', type: 'text', description: 'CSS class for the success message' }, { name: 'showDebug', label: 'Show Debug', type: 'select', options: [ { value: 'true', label: 'Yes' }, { value: 'false', label: 'No' } ], description: 'Show debug information' }, { name: 'className', label: 'Container Class', type: 'text', description: 'Additional CSS classes for container' } ] }, // Database Components { id: 'sqlite-database', name: 'SQLite Database', description: 'SQLite database operations', category: 'Database', icon: ` `, template: `
exec(' CREATE TABLE IF NOT EXISTS {{ tableName }} ( id INTEGER PRIMARY KEY AUTOINCREMENT, {{ tableSchema }} ) '); {{ customCode }} // Sample query to display data $results = $db->query('SELECT * FROM {{ tableName }} LIMIT {{ limit }}'); // Display results in a table if ($results) { ?> <{{ tableWrapperTag }} class="{{ tableClass }}"> ID query("PRAGMA table_info({{ tableName }})"); while ($col = $tableInfo->fetchArray(SQLITE3_ASSOC)) { if ($col['name'] !== 'id') { $columns[] = $col['name']; echo "" . htmlspecialchars(ucfirst($col['name'])) . ""; } } ?> fetchArray(SQLITE3_ASSOC)) { echo ""; echo "" . htmlspecialchars($row['id']) . ""; foreach ($columns as $column) { echo "" . htmlspecialchars($row[$column] ?? '') . ""; } echo ""; } ?> No results found
'; } // Close the database connection $db->close(); ?> `, defaultProps: { dbName: 'myapp', tableName: 'users', tableSchema: 'name TEXT,\n email TEXT,\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP', customCode: '// Add sample data if table is empty\n$count = $db->querySingle("SELECT COUNT(*) FROM users");\nif ($count === 0) {\n $db->exec(\'\n INSERT INTO users (name, email) VALUES\n ("John Doe", "john@example.com"),\n ("Jane Smith", "jane@example.com"),\n ("Bob Johnson", "bob@example.com")\n \');\n}', limit: 10, tableWrapperTag: 'table', tableClass: 'table table-striped', className: '' }, properties: [ { name: 'dbName', label: 'Database Name', type: 'text', description: 'Name of the SQLite database' }, { name: 'tableName', label: 'Table Name', type: 'text', description: 'Name of the database table' }, { name: 'tableSchema', label: 'Table Schema', type: 'textarea', description: 'SQL schema definition (without ID field)' }, { name: 'customCode', label: 'Custom Code', type: 'code', language: 'php', description: 'Custom PHP code for database operations' }, { name: 'limit', label: 'Results Limit', type: 'number', description: 'Maximum number of results to display' }, { name: 'tableWrapperTag', label: 'Table Wrapper Tag', type: 'select', options: [ { value: 'table', label: 'table' }, { value: 'div', label: 'div' } ], description: 'HTML tag for the table wrapper' }, { name: 'tableClass', label: 'Table Class', type: 'text', description: 'CSS class for the table' }, { name: 'className', label: 'Container Class', type: 'text', description: 'Additional CSS classes for container' } ] }, // Dynamic Content Components { id: 'conditional-content', name: 'Conditional Content', description: 'Show content based on conditions', category: 'Dynamic', icon: ` `, template: `
{{ trueContent }}
{{ falseContent }}
`, defaultProps: { condition: 'isset($_GET["show"]) && $_GET["show"] === "true"', trueContent: '

This content is shown when the condition is true.

', falseContent: '

This content is shown when the condition is false.

', className: '' }, properties: [ { name: 'condition', label: 'Condition', type: 'code', language: 'php', description: 'PHP condition to evaluate' }, { name: 'trueContent', label: 'True Content', type: 'textarea', description: 'Content to show when condition is true' }, { name: 'falseContent', label: 'False Content', type: 'textarea', description: 'Content to show when condition is false' }, { name: 'className', label: 'CSS Class', type: 'text', description: 'Additional CSS classes' } ] }, { id: 'loop', name: 'PHP Loop', description: 'Repeat content with a PHP loop', category: 'Dynamic', icon: ` `, template: `
$item) { ?>
{{ itemTemplate }}
`, defaultProps: { array: '[1, 2, 3, 4, 5]', itemTemplate: '

Item #:

', className: '' }, properties: [ { name: 'array', label: 'Array', type: 'code', language: 'php', description: 'PHP array to iterate over' }, { name: 'itemTemplate', label: 'Item Template', type: 'textarea', description: 'Template for each item (use $index and $item variables)' }, { name: 'className', label: 'CSS Class', type: 'text', description: 'Additional CSS classes' } ] }, // API Components { id: 'api-request', name: 'API Request', description: 'Make an API request using PHP', category: 'API', icon: ` `, template: `
[ 'method' => "{{ method }}", 'header' => "Content-Type: {{ contentType }}\\r\\n" . "Accept: application/json\\r\\n" . {{ customHeaders }} "User-Agent: PHP-WASM/1.0\\r\\n", 'content' => {{ requestBody }}, 'timeout' => {{ timeout }} ] ]; // Create the context $context = stream_context_create($options); // Make the request try { $response = file_get_contents($apiUrl, false, $context); $httpStatus = $http_response_header[0]; // Process the response if ($response !== false) { // Decode JSON response $data = json_decode($response, true); // Display the results based on the selected format if ("{{ displayFormat }}" === "raw") { echo "
";
      echo htmlspecialchars($response);
      echo "
"; } elseif ("{{ displayFormat }}" === "formatted") { echo "
";
      echo htmlspecialchars(json_encode($data, JSON_PRETTY_PRINT));
      echo "
"; } elseif ("{{ displayFormat }}" === "table" && is_array($data)) { // Display as table if data is suitable echo ""; // Handle different data structures if (isset($data[0]) && is_array($data[0])) { // Array of objects echo ""; foreach (array_keys($data[0]) as $key) { echo ""; } echo ""; foreach ($data as $item) { echo ""; foreach ($item as $value) { echo ""; } echo ""; } echo ""; } elseif (is_array($data)) { // Single object echo ""; foreach ($data as $key => $value) { echo ""; echo ""; echo ""; echo ""; } echo ""; } echo "
" . htmlspecialchars($key) . "
" . (is_array($value) ? "[Array]" : htmlspecialchars((string)$value)) . "
" . htmlspecialchars($key) . "" . (is_array($value) ? "[Array]" : htmlspecialchars((string)$value)) . "
"; } elseif ("{{ displayFormat }}" === "custom") { // Custom display format {{ customDisplay }} } } else { echo "
Failed to get response: " . htmlspecialchars($httpStatus) . "
"; } } catch (Exception $e) { echo "
Error: " . htmlspecialchars($e->getMessage()) . "
"; } ?>
`, defaultProps: { apiUrl: 'https://jsonplaceholder.typicode.com/posts/1', method: 'GET', contentType: 'application/json', customHeaders: '', requestBody: '""', timeout: 30, displayFormat: 'formatted', tableClass: 'table table-striped', errorClass: 'alert alert-danger', customDisplay: '// Custom display code\nif (isset($data["title"])) {\n echo "

" . htmlspecialchars($data["title"]) . "

";\n}\nif (isset($data["body"])) {\n echo "

" . nl2br(htmlspecialchars($data["body"])) . "

";\n}', className: '' }, properties: [ { name: 'apiUrl', label: 'API URL', type: 'text', description: 'URL of the API endpoint' }, { name: 'method', label: 'HTTP Method', type: 'select', options: [ { value: 'GET', label: 'GET' }, { value: 'POST', label: 'POST' }, { value: 'PUT', label: 'PUT' }, { value: 'DELETE', label: 'DELETE' } ], description: 'HTTP method for the request' }, { name: 'contentType', label: 'Content Type', type: 'select', options: [ { value: 'application/json', label: 'application/json' }, { value: 'application/x-www-form-urlencoded', label: 'application/x-www-form-urlencoded' }, { value: 'text/plain', label: 'text/plain' } ], description: 'Content type header' }, { name: 'customHeaders', label: 'Custom Headers', type: 'textarea', description: 'Additional HTTP headers (one per line: "Header: value\\r\\n" .)' }, { name: 'requestBody', label: 'Request Body', type: 'code', language: 'php', description: 'Body content for POST, PUT requests' }, { name: 'timeout', label: 'Timeout (seconds)', type: 'number', description: 'Request timeout in seconds' }, { name: 'displayFormat', label: 'Display Format', type: 'select', options: [ { value: 'raw', label: 'Raw Response' }, { value: 'formatted', label: 'Formatted JSON' }, { value: 'table', label: 'Table' }, { value: 'custom', label: 'Custom' } ], description: 'How to display the response' }, { name: 'tableClass', label: 'Table Class', type: 'text', description: 'CSS class for table display format' }, { name: 'errorClass', label: 'Error Class', type: 'text', description: 'CSS class for error messages' }, { name: 'customDisplay', label: 'Custom Display', type: 'code', language: 'php', description: 'Custom PHP code for displaying the response' }, { name: 'className', label: 'Container Class', type: 'text', description: 'Additional CSS classes for container' } ] }, // UI Components { id: 'tabs', name: 'Tabs', description: 'Tabbed interface with PHP content', category: 'UI', icon: ` `, template: `
{{ tab1Content }}
{{ tab2Content }}
{{ tab3Content }}
`, defaultProps: { tabsArray: "[\n 'tab1' => 'Tab 1',\n 'tab2' => 'Tab 2',\n 'tab3' => 'Tab 3'\n]", defaultTab: 'tab1', tab1Content: '

This is the content for Tab 1.

', tab2Content: '

This is the content for Tab 2.

', tab3Content: '

This is the content for Tab 3.

', tabsClass: 'nav nav-tabs', tabItemClass: 'nav-item', tabLinkClass: 'nav-link', activeTabClass: 'nav-link active', tabContentClass: 'tab-content p-3 border border-top-0 rounded-bottom', className: '' }, properties: [ { name: 'tabsArray', label: 'Tabs Array', type: 'code', language: 'php', description: 'PHP array of tab IDs and names' }, { name: 'defaultTab', label: 'Default Tab', type: 'text', description: 'ID of the default active tab' }, { name: 'tab1Content', label: 'Tab 1 Content', type: 'textarea', description: 'Content for Tab 1' }, { name: 'tab2Content', label: 'Tab 2 Content', type: 'textarea', description: 'Content for Tab 2' }, { name: 'tab3Content', label: 'Tab 3 Content', type: 'textarea', description: 'Content for Tab 3' }, { name: 'tabsClass', label: 'Tabs Container Class', type: 'text', description: 'CSS class for tabs container' }, { name: 'tabItemClass', label: 'Tab Item Class', type: 'text', description: 'CSS class for tab items' }, { name: 'tabLinkClass', label: 'Tab Link Class', type: 'text', description: 'CSS class for tab links' }, { name: 'activeTabClass', label: 'Active Tab Class', type: 'text', description: 'CSS class for active tab' }, { name: 'tabContentClass', label: 'Tab Content Class', type: 'text', description: 'CSS class for tab content container' }, { name: 'className', label: 'Container Class', type: 'text', description: 'Additional CSS classes for container' } ] }, // Utility Components { id: 'user-session', name: 'User Session', description: 'Manage PHP sessions for user data', category: 'Utility', icon: ` `, template: `
" . htmlspecialchars(json_encode($_SESSION[$sessionKey], JSON_PRETTY_PRINT)) . ""; } else { echo "

" . htmlspecialchars($_SESSION[$sessionKey]) . "

"; } } else { echo "

Session variable not found.

"; } } elseif ($mode === 'form') { // Show form to modify session data ?>
Session updated successfully!
"; } else { echo "
Invalid JSON format.
"; } } catch (Exception $e) { echo "
Error: " . htmlspecialchars($e->getMessage()) . "
"; } } else { $_SESSION[$sessionKey] = $newValue; echo "
Session updated successfully!
"; } } } elseif ($mode === 'clear') { // Clear the session if (isset($_SESSION[$sessionKey])) { unset($_SESSION[$sessionKey]); echo "
Session variable cleared.
"; } else { echo "
Session variable not found.
"; } } ?> `, defaultProps: { mode: 'display', sessionKey: 'user_data', initialValue: '[]', customSessionCode: '// Custom session code here\n// Example: track page visits\nif (!isset($_SESSION["page_visits"])) {\n $_SESSION["page_visits"] = 0;\n}\n$_SESSION["page_visits"]++;', formLabel: 'Session Data:', successClass: 'alert alert-success mt-3', errorClass: 'alert alert-danger mt-3', notFoundClass: 'alert alert-warning', className: '' }, properties: [ { name: 'mode', label: 'Mode', type: 'select', options: [ { value: 'display', label: 'Display' }, { value: 'form', label: 'Edit Form' }, { value: 'clear', label: 'Clear' } ], description: 'Operation mode for session data' }, { name: 'sessionKey', label: 'Session Key', type: 'text', description: 'Name of the session variable' }, { name: 'initialValue', label: 'Initial Value', type: 'code', language: 'php', description: 'Initial value if session is not set' }, { name: 'customSessionCode', label: 'Custom Session Code', type: 'code', language: 'php', description: 'Custom PHP code for session operations' }, { name: 'formLabel', label: 'Form Label', type: 'text', description: 'Label for the edit form' }, { name: 'successClass', label: 'Success Message Class', type: 'text', description: 'CSS class for success messages' }, { name: 'errorClass', label: 'Error Message Class', type: 'text', description: 'CSS class for error messages' }, { name: 'notFoundClass', label: 'Not Found Message Class', type: 'text', description: 'CSS class for not found messages' }, { name: 'className', label: 'Container Class', type: 'text', description: 'Additional CSS classes for container' } ] } ]; // Export the components if (typeof module !== 'undefined' && module.exports) { module.exports = PHPComponentTemplates; }