Projectstagesdata Documentation

Project Stage Progress Controller Documentation

File: /controllers/projectstagesdataController.php

Purpose: Track and manage progress data for each project stage with multimedia attachments

Last Updated: 2024-12-20

---

๐Ÿ“‹ Overview

Primary Functions

Related Controllers

---

๐Ÿ—„๏ธ Database Tables

Primary Tables

Table NamePurposeKey Columns
projectstagechosseProject-stage assignmentsprojectid, projectstageid, title, descripe, projectstageimages, projectstagefiles
projectProject masterid, name, del, finish
projectstagesStage templatesid, name, is_active
---

๐Ÿ”ง Key Functions

1. savedata()

Purpose: Update stage progress with multimedia attachments

Called By: AJAX POST to ?do=savedata

Parameters:

Business Logic:

for ($i2=1; $i2 <= $projectstagechosseitr; $i2++) { 
    $projectstagechoid = filter_input(INPUT_POST, 'projectstagechoid'.$i2);
    $title = filter_input(INPUT_POST, 'title'.$i2);
    $descripe = filter_input(INPUT_POST, 'descripe'.$i2);
    
    // Handle file uploads
    if ($oldeimages) {
        if (isset($_FILES["projectstageimages".$i2]) && !empty($_FILES["projectstageimages".$i2])) {
            $projectstageimages = uploadfileMultipleWithName("projectstageimages".$i2, '../upload/project', explode(',', $oldeimages));
        }
    }
    
    if ($projectstagechoid) {
        $projectstagechosse = R::load('projectstagechosse',$projectstagechoid);
        $projectstagechosse->title = $title;
        $projectstagechosse->descripe = $descripe;
        $projectstagechosse->projectstageimages = implode(',', $projectstageimages[0]);
        $projectstagechosse->oldnameimages = implode(',', $projectstageimages[1]);
        $projectstagechosse->projectstagefiles = implode(',', $projectstagefiles[0]);
        $projectstagechosse->oldnamefiles = implode(',', $projectstagefiles[1]);
        R::store($projectstagechosse);
    }
}

2. Stage Data Processing

File Management:

$projectstagecho->images = explode(',', $projectstagecho->projectstageimages);
$projectstagefiles = explode(',', $projectstagecho->projectstagefiles);
$oldnamefiles = explode(',', $projectstagecho->oldnamefiles);
$files = [];
for ($i=0; $i < count($projectstagefiles); $i++) { 
    $files[] = ['name' => $oldnamefiles[$i], 'file' => $projectstagefiles[$i]];
}
$projectstagecho->files = $files;

---

๐ŸŽฏ URL Routes & Actions

Action (`?do=`)MethodDescriptionView Template
(empty)GETDisplay project selectionadd.html
showGETList projects with stagesshow.html
editGETEdit stage progressedit.html
detailGETView stage detailsdetail.html
savedataPOSTUpdate stage data (AJAX)JSON response
showajaxPOSTDataTables data source (AJAX)JSON response
---

โš ๏ธ Known Issues & Fixes

Issue 1: Incorrect Table in Delete (Line 263)

Problem: References 'students' table instead of stage data

Cause: Copy-paste error from student controller

Fix: Replace with appropriate stage data table

File: Line 263

Issue 2: Duplicate Session Check (Lines 161-164)

Problem: Project session filtering logic duplicated

Cause: Copy-paste error

Fix: Remove duplicate condition

File: Lines 161-164

---

๐Ÿ“š Related Documentation