Upload markdown files and organize them in a tree structure
⚠️ Warning: This action cannot be undone!
controllers/pages.php
pages
public/impOpreation.php
library/uploadImages.php
YoutubeLink models
initiateStaticSessionCommingWithCurl.php
upload/pages/ directory
uploadImages library
pages
CREATE TABLE IF NOT EXISTS pages (
id int(11) NOT NULL AUTO_INCREMENT,
title varchar(255) NOT NULL, -- Arabic title
titleEn varchar(255) NOT NULL, -- English title
contentOrExternalLink tinyint(4) NOT NULL, -- 0=content, 1=external link
externalLink varchar(500) NOT NULL, -- External URL
openTarget tinyint(4) NOT NULL, -- 0=new tab, 1=same tab
content text NOT NULL, -- Arabic HTML content
contentEn text NOT NULL, -- English HTML content
isActive tinyint(4) NOT NULL, -- 0=inactive, 1=active
image varchar(255) NOT NULL, -- Image filename
sysDate datetime NOT NULL, -- Creation/update timestamp
userid int(11) NOT NULL, -- User who created/updated
isdel tinyint(4) NOT NULL, -- Deletion flag (not used)
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
youtubelink - YouTube video associations (referenced but not directly joined)
id
do - Action parameter (empty, show, edit, deleteFinaly)
id - Page ID for edit/delete operations
curlpost - Flag for API mode responses
$_POST['title039;] // Arabic title
$_POST['titleEn039;] // English title
$_POST['contentOrExternalLink039;] // 0=content, 1=link
$_POST['content039;] // Arabic content (if type=0)
">$_POST['contentEn039;] // English content (if type=0)
$_POST['externalLink039;] // External URL (if type=1)
$_POST['openTarget039;] // Link target (if type=1)
$_POST['isActive039;] // Active status
$_FILES['logo039;] // Page image upload
">$_POST['oldlogo039;] // Existing image (for updates)
pagesview/add.html - Add page form
pagesview/show.html - List all pages
pagesview/edit.html - Edit page form
succes.html - Success message
error.html - Error message
curlpost=1):
{
"status": 1, // 1=success, 2=error
"message": "تمت العمليه بنجاح",
"message_en": "Success"
}
location:?do=sucess
location:?do=error
-- Add new page
INSERT INTO pages (
title, titleEn, contentOrExternalLink, content, contentEn,
externalLink, openTarget, isActive, image, sysDate, userid, isdel
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0)
-- List all active pages
SELECT * FROM pages WHERE isdel = 0
-- Load single page for editing
SELECT * FROM pages WHERE id = ?
-- Get all YouTube links (for show page)
SELECT * FROM youtubelink
-- Update existing page
UPDATE pages SET
title = ?, titleEn = ?, contentOrExternalLink = ?,
content = ?, contentEn = ?, externalLink = ?,
openTarget = ?, isActive = ?, image = ?,
sysDate = ?, userid = ?, isdel = 0
WHERE id = ?
-- Hard delete (with file cleanup)
DELETE FROM pages WHERE id = ?
-- Also: unlink('../upload/pages/039; . $pages->image)
SELECT * FROM pages WHERE isdel = 0
SELECT * FROM pages WHERE id = ?
INSERT INTO pages (...) VALUES (...)
UPDATE pages SET ... WHERE id = ?
DELETE FROM pages WHERE id = ?
SELECT * FROM pages WHERE isdel = 0 AND isActive = 1
/api/v1/pages
/pages - Static page management
/pages/active - Only active pages
/pages/{id}/content - Get page content by language
{
"title": "عن الشركة",
"title_en": "About Us",
"content_type": "internal", // "internal" or "external"
"content": "<p>محتوى الصفحة</p>",
"content_en": "<p>Page content</p>",
"external_link": null,
"open_target": null,
"is_active": true,
"image": "base64_encoded_image_data"
}
{
"success": true,
"data": {
"id": 1,
"title": "عن الشركة",
"title_en": "About Us",
"content_type": "internal",
"content": "<p>محتوى الصفحة</p>",
"content_en": "<p>Page content</p>",
"external_link": null,
"open_target": null,
"is_active": true,
"image_url": "/upload/pages/page_1.jpg",
"created_at": "2024-01-20 10:30:00",
"created_by": 1,
"youtube_links": []
}
}
200 OK - Successful GET, PUT
201 Created - Successful POST
204 No Content - Successful DELETE
400 Bad Request - Invalid input
401 Unauthorized - Authentication required
404 Not Found - Page not found
500 Internal Server Error - Server error
{
"success": false,
"error": {
"code": "PAGE_NOT_FOUND",
"message": "Page with ID 123 not found",
"details": {}
}
}
impOpreation.php
$_SESSION['userid']
pages:read - View pages
pages:write - Create/update pages
pages:delete - Delete pages
pages:manage - Full page management
Accept: application/json header
api_mode parameter)
curl -X POST http://erp.local/api/v1/pages \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "سياسة الخصوصية",
"title_en": "Privacy Policy",
"content_type": "internal",
"content": "<h1>سياسة الخصوصية</h1><p>...</p>",
"content_en": "<h1>Privacy Policy</h1><p>...</p>",
"is_active": true
}'
curl -X POST http://erp.local/api/v1/pages \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "موقعنا الخارجي",
"title_en": "Our External Site",
"content_type": "external",
"external_link": "https://example.com",
"open_target": "new_tab",
"is_active": true
}'
curl -X GET http://erp.local/api/v1/pages/active \
-H "Authorization: Bearer YOUR_TOKEN"
curl -X PATCH http://erp.local/api/v1/pages/5/status \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"is_active": false
}'
/api/v1/pages