Changeset 3422911
- Timestamp:
- 12/18/2025 01:32:40 PM (3 months ago)
- Location:
- edu-results-publishing
- Files:
-
- 40 added
- 1 deleted
- 29 edited
- 1 copied
-
assets/banner-1544x500.png (added)
-
assets/banner-772x250.png (modified) (1 prop) (previous)
-
assets/icon-128x128.png (modified) (1 prop) (previous)
-
assets/icon-256x256.png (deleted)
-
assets/screenshot-1.png (modified) (1 prop) (previous)
-
assets/screenshot-10.png (added)
-
assets/screenshot-11.png (added)
-
assets/screenshot-12.png (added)
-
assets/screenshot-2.png (modified) (1 prop) (previous)
-
assets/screenshot-3.png (modified) (1 prop) (previous)
-
assets/screenshot-4.png (modified) (1 prop) (previous)
-
assets/screenshot-5.png (modified) (1 prop) (previous)
-
assets/screenshot-6.png (modified) (1 prop) (previous)
-
assets/screenshot-7.png (modified) (1 prop) (previous)
-
assets/screenshot-8.png (modified) (1 prop) (previous)
-
assets/screenshot-9.png (modified) (1 prop) (previous)
-
tags/1.2.0 (copied) (copied from edu-results-publishing/trunk)
-
tags/1.2.0/IMPROVEMENTS.md (added)
-
tags/1.2.0/assets/css/admin-meta-fields.css (added)
-
tags/1.2.0/assets/css/admin-settings.css (added)
-
tags/1.2.0/assets/css/style.css (modified) (4 diffs)
-
tags/1.2.0/composer.json (added)
-
tags/1.2.0/edu-results-publishing.php (modified) (8 diffs)
-
tags/1.2.0/inc/RepeaterCF.php (modified) (3 diffs)
-
tags/1.2.0/inc/admin/settings.php (modified) (14 diffs)
-
tags/1.2.0/inc/custom-fields.php (modified) (15 diffs)
-
tags/1.2.0/inc/lib/custom-functions.php (modified) (6 diffs)
-
tags/1.2.0/inc/lib/custom-posts.php (modified) (1 diff)
-
tags/1.2.0/inc/lib/shortcode.php (modified) (1 diff)
-
tags/1.2.0/languages/edu-results-publishing.pot (added)
-
tags/1.2.0/readme.txt (modified) (2 diffs)
-
tags/1.2.0/vendor (added)
-
tags/1.2.0/vendor/autoload.php (added)
-
tags/1.2.0/vendor/composer (added)
-
tags/1.2.0/vendor/composer/ClassLoader.php (added)
-
tags/1.2.0/vendor/composer/InstalledVersions.php (added)
-
tags/1.2.0/vendor/composer/LICENSE (added)
-
tags/1.2.0/vendor/composer/autoload_classmap.php (added)
-
tags/1.2.0/vendor/composer/autoload_namespaces.php (added)
-
tags/1.2.0/vendor/composer/autoload_psr4.php (added)
-
tags/1.2.0/vendor/composer/autoload_real.php (added)
-
tags/1.2.0/vendor/composer/autoload_static.php (added)
-
tags/1.2.0/vendor/composer/installed.json (added)
-
tags/1.2.0/vendor/composer/installed.php (added)
-
trunk/IMPROVEMENTS.md (added)
-
trunk/assets/css/admin-meta-fields.css (added)
-
trunk/assets/css/admin-settings.css (added)
-
trunk/assets/css/style.css (modified) (4 diffs)
-
trunk/composer.json (added)
-
trunk/edu-results-publishing.php (modified) (8 diffs)
-
trunk/inc/RepeaterCF.php (modified) (3 diffs)
-
trunk/inc/admin/settings.php (modified) (14 diffs)
-
trunk/inc/custom-fields.php (modified) (15 diffs)
-
trunk/inc/lib/custom-functions.php (modified) (6 diffs)
-
trunk/inc/lib/custom-posts.php (modified) (1 diff)
-
trunk/inc/lib/shortcode.php (modified) (1 diff)
-
trunk/languages/edu-results-publishing.pot (added)
-
trunk/readme.txt (modified) (2 diffs)
-
trunk/vendor (added)
-
trunk/vendor/autoload.php (added)
-
trunk/vendor/composer (added)
-
trunk/vendor/composer/ClassLoader.php (added)
-
trunk/vendor/composer/InstalledVersions.php (added)
-
trunk/vendor/composer/LICENSE (added)
-
trunk/vendor/composer/autoload_classmap.php (added)
-
trunk/vendor/composer/autoload_namespaces.php (added)
-
trunk/vendor/composer/autoload_psr4.php (added)
-
trunk/vendor/composer/autoload_real.php (added)
-
trunk/vendor/composer/autoload_static.php (added)
-
trunk/vendor/composer/installed.json (added)
-
trunk/vendor/composer/installed.php (added)
Legend:
- Unmodified
- Added
- Removed
-
edu-results-publishing/assets/banner-772x250.png
-
Property
svn:mime-type
changed from
application/octet-streamtoimage/png
-
Property
svn:mime-type
changed from
-
edu-results-publishing/assets/icon-128x128.png
-
Property
svn:mime-type
changed from
application/octet-streamtoimage/png
-
Property
svn:mime-type
changed from
-
edu-results-publishing/assets/screenshot-1.png
-
Property
svn:mime-type
changed from
application/octet-streamtoimage/png
-
Property
svn:mime-type
changed from
-
edu-results-publishing/assets/screenshot-2.png
-
Property
svn:mime-type
changed from
application/octet-streamtoimage/png
-
Property
svn:mime-type
changed from
-
edu-results-publishing/assets/screenshot-3.png
-
Property
svn:mime-type
changed from
application/octet-streamtoimage/png
-
Property
svn:mime-type
changed from
-
edu-results-publishing/assets/screenshot-4.png
-
Property
svn:mime-type
changed from
application/octet-streamtoimage/png
-
Property
svn:mime-type
changed from
-
edu-results-publishing/assets/screenshot-5.png
-
Property
svn:mime-type
changed from
application/octet-streamtoimage/png
-
Property
svn:mime-type
changed from
-
edu-results-publishing/assets/screenshot-6.png
-
Property
svn:mime-type
changed from
application/octet-streamtoimage/png
-
Property
svn:mime-type
changed from
-
edu-results-publishing/assets/screenshot-7.png
-
Property
svn:mime-type
changed from
application/octet-streamtoimage/png
-
Property
svn:mime-type
changed from
-
edu-results-publishing/assets/screenshot-8.png
-
Property
svn:mime-type
changed from
application/octet-streamtoimage/png
-
Property
svn:mime-type
changed from
-
edu-results-publishing/assets/screenshot-9.png
-
Property
svn:mime-type
changed from
application/octet-streamtoimage/png
-
Property
svn:mime-type
changed from
-
edu-results-publishing/tags/1.2.0/assets/css/style.css
r3019484 r3422911 99 99 100 100 /*------------------------------ 101 * Search Form 101 * Search Form - Modern UI 102 102 ------------------------------*/ 103 103 104 /* Main Container */ 104 105 .cbedu-results-search-form-area { 105 margin-bottom: 20px; 106 } 107 108 .cbedu-results-search-form-area form { 106 margin: 60px auto; 107 max-width: 900px; 108 padding: 0 20px; 109 } 110 111 /* Form Header */ 112 .cbedu-search-form-header { 113 text-align: center; 114 margin-bottom: 40px; 115 animation: fadeInDown 0.6s ease-out; 116 } 117 118 @keyframes fadeInDown { 119 from { 120 opacity: 0; 121 transform: translateY(-20px); 122 } 123 to { 124 opacity: 1; 125 transform: translateY(0); 126 } 127 } 128 129 .cbedu-search-form-header h2 { 130 font-size: 36px; 131 font-weight: 800; 132 margin: 0 0 12px 0; 133 background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); 134 -webkit-background-clip: text; 135 -webkit-text-fill-color: transparent; 136 background-clip: text; 137 letter-spacing: -0.5px; 138 } 139 140 .cbedu-search-form-header p { 141 color: #718096; 142 font-size: 16px; 143 margin: 0; 144 font-weight: 400; 145 } 146 147 /* Modern Form */ 148 .cbedu-modern-form { 149 background: #ffffff; 150 border-radius: 20px; 151 padding: 48px; 152 box-shadow: 0 10px 40px rgba(102, 126, 234, 0.1), 153 0 4px 8px rgba(0, 0, 0, 0.02); 154 border: 1px solid rgba(102, 126, 234, 0.1); 155 transition: all 0.3s ease; 156 animation: fadeInUp 0.7s ease-out; 157 } 158 159 @keyframes fadeInUp { 160 from { 161 opacity: 0; 162 transform: translateY(30px); 163 } 164 to { 165 opacity: 1; 166 transform: translateY(0); 167 } 168 } 169 170 .cbedu-modern-form:hover { 171 box-shadow: 0 15px 60px rgba(102, 126, 234, 0.15), 172 0 6px 12px rgba(0, 0, 0, 0.03); 173 } 174 175 /* Form Grid Layout */ 176 .cbedu-form-grid { 177 display: grid; 178 grid-template-columns: repeat(2, 1fr); 179 gap: 28px; 180 margin-bottom: 32px; 181 } 182 183 /* Form Field */ 184 .cbedu-form-field { 109 185 display: flex; 110 186 flex-direction: column; 187 gap: 10px; 188 } 189 190 .cbedu-form-field label { 191 display: flex; 192 align-items: center; 193 gap: 8px; 194 font-size: 14px; 195 font-weight: 600; 196 color: #2d3748; 197 margin-bottom: 2px; 198 letter-spacing: 0.3px; 199 } 200 201 .cbedu-form-field .label-icon { 202 font-size: 18px; 203 filter: grayscale(0.3); 204 } 205 206 .cbedu-form-field .required { 207 color: #f56565; 208 font-size: 16px; 209 } 210 211 /* Select Wrapper */ 212 .cbedu-select-wrapper { 213 position: relative; 111 214 width: 100%; 112 max-width: 100%; 113 margin: 0 auto; 114 padding: 30px 25px; 115 border: 1px solid #ddd; 116 border-radius: 5px; 117 background-color: #f2f2f2; 118 box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); 215 } 216 217 .cbedu-select-wrapper::after { 218 content: '▼'; 219 position: absolute; 220 right: 18px; 221 top: 50%; 222 transform: translateY(-50%); 223 pointer-events: none; 224 color: #667eea; 225 font-size: 12px; 226 transition: all 0.3s ease; 227 } 228 229 .cbedu-select-wrapper:hover::after { 230 color: #764ba2; 231 } 232 233 /* Input & Select Styles */ 234 .cbedu-form-field input[type="text"], 235 .cbedu-form-field select { 236 width: 100%; 237 padding: 14px 18px; 238 font-size: 15px; 239 border: 2px solid #e2e8f0; 240 border-radius: 12px; 241 background: #ffffff; 242 color: #2d3748; 243 transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); 244 font-family: inherit; 245 outline: none; 246 appearance: none; 247 -webkit-appearance: none; 248 -moz-appearance: none; 249 } 250 251 .cbedu-form-field select { 252 cursor: pointer; 253 padding-right: 45px; 254 background-image: none; 255 } 256 257 .cbedu-form-field input[type="text"]:focus, 258 .cbedu-form-field select:focus { 259 border-color: #667eea; 260 background: #f8f9ff; 261 box-shadow: 0 0 0 4px rgba(102, 126, 234, 0.1); 262 transform: translateY(-2px); 263 } 264 265 .cbedu-form-field input[type="text"]:hover, 266 .cbedu-form-field select:hover { 267 border-color: #cbd5e0; 268 } 269 270 .cbedu-form-field input[type="text"]::placeholder { 271 color: #a0aec0; 272 font-size: 14px; 273 } 274 275 /* Error Messages */ 276 .cbedu-error-message { 277 color: #f56565; 278 font-size: 13px; 279 font-weight: 500; 280 margin-top: 6px; 281 display: none; 282 padding-left: 4px; 283 animation: shake 0.3s ease; 284 } 285 286 @keyframes shake { 287 0%, 100% { transform: translateX(0); } 288 25% { transform: translateX(-5px); } 289 75% { transform: translateX(5px); } 290 } 291 292 /* Submit Button Wrapper */ 293 .cbedu-form-submit-wrapper { 294 display: flex; 295 justify-content: center; 296 margin-top: 12px; 297 } 298 299 /* Submit Button */ 300 .cbedu-submit-btn, button.cbedu-submit-btn { 301 display: inline-flex; 302 align-items: center; 303 justify-content: center; 119 304 gap: 10px; 120 } 121 122 .cbedu-results-search-form-single-element-area { 305 padding: 18px 55px; 306 min-width: 280px; 307 font-size: 15px; 308 font-weight: 700; 309 color: #ffffff !important; 310 background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); 311 border: none; 312 border-radius: 12px; 313 cursor: pointer; 314 transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); 315 box-shadow: 0 6px 20px rgba(102, 126, 234, 0.4); 316 text-transform: uppercase; 317 letter-spacing: 1.2px; 318 position: relative; 319 overflow: hidden; 320 white-space: nowrap; 321 line-height: 1; 322 border:none; 323 } 324 325 .cbedu-submit-btn::before { 326 content: ''; 327 position: absolute; 328 top: 0; 329 left: -100%; 330 width: 100%; 331 height: 100%; 332 background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent); 333 transition: left 0.5s ease; 334 } 335 336 .cbedu-submit-btn:hover::before { 337 left: 100%; 338 } 339 340 .cbedu-submit-btn:hover { 341 transform: translateY(-3px); 342 box-shadow: 0 10px 30px rgba(102, 126, 234, 0.5); 343 background: linear-gradient(135deg, #5a67d8 0%, #6b46a0 100%); 344 } 345 346 .cbedu-submit-btn:active { 347 transform: translateY(-1px); 348 box-shadow: 0 5px 15px rgba(102, 126, 234, 0.4); 349 } 350 351 .cbedu-submit-btn .btn-icon { 352 font-size: 18px; 353 flex-shrink: 0; 354 animation: pulse 2s infinite; 355 } 356 357 @keyframes pulse { 358 0%, 100% { transform: scale(1); } 359 50% { transform: scale(1.1); } 360 } 361 362 .cbedu-submit-btn .btn-text { 363 font-size: 15px; 364 flex-shrink: 0; 365 color: #ffffff; 366 } 367 368 .cbedu-submit-btn .btn-arrow { 369 font-size: 18px; 370 flex-shrink: 0; 371 transition: transform 0.3s ease; 372 font-weight: 700; 373 color: #ffffff; 374 } 375 376 .cbedu-submit-btn:hover .btn-arrow { 377 transform: translateX(5px); 378 } 379 380 /* Preloader */ 381 .cbedu-preloader-wrapper { 382 text-align: center; 383 padding: 60px 20px; 384 background: #ffffff; 385 border-radius: 16px; 386 margin: 30px 0; 387 box-shadow: 0 4px 15px rgba(0, 0, 0, 0.08); 388 } 389 390 .cbedu-preloader-content { 123 391 display: flex; 124 392 flex-direction: column; 125 } 126 127 .cbedu-results-search-form-single-element { 128 display: flex; 393 align-items: center; 129 394 gap: 20px; 130 justify-content: flex-start; 131 align-items: center; 132 } 133 134 .cbedu-results-search-form-single-element label { 135 flex-basis: 30%; 136 } 137 138 .cbedu-results-search-form-single-element input, 139 .cbedu-results-search-form-single-element select, 140 .cbedu-results-search-form-single-element input[type="text"] { 141 border: 1px solid #3666; 142 padding: 15px; 143 } 144 145 .cbedu-results-search-form-single-element.cbedu-results-search-form-submit { 146 display: flex; 147 justify-content: center; 148 } 149 150 .cbedu-results-search-form-submit input[type="submit"] { 151 padding: 15px 25px; 152 background-color: #1587fc; 153 color: #fff; 154 font-size: 18px; 155 font-weight: 500; 156 border-radius: 5px; 157 cursor: pointer; 158 } 159 160 .cbedu-results-search-form-submit input[type="submit"]:hover { 161 background-color: #0e52b5; 162 } 163 164 .cbedu-error-message { 165 color: red; 166 margin-top: 5px; 167 font-size: 0.9em; 168 align-self: center; 395 } 396 397 .cbedu-preloader-text { 398 color: #667eea; 399 font-size: 16px; 400 font-weight: 600; 401 margin: 0; 402 animation: fadeInOut 1.5s infinite; 403 } 404 405 @keyframes fadeInOut { 406 0%, 100% { opacity: 0.5; } 407 50% { opacity: 1; } 169 408 } 170 409 … … 182 421 height: 13px; 183 422 border-radius: 50%; 184 background: #1f79ff;423 background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); 185 424 animation-timing-function: cubic-bezier(0, 1, 1, 0); 186 425 } … … 188 427 .cbedu-ajax-preloader-ellipsis div:nth-child(1) { 189 428 left: 8px; 190 animation: cbedu-ellipsis1 0.6s infinite;429 animation: ellipsis1 0.6s infinite; 191 430 } 192 431 193 432 .cbedu-ajax-preloader-ellipsis div:nth-child(2) { 194 433 left: 8px; 195 animation: cbedu-ellipsis2 0.6s infinite;434 animation: ellipsis2 0.6s infinite; 196 435 } 197 436 198 437 .cbedu-ajax-preloader-ellipsis div:nth-child(3) { 199 438 left: 32px; 200 animation: cbedu-ellipsis2 0.6s infinite;439 animation: ellipsis2 0.6s infinite; 201 440 } 202 441 203 442 .cbedu-ajax-preloader-ellipsis div:nth-child(4) { 204 443 left: 56px; 205 animation: cbedu-ellipsis3 0.6s infinite; 206 } 207 .cbedu-ajax-result-area table th{ 208 text-align: left; 209 } 444 animation: ellipsis3 0.6s infinite; 445 } 446 447 @keyframes ellipsis1 { 448 0% { transform: scale(0); } 449 100% { transform: scale(1); } 450 } 451 452 @keyframes ellipsis2 { 453 0% { transform: translate(0, 0); } 454 100% { transform: translate(24px, 0); } 455 } 456 457 @keyframes ellipsis3 { 458 0% { transform: scale(1); } 459 100% { transform: scale(0); } 460 } 461 462 /* Responsive Design */ 463 @media (max-width: 768px) { 464 .cbedu-search-form-header h2 { 465 font-size: 28px; 466 } 467 468 .cbedu-search-form-header p { 469 font-size: 14px; 470 } 471 472 .cbedu-modern-form { 473 padding: 32px 24px; 474 border-radius: 16px; 475 } 476 477 .cbedu-form-grid { 478 grid-template-columns: 1fr; 479 gap: 20px; 480 } 481 482 .cbedu-submit-btn { 483 width: 100%; 484 padding: 16px 32px; 485 } 486 487 .cbedu-form-field .label-icon { 488 font-size: 16px; 489 } 490 } 491 492 @media (max-width: 480px) { 493 .cbedu-results-search-form-area { 494 margin: 40px auto; 495 padding: 0 15px; 496 } 497 498 .cbedu-search-form-header h2 { 499 font-size: 24px; 500 } 501 502 .cbedu-modern-form { 503 padding: 24px 18px; 504 } 505 506 .cbedu-form-field label { 507 font-size: 13px; 508 } 509 510 .cbedu-form-field input[type="text"], 511 .cbedu-form-field select { 512 padding: 12px 14px; 513 font-size: 14px; 514 } 515 516 .cbedu-error-message { 517 padding-left: 0; 518 } 519 520 .cbedu-submit-btn { 521 width: 100%; 522 padding: 16px 32px; 523 font-size: 15px; 524 } 525 } 526 527 /*------------------------------ 528 * Result Display - Modern UI 529 ------------------------------*/ 530 210 531 @keyframes cbedu-ellipsis1 { 211 532 0% { … … 237 558 } 238 559 } 560 561 /*------------------------------ 562 * AJAX Result Display - Modern UI 563 ------------------------------*/ 564 565 /* Main Result Container */ 566 .cbedu-ajax-result-area { 567 max-width: 1200px; 568 margin: 30px auto; 569 padding: 0; 570 font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; 571 background: #fff; 572 border-radius: 12px; 573 box-shadow: 0 10px 40px rgba(0, 0, 0, 0.08); 574 overflow: hidden; 575 } 576 577 .cbedu-ajax-result { 578 padding: 0; 579 } 580 581 /* Section Headings */ 582 .cbedu-result-student-information-heading, 583 .cbedu-result-student-subject-heading { 584 background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); 585 padding: 20px 30px; 586 margin: 0; 587 } 588 589 .cbedu-result-student-information-heading h4, 590 .cbedu-result-student-subject-heading h4 { 591 color: #fff; 592 margin: 0; 593 font-size: 20px; 594 font-weight: 600; 595 letter-spacing: 0.5px; 596 text-transform: uppercase; 597 display: flex; 598 align-items: center; 599 gap: 10px; 600 } 601 602 .cbedu-result-student-information-heading h4:before { 603 content: "👤"; 604 font-size: 24px; 605 } 606 607 .cbedu-result-student-subject-heading h4:before { 608 content: "📊"; 609 font-size: 24px; 610 } 611 612 /* Student Information Area */ 613 .cbedu-result-student-information-area { 614 margin-bottom: 30px; 615 border-radius: 12px 12px 0 0; 616 overflow: hidden; 617 background: #fff; 618 } 619 620 .cbedu-result-student-information-area table { 621 width: 100%; 622 border-collapse: collapse; 623 margin: 0; 624 background: #fff; 625 } 626 627 .cbedu-result-student-information-area table tbody tr:nth-child(even) { 628 background: #f8f9ff; 629 } 630 631 .cbedu-result-student-information-area table tbody tr:hover { 632 background: #f0f2ff; 633 transition: background 0.3s ease; 634 } 635 636 .cbedu-result-student-information-area th { 637 background: #f7f8fc; 638 color: #2d3748; 639 font-weight: 600; 640 padding: 16px 20px; 641 text-align: left; 642 border-bottom: 2px solid #e2e8f0; 643 font-size: 14px; 644 text-transform: uppercase; 645 letter-spacing: 0.5px; 646 /* width: 25%; */ 647 } 648 649 .cbedu-result-student-information-area td { 650 padding: 16px 20px; 651 color: #4a5568; 652 border-bottom: 1px solid #e2e8f0; 653 font-size: 15px; 654 font-weight: 500; 655 } 656 657 /* Subject Result Area */ 658 .cbedu-result-student-subject-area { 659 background: #fff; 660 border-radius: 0 0 12px 12px; 661 overflow: hidden; 662 } 663 664 .cbedu-result-student-subject { 665 padding: 0; 666 } 667 668 .cbedu-result-student-subject table { 669 width: 100%; 670 border-collapse: collapse; 671 margin: 0; 672 background: #fff; 673 } 674 675 .cbedu-result-student-subject table thead { 676 background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); 677 } 678 679 .cbedu-result-student-subject table thead tr th { 680 color: #fff; 681 font-weight: 600; 682 padding: 18px 20px; 683 text-align: center; 684 font-size: 14px; 685 text-transform: uppercase; 686 letter-spacing: 0.5px; 687 border: none; 688 } 689 690 .cbedu-result-student-subject table tbody tr { 691 border-bottom: 1px solid #e2e8f0; 692 transition: all 0.3s ease; 693 } 694 695 .cbedu-result-student-subject table tbody tr:nth-child(even) { 696 background: #f8f9ff; 697 } 698 699 .cbedu-result-student-subject table tbody tr:hover { 700 background: #e6f2ff; 701 transform: scale(1.01); 702 box-shadow: 0 4px 12px rgba(102, 126, 234, 0.1); 703 } 704 705 .cbedu-result-student-subject table tbody td { 706 padding: 16px 20px; 707 color: #4a5568; 708 text-align: center; 709 font-size: 15px; 710 font-weight: 500; 711 } 712 713 .cbedu-result-student-subject table tbody td:nth-child(1) { 714 font-weight: 700; 715 color: #667eea; 716 } 717 718 .cbedu-result-student-subject table tbody td:nth-child(2) { 719 text-align: left; 720 font-weight: 600; 721 color: #2d3748; 722 } 723 724 /* Highlight cells (GPA columns) */ 725 .cbedu-result-student-subject table tbody td.highlight { 726 background: linear-gradient(135deg, #a8edea 0%, #fed6e3 100%); 727 font-weight: 700; 728 font-size: 18px; 729 color: #2d3748; 730 border-left: 3px solid #667eea; 731 border-right: 3px solid #764ba2; 732 } 733 734 /* Grade styling */ 735 .cbedu-result-student-subject table tbody td:nth-child(4) { 736 font-weight: 700; 737 font-size: 16px; 738 } 739 740 /* Print Button Container */ 741 .cbedu-print-button-container { 742 text-align: center; 743 padding: 30px; 744 background: #f7f8fc; 745 border-radius: 0 0 12px 12px; 746 } 747 748 .cbedu-print-button-container button { 749 background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); 750 color: #fff; 751 padding: 14px 40px; 752 font-size: 16px; 753 font-weight: 600; 754 border: none; 755 border-radius: 8px; 756 cursor: pointer; 757 transition: all 0.3s ease; 758 box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3); 759 text-transform: uppercase; 760 letter-spacing: 1px; 761 } 762 763 .cbedu-print-button-container button:hover { 764 transform: translateY(-2px); 765 box-shadow: 0 6px 25px rgba(102, 126, 234, 0.4); 766 } 767 768 .cbedu-print-button-container button:active { 769 transform: translateY(0); 770 } 771 772 /* Status Badge Styling */ 773 .cbedu-result-student-information-area td:contains("Passed"), 774 .cbedu-result-student-information-area td:contains("Failed") { 775 font-weight: 700; 776 } 777 778 /* Responsive Design */ 779 @media (max-width: 768px) { 780 .cbedu-ajax-result-area { 781 margin: 20px 10px; 782 border-radius: 8px; 783 } 784 785 .cbedu-result-student-information-heading, 786 .cbedu-result-student-subject-heading { 787 padding: 15px 20px; 788 } 789 790 .cbedu-result-student-information-heading h4, 791 .cbedu-result-student-subject-heading h4 { 792 font-size: 16px; 793 } 794 795 .cbedu-result-student-information-area th, 796 .cbedu-result-student-information-area td, 797 .cbedu-result-student-subject table tbody td { 798 padding: 12px 15px; 799 font-size: 13px; 800 } 801 802 .cbedu-result-student-subject table thead tr th { 803 padding: 14px 10px; 804 font-size: 12px; 805 } 806 807 .cbedu-print-button-container { 808 padding: 20px; 809 } 810 811 .cbedu-print-button-container button { 812 padding: 12px 30px; 813 font-size: 14px; 814 } 815 816 /* Stack table on mobile */ 817 .cbedu-result-student-information-area table, 818 .cbedu-result-student-information-area thead, 819 .cbedu-result-student-information-area tbody, 820 .cbedu-result-student-information-area th, 821 .cbedu-result-student-information-area td, 822 .cbedu-result-student-information-area tr { 823 display: block; 824 } 825 826 .cbedu-result-student-information-area thead tr { 827 display: none; 828 } 829 830 .cbedu-result-student-information-area tr { 831 margin-bottom: 15px; 832 border: 1px solid #e2e8f0; 833 border-radius: 8px; 834 overflow: hidden; 835 } 836 837 .cbedu-result-student-information-area td { 838 text-align: right; 839 padding-left: 50%; 840 position: relative; 841 } 842 843 .cbedu-result-student-information-area td:before { 844 content: attr(data-label); 845 position: absolute; 846 left: 15px; 847 width: 45%; 848 padding-right: 10px; 849 white-space: nowrap; 850 text-align: left; 851 font-weight: 600; 852 color: #2d3748; 853 } 854 } 855 856 /* Print Styles */ 857 @media print { 858 .cbedu-print-button-container { 859 display: none; 860 } 861 862 .cbedu-ajax-result-area { 863 box-shadow: none; 864 border: 1px solid #ddd; 865 } 866 867 .cbedu-result-student-information-heading, 868 .cbedu-result-student-subject-heading { 869 background: #667eea !important; 870 -webkit-print-color-adjust: exact; 871 print-color-adjust: exact; 872 } 873 874 .cbedu-result-student-subject table tbody td.highlight { 875 background: #fed6e3 !important; 876 -webkit-print-color-adjust: exact; 877 print-color-adjust: exact; 878 } 879 880 body { 881 background: #fff; 882 } 883 } -
edu-results-publishing/tags/1.2.0/edu-results-publishing.php
r3022038 r3422911 4 4 * Author: MD Abul Bashar 5 5 * Author URI: https://facebook.com/hmbashar 6 * Description: This plugin is for student exam results publishing.6 * Description: A powerful tool designed to simplify the process of publishing exam results for educational institutions such as schools, colleges, and universities. With an easy-to-use interface, it empowers administrators and educators to effortlessly manage and showcase academic achievements. 7 7 * Tags: Result, WP Result Plugin, EDU Results 8 8 * Text Domain: edu-results 9 * Version: 1. 0.29 * Version: 1.2.0 10 10 * License: GPLv2 11 11 * License URI: http://www.gnu.org/licenses/gpl-2.0.html 12 12 * Domain Path: /languages 13 13 * Prefix: cbedu_ 14 * Requires at least: 5.0 15 * Requires PHP: 7.2 14 16 */ 15 17 … … 21 23 * @link https://facebook.com/hmbashar 22 24 */ 25 26 namespace CBEDU; 27 23 28 if (!defined('ABSPATH')) exit; // Exit if accessed directly 29 24 30 25 31 … … 28 34 define('CBEDU_RESULT_DIR', plugin_dir_path(__FILE__)); 29 35 define('CBEDU_PREFIX', 'cbedu_'); 30 31 class CBEDUResultPublishing 36 define('CBEDU_VERSION', '1.2.0'); 37 38 final class CBEDUResultPublishing 32 39 { 33 40 // Plugin prefix … … 176 183 )); 177 184 178 // for autocomplete jquery in results post type with registration number185 // Enqueue admin meta fields CSS for custom post types 179 186 if ($hook_suffix === 'post-new.php' || $hook_suffix === 'post.php') { 180 if (get_post_type($post) === 'cbedu_results') { 181 187 $post_type = get_post_type($post); 188 189 // Load admin CSS for students, subjects, and results post types 190 if (in_array($post_type, array('cbedu_students', 'cbedu_subjects', 'cbedu_results'))) { 191 wp_enqueue_style('cbedu-admin-meta-fields', CBEDU_RESULT_URL . 'assets/css/admin-meta-fields.css', array(), CBEDU_VERSION); 192 } 193 194 // For autocomplete jquery in results post type with registration number 195 if ($post_type === 'cbedu_results') { 182 196 wp_enqueue_style('cbedu-autocomplete-ui-css', plugin_dir_url(__FILE__) . 'assets/css/autocomplete.css'); 183 197 wp_enqueue_script('cbedu-autocomplete-js', plugin_dir_url(__FILE__) . 'assets/js/autocomplete.js', array('jquery', 'jquery-ui-autocomplete'), '1.0.0', true); … … 358 372 359 373 // Execute the query for 'cbedu_results' 360 $ResultQuery = new WP_Query($args);374 $ResultQuery = new \WP_Query($args); 361 375 362 376 // Output the results … … 365 379 $ResultQuery->the_post(); 366 380 381 // Store result post ID before nested query 382 $result_post_id = get_the_ID(); 383 $result_title = get_the_title(); 384 367 385 $collageName = get_option('cbedu_results_collage_name'); 368 386 369 $rs_std_roll = get_post_meta( get_the_ID(), 'cbedu_result_std_roll', true);370 $rs_std_reg_number = get_post_meta( get_the_ID(), 'cbedu_result_std_registration_number', true);371 $rs_std_type = get_post_meta( get_the_ID(), 'cbedu_result_std_student_type', true);372 $rs_std_result_status = get_post_meta( get_the_ID(), 'cbedu_result_std_result_status', true);373 $rs_std_gpa = get_post_meta( get_the_ID(), 'cbedu_result_std_gpa', true);387 $rs_std_roll = get_post_meta($result_post_id, 'cbedu_result_std_roll', true); 388 $rs_std_reg_number = get_post_meta($result_post_id, 'cbedu_result_std_registration_number', true); 389 $rs_std_type = get_post_meta($result_post_id, 'cbedu_result_std_student_type', true); 390 $rs_std_result_status = get_post_meta($result_post_id, 'cbedu_result_std_result_status', true); 391 $rs_std_gpa = get_post_meta($result_post_id, 'cbedu_result_std_gpa', true); 374 392 375 393 //Student subjects result 376 $cbedu_std_all_subjects_result = get_post_meta( get_the_ID(), 'cbedu_subjects_results', true);377 $cbedu_std_gpa = get_post_meta( get_the_ID(), 'cbedu_result_std_gpa', true);378 $cbedu_std_was_gpa = get_post_meta( get_the_ID(), 'cbedu_result_std_was_gpa', true);394 $cbedu_std_all_subjects_result = get_post_meta($result_post_id, 'cbedu_subjects_results', true); 395 $cbedu_std_gpa = get_post_meta($result_post_id, 'cbedu_result_std_gpa', true); 396 $cbedu_std_was_gpa = get_post_meta($result_post_id, 'cbedu_result_std_was_gpa', true); 379 397 380 398 // Fetch taxonomy term names 381 $session_year_terms = wp_get_post_terms( get_the_ID(), 'cbedu_session_years', array('fields' => 'names'));382 $examination_terms = wp_get_post_terms( get_the_ID(), 'cbedu_examinations', array('fields' => 'names'));383 $board_terms = wp_get_post_terms( get_the_ID(), 'cbedu_boards', array('fields' => 'names'));384 $department_group_terms = wp_get_post_terms( get_the_ID(), 'cbedu_department_group', array('fields' => 'names'));399 $session_year_terms = wp_get_post_terms($result_post_id, 'cbedu_session_years', array('fields' => 'names')); 400 $examination_terms = wp_get_post_terms($result_post_id, 'cbedu_examinations', array('fields' => 'names')); 401 $board_terms = wp_get_post_terms($result_post_id, 'cbedu_boards', array('fields' => 'names')); 402 $department_group_terms = wp_get_post_terms($result_post_id, 'cbedu_department_group', array('fields' => 'names')); 385 403 386 404 // Convert term arrays to strings … … 404 422 ); 405 423 406 $student_query = new WP_Query($student_args); 424 $student_query = new \WP_Query($student_args); 425 426 // Initialize student data 427 $st_father_name = ''; 428 $st_mother_name = ''; 429 $st_std_id = ''; 430 $st_std_dob = ''; 431 $st_std_gender = ''; 407 432 408 433 if ($student_query->have_posts()) { 409 while ($student_query->have_posts()) { 410 $student_query->the_post(); 411 412 // Fetch all student details 413 $st_father_name = get_post_meta(get_the_ID(), 'cbedu_result_std_father_name', true); 414 $st_mother_name = get_post_meta(get_the_ID(), 'cbedu_result_std_mother_name', true); 415 $st_std_id = get_post_meta(get_the_ID(), 'cbedu_result_std_id', true); 416 $st_std_dob = get_post_meta(get_the_ID(), 'cbedu_result_std_dob', true); 417 $st_std_gender = get_post_meta(get_the_ID(), 'cbedu_result_std_gender', true); 434 $student_post = $student_query->posts[0]; 435 436 // Fetch all student details 437 $st_father_name = get_post_meta($student_post->ID, 'cbedu_result_std_father_name', true); 438 $st_mother_name = get_post_meta($student_post->ID, 'cbedu_result_std_mother_name', true); 439 $st_std_id = get_post_meta($student_post->ID, 'cbedu_result_std_id', true); 440 $st_std_dob = get_post_meta($student_post->ID, 'cbedu_result_std_dob', true); 441 $st_std_gender = get_post_meta($student_post->ID, 'cbedu_result_std_gender', true); 442 } 443 444 wp_reset_postdata(); // Reset student query 418 445 419 446 420 // Display the results in a table 421 ?> 422 <div class="cbedu-ajax-result-area" id="cbedu-result-table"> 423 <div class="cbedu-ajax-result"> 424 <!--Student Information--> 425 <div class="cbedu-result-student-information-area"> 426 <div class="cbedu-result-student-information-heading"> 427 <h4><?php _e('Student Information', 'edu-results'); ?></h4> 428 </div> 429 <table> 430 <tr> 431 <th><?php _e('Roll', 'edu-results'); ?></th> 432 <td><?php echo esc_html($rs_std_roll); ?></td> 433 <th><?php _e('Registration Number', 'edu-results'); ?></th> 434 <td><?php echo esc_html($rs_std_reg_number); ?></td> 435 </tr> 436 <tr> 437 <th><?php _e('Student Name', 'edu-results'); ?></th> 438 <td><?php the_title(); ?></td> 439 <th><?php _e('Student ID', 'edu-results'); ?></th> 440 <td><?php echo esc_html($st_std_id); ?></td> 441 </tr> 442 <tr> 443 <th><?php _e('Father Name', 'edu-results'); ?></th> 444 <td><?php echo esc_html($st_father_name); ?></td> 445 <th><?php _e('Mother Name', 'edu-results'); ?></th> 446 <td><?php echo esc_html($st_mother_name); ?></td> 447 </tr> 448 <tr> 449 <th><?php _e('Board', 'edu-results'); ?></th> 450 <td><?php echo esc_html($board); ?></td> 451 <th><?php _e('Department Group', 'edu-results'); ?></th> 452 <td><?php echo esc_html($department_group); ?></td> 453 </tr> 454 <tr> 455 <th><?php _e('Session', 'edu-results'); ?></th> 456 <td><?php echo esc_html($session_year); ?></td> 457 <th><?php _e('Result Status', 'edu-results'); ?></th> 458 <td><?php echo esc_html($rs_std_result_status); ?></td> 459 </tr> 460 <tr> 461 <th><?php _e('Gender', 'edu-results'); ?></th> 462 <td><?php echo esc_html($st_std_gender); ?></td> 463 <th><?php _e('Date of Birth', 'edu-results'); ?></th> 464 <td><?php echo esc_html($st_std_dob); ?></td> 465 </tr> 466 <tr> 467 <th><?php _e('Student Type', 'edu-results'); ?></th> 468 <td><?php echo esc_html($rs_std_type); ?></td> 469 <th><?php _e('Institute Name', 'edu-results'); ?></th> 470 <td><?php echo esc_html($collageName); ?></td> 471 </tr> 472 <tr> 473 <th><?php _e('Examination', 'edu-results'); ?></th> 474 <td><?php echo esc_html($examination); ?></td> 475 <th><?php _e('GPA', 'edu-results'); ?></th> 476 <td><?php echo esc_html($rs_std_gpa); ?></td> 477 </tr> 478 </table> 479 </div><!--/ Student Information--> 480 481 <!--Student Subjects Information--> 482 <div class="cbedu-result-student-subject-area"> 483 <div class="cbedu-result-student-subject"> 484 <div class="cbedu-result-student-subject-heading"> 485 <h4><?php _e('Result Sheet', 'edu-results'); ?></h4> 486 </div> 487 <table> 488 <tr> 489 <th><?php _e('Subject', 'edu-results'); ?></th> 490 <th><?php _e('Name of Subjects', 'edu-results'); ?></th> 491 <th><?php _e('Marks', 'edu-results'); ?></th> 492 <th><?php _e('Letter Grade', 'edu-results'); ?></th> 493 <th class="cbedu-table-gpa"><?php _e('GPA', 'edu-results'); ?> <abbr title="Without additional subject"><?php _e('(WAS)', 'edu-results'); ?></abbr></th> 494 <th><?php _e('GPA', 'edu-results'); ?></th> 495 </tr> 496 <?php 447 // Display the results in a table 448 ?> 449 <div class="cbedu-ajax-result-area" id="cbedu-result-table"> 450 <div class="cbedu-ajax-result"> 451 <!--Student Information--> 452 <div class="cbedu-result-student-information-area"> 453 <div class="cbedu-result-student-information-heading"> 454 <h4><?php esc_html_e('Student Information', 'edu-results'); ?></h4> 455 </div> 456 <table> 457 <tbody> 458 <tr> 459 <th><?php esc_html_e('Roll', 'edu-results'); ?></th> 460 <td><?php echo esc_html($rs_std_roll); ?></td> 461 <th><?php esc_html_e('Registration Number', 'edu-results'); ?></th> 462 <td><?php echo esc_html($rs_std_reg_number); ?></td> 463 </tr> 464 <tr> 465 <th><?php esc_html_e('Student Name', 'edu-results'); ?></th> 466 <td><?php echo esc_html($result_title); ?></td> 467 <th><?php esc_html_e('Student ID', 'edu-results'); ?></th> 468 <td><?php echo esc_html($st_std_id); ?></td> 469 </tr> 470 <tr> 471 <th><?php esc_html_e('Father Name', 'edu-results'); ?></th> 472 <td><?php echo esc_html($st_father_name); ?></td> 473 <th><?php esc_html_e('Mother Name', 'edu-results'); ?></th> 474 <td><?php echo esc_html($st_mother_name); ?></td> 475 </tr> 476 <tr> 477 <th><?php esc_html_e('Board', 'edu-results'); ?></th> 478 <td><?php echo esc_html($board); ?></td> 479 <th><?php esc_html_e('Department Group', 'edu-results'); ?></th> 480 <td><?php echo esc_html($department_group); ?></td> 481 </tr> 482 <tr> 483 <th><?php esc_html_e('Session', 'edu-results'); ?></th> 484 <td><?php echo esc_html($session_year); ?></td> 485 <th><?php esc_html_e('Result Status', 'edu-results'); ?></th> 486 <td><?php echo esc_html($rs_std_result_status); ?></td> 487 </tr> 488 <tr> 489 <th><?php esc_html_e('Gender', 'edu-results'); ?></th> 490 <td><?php echo esc_html($st_std_gender); ?></td> 491 <th><?php esc_html_e('Date of Birth', 'edu-results'); ?></th> 492 <td><?php echo esc_html($st_std_dob); ?></td> 493 </tr> 494 <tr> 495 <th><?php esc_html_e('Student Type', 'edu-results'); ?></th> 496 <td><?php echo esc_html($rs_std_type); ?></td> 497 <th><?php esc_html_e('Institute Name', 'edu-results'); ?></th> 498 <td><?php echo esc_html($collageName); ?></td> 499 </tr> 500 <tr> 501 <th><?php esc_html_e('Examination', 'edu-results'); ?></th> 502 <td><?php echo esc_html($examination); ?></td> 503 <th><?php esc_html_e('GPA', 'edu-results'); ?></th> 504 <td><?php echo esc_html($rs_std_gpa); ?></td> 505 </tr> 506 </tbody> 507 </table> 508 </div><!--/ Student Information--> 509 510 <!--Student Subjects Information--> 511 <div class="cbedu-result-student-subject-area"> 512 <div class="cbedu-result-student-subject"> 513 <div class="cbedu-result-student-subject-heading"> 514 <h4><?php esc_html_e('Result Sheet', 'edu-results'); ?></h4> 515 </div> 516 <table> 517 <thead> 518 <tr> 519 <th><?php esc_html_e('Subject', 'edu-results'); ?></th> 520 <th><?php esc_html_e('Name of Subjects', 'edu-results'); ?></th> 521 <th><?php esc_html_e('Marks', 'edu-results'); ?></th> 522 <th><?php esc_html_e('Letter Grade', 'edu-results'); ?></th> 523 <th class="cbedu-table-gpa"><?php esc_html_e('GPA', 'edu-results'); ?> <abbr title="Without additional subject"><?php esc_html_e('(WAS)', 'edu-results'); ?></abbr></th> 524 <th><?php esc_html_e('GPA', 'edu-results'); ?></th> 525 </tr> 526 </thead> 527 <tbody> 528 <?php 497 529 498 530 // Check if there are subject results … … 552 584 </div> 553 585 <div class="cbedu-print-button-container"> 554 <button onclick="cbeduPrintResult('cbedu-result-table')"><?php _e('Print', 'edu-results'); ?></button>586 <button onclick="cbeduPrintResult('cbedu-result-table')"><?php esc_html_e('Print', 'edu-results'); ?></button> 555 587 </div> 556 588 <?php 557 }558 }559 560 wp_reset_postdata(); // Reset student query561 589 } 562 590 } else { 563 echo '<p> No results found for the selected examination.</p>';591 echo '<p>' . esc_html__('No results found for the selected examination.', 'edu-results') . '</p>'; 564 592 } 565 593 -
edu-results-publishing/tags/1.2.0/inc/RepeaterCF.php
r3019484 r3422911 22 22 // Fetch subjects from 'subjects' custom post type 23 23 $subjects = get_posts(array( 24 'post_type' => 'cbedu_subjects', // Replace with your actual custom post type slug25 'posts_per_page' => -1 // Fetch all posts24 'post_type' => 'cbedu_subjects', 25 'posts_per_page' => -1 26 26 )); 27 27 … … 46 46 </script> 47 47 48 <table id="repeatable-fieldset-one" width="100%"> 49 <tbody> 50 <?php 51 if ($eduResultsGroup) : 52 foreach ($eduResultsGroup as $field) : 53 ?> 54 <tr> 55 <td width="70%"> 56 <select style="width:80%;padding:10px;" name="cbedu_results_subject_name[]"> 48 <div class="cbedu-subjects-repeater-wrapper"> 49 <div class="cbedu-repeater-header"> 50 <h3><?php esc_html_e('Add Subject Marks', 'edu-results'); ?></h3> 51 <p class="description"><?php esc_html_e('Select subjects and enter marks for each subject', 'edu-results'); ?></p> 52 </div> 53 54 <table id="repeatable-fieldset-one" class="cbedu-repeater-table"> 55 <thead> 56 <tr> 57 <th class="cbedu-repeater-th-subject"><?php esc_html_e('Subject', 'edu-results'); ?></th> 58 <th class="cbedu-repeater-th-marks"><?php esc_html_e('Marks / Grade', 'edu-results'); ?></th> 59 <th class="cbedu-repeater-th-action"><?php esc_html_e('Action', 'edu-results'); ?></th> 60 </tr> 61 </thead> 62 <tbody> 63 <?php 64 if ($eduResultsGroup) : 65 foreach ($eduResultsGroup as $field) : 66 ?> 67 <tr class="cbedu-repeater-row"> 68 <td class="cbedu-repeater-td-subject"> 69 <select class="cbedu-repeater-select" name="cbedu_results_subject_name[]"> 70 <option value=""><?php esc_attr_e('Select Subject', 'edu-results'); ?></option> 71 <?php foreach ($subjects as $subject) : 72 $subject_code = get_post_meta($subject->ID, 'cbedu_subject_code', true); 73 ?> 74 <option value="<?php echo esc_attr($subject->post_title); ?>" <?php selected($field['subject_name'], $subject->post_title); ?>> 75 <?php echo esc_html($subject_code ? $subject_code . ' - ' : '') . esc_html($subject->post_title); ?> 76 </option> 77 <?php endforeach; ?> 78 </select> 79 </td> 80 <td class="cbedu-repeater-td-input"> 81 <input class="cbedu-repeater-input" type="text" placeholder="<?php esc_attr_e('Enter marks or grade', 'edu-results'); ?>" name="cbedu_results_subject_value[]" value="<?php echo isset($field['subject_value']) ? esc_attr($field['subject_value']) : ''; ?>" /> 82 </td> 83 <td class="cbedu-repeater-td-action"> 84 <button type="button" class="button remove-row cbedu-remove-btn"> 85 <span class="dashicons dashicons-trash"></span> 86 <?php esc_html_e('Remove', 'edu-results'); ?> 87 </button> 88 </td> 89 </tr> 90 <?php 91 endforeach; 92 else : 93 ?> 94 <tr class="cbedu-repeater-row"> 95 <td class="cbedu-repeater-td-subject"> 96 <select class="cbedu-repeater-select" name="cbedu_results_subject_name[]"> 57 97 <option value=""><?php esc_attr_e('Select Subject', 'edu-results'); ?></option> 58 98 <?php foreach ($subjects as $subject) : 59 $subject_code = get_post_meta($subject->ID, 'cbedu_subject_code', true); 99 $subject_code = get_post_meta($subject->ID, 'cbedu_subject_code', true); 60 100 ?> 61 <option value="<?php echo esc_attr($subject->post_title); ?>" <?php selected($field['subject_name'], $subject->post_title); ?>>62 <?php echo esc_html($subject_code . ' - ' .$subject->post_title); ?>63 </option>101 <option value="<?php echo esc_attr($subject->post_title); ?>"> 102 <?php echo esc_html($subject_code ? $subject_code . ' - ' : '') . esc_html($subject->post_title); ?> 103 </option> 64 104 <?php endforeach; ?> 65 105 </select> 66 106 </td> 67 <td width="70%">68 <input style="width:80%;padding:10px;" type="text" placeholder="<?php esc_attr_e('Enter subject value', 'edu-results'); ?>" name="cbedu_results_subject_value[]" value="<?php echo isset($field['subject_value']) ? esc_attr($field['subject_value']) : ''; ?>" />107 <td class="cbedu-repeater-td-input"> 108 <input class="cbedu-repeater-input" type="text" placeholder="<?php esc_attr_e('Enter marks or grade', 'edu-results'); ?>" name="cbedu_results_subject_value[]" /> 69 109 </td> 70 <td width="15%"><a class="button remove-row" href="#1"><?php esc_html_e('Remove', 'edu-results'); ?></a></td> 110 <td class="cbedu-repeater-td-action"> 111 <button type="button" class="button remove-row cbedu-remove-btn"> 112 <span class="dashicons dashicons-trash"></span> 113 <?php esc_html_e('Remove', 'edu-results'); ?> 114 </button> 115 </td> 71 116 </tr> 72 <?php 73 endforeach; 74 else : 75 // Show a blank row 76 ?> 77 <tr> 78 <td width="70%"> 79 <select style="width:80%;padding:10px;" name="cbedu_results_subject_name[]"> 117 <?php endif; ?> 118 119 <!-- Empty hidden row for jQuery --> 120 <tr class="empty-row screen-reader-text cbedu-repeater-row"> 121 <td class="cbedu-repeater-td-subject"> 122 <select class="cbedu-repeater-select" name="cbedu_results_subject_name[]"> 80 123 <option value=""><?php esc_attr_e('Select Subject', 'edu-results'); ?></option> 81 <?php foreach ($subjects as $subject) : ?> 124 <?php foreach ($subjects as $subject) : 125 $subject_code = get_post_meta($subject->ID, 'cbedu_subject_code', true); 126 ?> 82 127 <option value="<?php echo esc_attr($subject->post_title); ?>"> 83 <?php echo esc_html($subject ->post_title); ?>128 <?php echo esc_html($subject_code ? $subject_code . ' - ' : '') . esc_html($subject->post_title); ?> 84 129 </option> 85 130 <?php endforeach; ?> 86 131 </select> 87 132 </td> 88 <td width="70%">89 <input style="width:80%;padding:10px;" type="text" placeholder="<?php esc_attr_e('Enter subject value', 'edu-results'); ?>" name="cbedu_results_subject_value[]" />133 <td class="cbedu-repeater-td-input"> 134 <input class="cbedu-repeater-input" type="text" placeholder="<?php esc_attr_e('Enter marks or grade', 'edu-results'); ?>" name="cbedu_results_subject_value[]" /> 90 135 </td> 91 <td width="15%"><a class="button remove-row" href="#1"><?php esc_html_e('Remove', 'edu-results'); ?></a></td> 136 <td class="cbedu-repeater-td-action"> 137 <button type="button" class="button remove-row cbedu-remove-btn"> 138 <span class="dashicons dashicons-trash"></span> 139 <?php esc_html_e('Remove', 'edu-results'); ?> 140 </button> 141 </td> 92 142 </tr> 93 <?php endif; ?> 94 95 <!-- Empty hidden row for jQuery --> 96 <tr class="empty-row screen-reader-text"> 97 <td width="70%"> 98 <select style="width:80%;padding:10px;" name="cbedu_results_subject_name[]"> 99 <option value=""><?php esc_attr_e('Select Subject', 'edu-results'); ?></option> 100 <?php foreach ($subjects as $subject) : ?> 101 <option value="<?php echo esc_attr($subject->post_title); ?>"> 102 <?php echo esc_html($subject->post_title); ?> 103 </option> 104 <?php endforeach; ?> 105 </select> 106 </td> 107 <td width="70%"> 108 <input style="width:80%;padding:10px;" type="text" placeholder="<?php esc_attr_e('Enter subject value', 'edu-results'); ?>" name="cbedu_results_subject_value[]" /> 109 </td> 110 <td width="15%"><a class="button remove-row" href="#1"><?php esc_html_e('Remove', 'edu-results'); ?></a></td> 111 </tr> 112 </tbody> 113 </table> 114 115 <p><a id="edu-add-subject-row" class="button" href="#"><?php esc_html_e('Add Another', 'edu-results'); ?></a></p> 143 </tbody> 144 </table> 145 146 <div class="cbedu-repeater-footer"> 147 <button type="button" id="edu-add-subject-row" class="button button-primary cbedu-add-subject-btn"> 148 <span class="dashicons dashicons-plus-alt"></span> 149 <?php esc_html_e('Add Another Subject', 'edu-results'); ?> 150 </button> 151 </div> 152 </div> 116 153 <?php 117 154 } … … 128 165 return; 129 166 167 // Skip auto-draft, trash, and inherit posts 168 $post_status = get_post_status($postID); 169 if (in_array($post_status, array('auto-draft', 'trash', 'inherit'))) 170 return; 171 130 172 if (!current_user_can('edit_post', $postID)) 173 return; 174 175 // Check post type 176 if (get_post_type($postID) !== 'cbedu_results') 131 177 return; 132 178 -
edu-results-publishing/tags/1.2.0/inc/admin/settings.php
r3019484 r3422911 16 16 add_action('admin_menu', array($this, 'addSubmenuPage')); 17 17 add_action('admin_init', array($this, 'registerSettings')); 18 add_action('admin_enqueue_scripts', array($this, 'enqueueSettingsStyles')); 19 } 20 21 public function enqueueSettingsStyles($hook) 22 { 23 // Only load on our settings page 24 if ($hook !== 'cbedu_results_page_cbedu_results_settings') { 25 return; 26 } 27 28 wp_enqueue_style( 29 'cbedu-admin-settings', 30 plugins_url('../../assets/css/admin-settings.css', __FILE__), 31 array(), 32 '1.0.0' 33 ); 18 34 } 19 35 … … 32 48 { 33 49 ?> 34 <div class="wrap"> 50 <div class="wrap cbedu-settings-wrap"> 51 <div class="cbedu-settings-header"> 52 <h1><?php echo esc_html__('🎓 Edu Results Settings', 'edu-results'); ?></h1> 53 <p class="cbedu-settings-subtitle"><?php echo esc_html__('Configure your educational institution settings', 'edu-results'); ?></p> 54 </div> 55 35 56 <?php settings_errors(); ?> 36 <h2>Edu Results Settings</h2> 37 <form method="post" action="options.php" enctype="multipart/form-data"> <!-- Add enctype for file upload --> 38 <?php settings_fields('cbedu_results_settings_group'); ?> 39 <?php do_settings_sections('cbedu_results_settings'); ?> 40 <?php 41 // Add nonce field 42 wp_nonce_field('cbedu_results_settings_nonce', 'cbedu_results_settings_nonce_field'); 43 ?> 44 <?php submit_button(); ?> 45 </form> 57 58 <div class="cbedu-settings-container"> 59 <form method="post" action="options.php" enctype="multipart/form-data" class="cbedu-settings-form"> 60 <?php settings_fields('cbedu_results_settings_group'); ?> 61 <?php wp_nonce_field('cbedu_results_settings_nonce', 'cbedu_results_settings_nonce_field'); ?> 62 63 <div class="cbedu-settings-card"> 64 <div class="cbedu-card-header"> 65 <h2>🏛️ Institution Information</h2> 66 <p class="description">Basic information about your educational institution</p> 67 </div> 68 <div class="cbedu-card-body"> 69 <?php do_settings_sections('cbedu_results_settings'); ?> 70 </div> 71 </div> 72 73 <div class="cbedu-settings-footer"> 74 <?php submit_button(__('Save Settings', 'edu-results'), 'primary cbedu-save-btn', 'submit', false); ?> 75 </div> 76 </form> 77 </div> 46 78 </div> 47 79 <?php … … 187 219 $logoURL = get_option('cbedu_results_logo'); 188 220 ?> 189 <input type="text" name="cbedu_results_logo" value="<?php echo esc_url($logoURL); ?>" id="cbedu_results_logo"> 190 <input type="button" id="upload_logo_button" class="button" value="Upload Logo"> 191 <br> 192 <img src="<?php echo esc_url($logoURL); ?>" alt="Logo Preview" id="logo_preview" style="max-width: 200px;"> 221 <div class="cbedu-field-wrapper"> 222 <input type="text" name="cbedu_results_logo" value="<?php echo esc_url($logoURL); ?>" id="cbedu_results_logo" placeholder="https://example.com/logo.png"> 223 <input type="button" id="upload_logo_button" class="button" value="📁 Upload Logo"> 224 <p class="description">Upload or enter the URL of your institution's logo</p> 225 <?php if ($logoURL): ?> 226 <img src="<?php echo esc_url($logoURL); ?>" alt="Logo Preview" id="logo_preview"> 227 <?php endif; ?> 228 </div> 193 229 <script> 194 230 jQuery(document).ready(function($) { … … 210 246 var attachment = customUploader.state().get('selection').first().toJSON(); 211 247 $('#cbedu_results_logo').val(attachment.url); 212 $('#logo_preview').attr('src', attachment.url) ;248 $('#logo_preview').attr('src', attachment.url).show(); 213 249 }); 214 250 … … 217 253 }); 218 254 </script> 219 <p class="description">Upload your logo here.</p>220 255 <?php 221 256 } … … 224 259 public function settingsSectionCallback() 225 260 { 226 echo ' These are the general settings for the Edu Results plugin.';261 echo '<p class="cbedu-section-description">Configure the basic information about your educational institution. This information will be displayed on result pages.</p>'; 227 262 } 228 263 … … 232 267 { 233 268 $collageName = get_option('cbedu_results_collage_name'); 234 echo '<input type="text" name="cbedu_results_collage_name" value="' . esc_attr($collageName) . '" />'; 269 echo '<div class="cbedu-field-wrapper">'; 270 echo '<input type="text" name="cbedu_results_collage_name" value="' . esc_attr($collageName) . '" placeholder="e.g., Springfield High School" />'; 271 echo '<p class="description">Full name of your educational institution</p>'; 272 echo '</div>'; 235 273 } 236 274 … … 238 276 { 239 277 $collageRegNumber = get_option('cbedu_results_collage_registration_number'); 240 echo '<input type="text" name="cbedu_results_collage_registration_number" value="' . esc_attr($collageRegNumber) . '" />'; 278 echo '<div class="cbedu-field-wrapper">'; 279 echo '<input type="text" name="cbedu_results_collage_registration_number" value="' . esc_attr($collageRegNumber) . '" placeholder="e.g., REG-2024-001" />'; 280 echo '<p class="description">Official registration or EIIN number</p>'; 281 echo '</div>'; 241 282 } 242 283 … … 244 285 { 245 286 $collageSinceYear = get_option('cbedu_results_collage_since_year'); 246 echo '<input type="text" name="cbedu_results_collage_since_year" value="' . esc_attr($collageSinceYear) . '" />'; 287 echo '<div class="cbedu-field-wrapper">'; 288 echo '<input type="text" name="cbedu_results_collage_since_year" value="' . esc_attr($collageSinceYear) . '" placeholder="e.g., 1995" />'; 289 echo '<p class="description">Year when the institution was established</p>'; 290 echo '</div>'; 247 291 } 248 292 … … 250 294 { 251 295 $collageAddress = get_option('cbedu_results_collage_address'); 252 echo '<textarea name="cbedu_results_collage_address" rows="5" cols="50">' . esc_textarea($collageAddress) . '</textarea>'; 296 echo '<div class="cbedu-field-wrapper">'; 297 echo '<textarea name="cbedu_results_collage_address" rows="5" cols="50" placeholder="Enter complete address with city, state, and postal code">' . esc_textarea($collageAddress) . '</textarea>'; 298 echo '<p class="description">Complete postal address of the institution</p>'; 299 echo '</div>'; 253 300 } 254 301 … … 257 304 { 258 305 $collagePhoneNumber = get_option('cbedu_results_collage_phone_number'); 259 echo '<input type="text" name="cbedu_results_collage_phone_number" value="' . esc_attr($collagePhoneNumber) . '" />'; 306 echo '<div class="cbedu-field-wrapper">'; 307 echo '<input type="text" name="cbedu_results_collage_phone_number" value="' . esc_attr($collagePhoneNumber) . '" placeholder="e.g., +880-123-456-7890" />'; 308 echo '<p class="description">Primary contact phone number</p>'; 309 echo '</div>'; 260 310 } 261 311 … … 263 313 { 264 314 $collageEmailAddress = get_option('cbedu_results_collage_email_address'); 265 echo '<input type="email" name="cbedu_results_collage_email_address" value="' . esc_attr($collageEmailAddress) . '" />'; 315 echo '<div class="cbedu-field-wrapper">'; 316 echo '<input type="email" name="cbedu_results_collage_email_address" value="' . esc_attr($collageEmailAddress) . '" placeholder="e.g., info@institution.edu" />'; 317 echo '<p class="description">Official email address for contact</p>'; 318 echo '</div>'; 266 319 } 267 320 … … 270 323 { 271 324 $collageWebsiteUrl = get_option('cbedu_results_collage_website_url'); 272 echo '<input type="url" name="cbedu_results_collage_website_url" value="' . esc_url($collageWebsiteUrl) . '" />'; 325 echo '<div class="cbedu-field-wrapper">'; 326 echo '<input type="url" name="cbedu_results_collage_website_url" value="' . esc_url($collageWebsiteUrl) . '" placeholder="https://www.institution.edu" />'; 327 echo '<p class="description">Official website URL</p>'; 328 echo '</div>'; 273 329 } 274 330 … … 276 332 { 277 333 $bannerHeading = get_option('cbedu_results_banner_heading'); 278 echo '<input type="text" name="cbedu_results_banner_heading" value="' . esc_attr($bannerHeading) . '" />'; 334 echo '<div class="cbedu-field-wrapper">'; 335 echo '<input type="text" name="cbedu_results_banner_heading" value="' . esc_attr($bannerHeading) . '" placeholder="Enter custom heading text for result banners" />'; 336 echo '<p class="description">Custom heading text that appears on result pages</p>'; 337 echo '</div>'; 279 338 } 280 339 } -
edu-results-publishing/tags/1.2.0/inc/custom-fields.php
r3019484 r3422911 29 29 add_action('wp_ajax_add_search_registration_numbers', array($this, 'add_search_registration_numbers')); 30 30 // add_action('wp_ajax_nopriv_add_search_registration_numbers', array($this, 'add_search_registration_numbers')); 31 32 // Hook to handle auto-draft deletion 33 add_action('admin_init', array($this, 'handle_auto_draft_deletion')); 34 } 35 36 /** 37 * Handle auto-draft deletion via admin actions 38 */ 39 public function handle_auto_draft_deletion() 40 { 41 // Check if we're trying to delete an auto-draft 42 if (isset($_GET['action']) && $_GET['action'] === 'trash' && isset($_GET['post'])) { 43 $post_id = intval($_GET['post']); 44 $post = get_post($post_id); 45 46 if ($post && $post->post_status === 'auto-draft' && 47 in_array($post->post_type, array('cbedu_students', 'cbedu_subjects', 'cbedu_results'))) { 48 49 // Force delete auto-draft instead of trashing 50 wp_delete_post($post_id, true); 51 52 // Redirect back to the list 53 wp_redirect(admin_url('edit.php?post_type=' . $post->post_type . '&deleted=1')); 54 exit; 55 } 56 } 57 58 // Handle bulk deletion 59 if (isset($_GET['action']) && $_GET['action'] === 'trash' && isset($_GET['post']) && is_array($_GET['post'])) { 60 foreach ($_GET['post'] as $post_id) { 61 $post_id = intval($post_id); 62 $post = get_post($post_id); 63 64 if ($post && $post->post_status === 'auto-draft' && 65 in_array($post->post_type, array('cbedu_students', 'cbedu_subjects', 'cbedu_results'))) { 66 67 // Force delete auto-draft instead of trashing 68 wp_delete_post($post_id, true); 69 } 70 } 71 } 31 72 } 32 73 … … 41 82 42 83 add_action('save_post', array($this, 'save_student_fields')); 43 add_action('save_post', array($this, 'cbedu_check_unique_registration_number')); 84 add_action('save_post', array($this, 'cbedu_check_unique_registration_number')); 85 86 // Clean up auto-draft posts 87 add_action('wp_scheduled_delete', array($this, 'cleanup_auto_drafts')); 88 89 // Allow deletion of auto-draft posts 90 add_filter('user_has_cap', array($this, 'allow_auto_draft_deletion'), 10, 4); 91 92 // Disable autosave for our custom post types 93 add_action('admin_print_scripts', array($this, 'disable_autosave')); 94 } 95 96 /** 97 * Disable autosave for custom post types 98 */ 99 public function disable_autosave() 100 { 101 global $post; 102 103 if ($post && in_array($post->post_type, array('cbedu_students', 'cbedu_subjects', 'cbedu_results'))) { 104 wp_dequeue_script('autosave'); 105 } 106 } 107 108 /** 109 * Allow users to delete auto-draft posts for our custom post types 110 */ 111 public function allow_auto_draft_deletion($allcaps, $caps, $args, $user) 112 { 113 // Check if this is a delete operation 114 if (isset($args[0]) && in_array($args[0], array('delete_post', 'delete_posts'))) { 115 // Check if we have a post ID 116 if (isset($args[2])) { 117 $post_id = $args[2]; 118 $post = get_post($post_id); 119 120 // If it's an auto-draft of our custom post types, allow deletion 121 if ($post && in_array($post->post_type, array('cbedu_students', 'cbedu_subjects', 'cbedu_results'))) { 122 if ($post->post_status === 'auto-draft') { 123 $allcaps['delete_posts'] = true; 124 $allcaps['delete_published_posts'] = true; 125 $allcaps['delete_others_posts'] = true; 126 } 127 } 128 } 129 } 130 131 return $allcaps; 132 } 133 134 /** 135 * Clean up old auto-draft posts for cbedu custom post types 136 */ 137 public function cleanup_auto_drafts() 138 { 139 global $wpdb; 140 141 // Delete auto-drafts older than 7 days for our custom post types 142 $post_types = array('cbedu_students', 'cbedu_subjects', 'cbedu_results'); 143 144 foreach ($post_types as $post_type) { 145 $wpdb->query($wpdb->prepare( 146 "DELETE FROM {$wpdb->posts} 147 WHERE post_type = %s 148 AND post_status = 'auto-draft' 149 AND DATE_SUB(NOW(), INTERVAL 7 DAY) > post_date", 150 $post_type 151 )); 152 } 44 153 } 45 154 … … 73 182 wp_nonce_field('cbedu_save_student_nonce_action', 'cbedu_save_student_nonce'); 74 183 75 184 // Get all meta values 76 185 $id_number = get_post_meta($post->ID, 'cbedu_result_std_id', true); 77 186 $std_registration_number = get_post_meta($post->ID, 'cbedu_result_std_registration_number', true); … … 79 188 $mother_name = get_post_meta($post->ID, 'cbedu_result_std_mother_name', true); 80 189 $dob = get_post_meta($post->ID, 'cbedu_result_std_dob', true); 81 82 190 $gender = get_post_meta($post->ID, 'cbedu_result_std_gender', true); 83 191 $phone = get_post_meta($post->ID, 'cbedu_result_std_phone', true); … … 92 200 $birth_registration_number = get_post_meta($post->ID, 'cbedu_result_std_birth_registration_number', true); 93 201 $nid_number = get_post_meta($post->ID, 'cbedu_result_std_nid_number', true); 94 95 96 // Output HTML inputs for each field97 202 ?> 98 <table> 99 <tr> 100 <td> 101 <label for="cbedu_result_std_id"><?php esc_html_e('ID Number:', 'edu-results'); ?></label> 102 </td> 103 <td> 104 <input class="regular-text" style="padding: 7px 10px;" type="text" id="cbedu_result_std_id" name="cbedu_result_std_id" value="<?php echo esc_attr($id_number); ?>" /> 105 </td> 106 </tr> 107 <tr> 108 <td> 109 <label for="cbedu_result_std_registration_number"><?php esc_html_e('Registration Number:', 'edu-results'); ?></label> 110 </td> 111 <td> 112 <input class="regular-text" style="padding: 7px 10px;" type="text" id="cbedu_result_std_registration_number" name="cbedu_result_std_registration_number" value="<?php echo esc_attr($std_registration_number); ?>" /> 113 </td> 114 </tr> 115 <tr> 116 <td> 117 <label for="cbedu_result_std_father_name"><?php esc_html_e('Father Name:', 'edu-results'); ?></label> 118 </td> 119 <td> 120 <input class="regular-text" style="padding: 7px 10px;" type="text" id="cbedu_result_std_father_name" name="cbedu_result_std_father_name" value="<?php echo esc_attr($father_name); ?>" /> 121 </td> 122 </tr> 123 <tr> 124 <td> 125 <label for="cbedu_result_std_mother_name"><?php esc_html_e('Mother Name:', 'edu-results'); ?></label> 126 </td> 127 <td> 128 <input class="regular-text" style="padding: 7px 10px;" type="text" id="cbedu_result_std_mother_name" name="cbedu_result_std_mother_name" value="<?php echo esc_attr($mother_name); ?>" /> 129 </td> 130 </tr> 131 <tr> 132 <td> 133 <label for="cbedu_result_std_dob"><?php esc_html_e('Date of Birth:', 'edu-results'); ?></label> 134 </td> 135 <td> 136 <input class="regular-text" style="padding: 7px 10px;" type="date" id="cbedu_result_std_dob" name="cbedu_result_std_dob" value="<?php echo esc_attr($dob); ?>" /> 137 </td> 138 </tr> 139 <tr> 140 <td><label for="cbedu_result_std_gender"><?php esc_html_e('Gender:', 'edu-results'); ?></label></td> 141 <td> 142 <select id="cbedu_result_std_gender" name="cbedu_result_std_gender"> 143 <option value="Male" <?php selected($gender, 'Male'); ?>><?php esc_html_e('Male', 'edu-results'); ?></option> 144 <option value="Female" <?php selected($gender, 'Female'); ?>><?php esc_html_e('Female', 'edu-results'); ?></option> 145 <option value="Other" <?php selected($gender, 'Other'); ?>><?php esc_html_e('Other', 'edu-results'); ?></option> 146 </select> 147 </td> 148 </tr> 149 150 <tr> 151 <td><label for="cbedu_result_std_phone"><?php esc_html_e('Phone Number:', 'edu-results'); ?></label></td> 152 <td><input class="regular-text" type="text" id="cbedu_result_std_phone" name="cbedu_result_std_phone" value="<?php echo esc_attr($phone); ?>" /></td> 153 </tr> 154 <tr> 155 <td><label for="cbedu_result_std_email"><?php esc_html_e('Email Address:', 'edu-results'); ?></label></td> 156 <td><input class="regular-text" type="email" id="cbedu_result_std_email" name="cbedu_result_std_email" value="<?php echo esc_attr($email); ?>" /></td> 157 </tr> 158 <tr> 159 <td><label for="cbedu_result_std_blood_group"><?php esc_html_e('Blood Group:', 'edu-results'); ?></label></td> 160 <td> 161 <select id="cbedu_result_std_blood_group" name="cbedu_result_std_blood_group"> 162 <option value=""><?php esc_html_e('Select Blood Group', 'edu-results'); ?></option> 163 <option value="A+" <?php selected($blood_group, 'A+'); ?>><?php esc_html_e('A+', 'edu-results'); ?></option> 164 <option value="A-" <?php selected($blood_group, 'A-'); ?>><?php esc_html_e('A-', 'edu-results'); ?></option> 165 <option value="B+" <?php selected($blood_group, 'B+'); ?>><?php esc_html_e('B+', 'edu-results'); ?></option> 166 <option value="B-" <?php selected($blood_group, 'B-'); ?>><?php esc_html_e('B-', 'edu-results'); ?></option> 167 <option value="AB+" <?php selected($blood_group, 'AB+'); ?>><?php esc_html_e('AB+', 'edu-results'); ?></option> 168 <option value="AB-" <?php selected($blood_group, 'AB-'); ?>><?php esc_html_e('AB-', 'edu-results'); ?></option> 169 <option value="O+" <?php selected($blood_group, 'O+'); ?>><?php esc_html_e('O+', 'edu-results'); ?></option> 170 <option value="O-" <?php selected($blood_group, 'O-'); ?>><?php esc_html_e('O-', 'edu-results'); ?></option> 171 </select> 172 </td> 173 </tr> 174 <tr> 175 <td><label for="cbedu_result_std_guardian_phone"><?php esc_html_e('Guardian Phone Number:', 'edu-results'); ?></label></td> 176 <td><input class="regular-text" type="text" id="cbedu_result_std_guardian_phone" name="cbedu_result_std_guardian_phone" value="<?php echo esc_attr($guardian_phone); ?>" /></td> 177 </tr> 178 <tr> 179 <td><label for="cbedu_result_std_fathers_qualification"><?php esc_html_e('Father\'s Qualification:', 'edu-results'); ?></label></td> 180 <td><input class="regular-text" type="text" id="cbedu_result_std_fathers_qualification" name="cbedu_result_std_fathers_qualification" value="<?php echo esc_attr($fathers_qualification); ?>" /></td> 181 </tr> 182 <tr> 183 <td><label for="cbedu_result_std_fathers_occupation"><?php esc_html_e('Father\'s Occupation:', 'edu-results'); ?></label></td> 184 <td><input class="regular-text" type="text" id="cbedu_result_std_fathers_occupation" name="cbedu_result_std_fathers_occupation" value="<?php echo esc_attr($fathers_occupation); ?>" /></td> 185 </tr> 186 <tr> 187 <td><label for="cbedu_result_std_mothers_occupation"><?php esc_html_e('Mother\'s Occupation:', 'edu-results'); ?></label></td> 188 <td><input class="regular-text" type="text" id="cbedu_result_std_mothers_occupation" name="cbedu_result_std_mothers_occupation" value="<?php echo esc_attr($mothers_occupation); ?>" /></td> 189 </tr> 190 <tr> 191 <td><label for="cbedu_result_std_mothers_qualification"><?php esc_html_e('Mother\'s Qualification:', 'edu-results'); ?></label></td> 192 <td><input class="regular-text" type="text" id="cbedu_result_std_mothers_qualification" name="cbedu_result_std_mothers_qualification" value="<?php echo esc_attr($mothers_qualification); ?>" /></td> 193 </tr> 194 <tr> 195 <td><label for="cbedu_result_std_birth_registration_number"><?php esc_html_e('Birth Registration Number:', 'edu-results'); ?></label></td> 196 <td><input class="regular-text" type="text" id="cbedu_result_std_birth_registration_number" name="cbedu_result_std_birth_registration_number" value="<?php echo esc_attr($birth_registration_number); ?>" /></td> 197 </tr> 198 <tr> 199 <td><label for="cbedu_result_std_nid_number"><?php esc_html_e('NID Number:', 'edu-results'); ?></label></td> 200 <td><input class="regular-text" type="text" id="cbedu_result_std_nid_number" name="cbedu_result_std_nid_number" value="<?php echo esc_attr($nid_number); ?>" /></td> 201 </tr> 202 <tr> 203 <td><label for="cbedu_result_std_address"><?php esc_html_e('Address:', 'edu-results'); ?></label></td> 204 <td> 205 <textarea id="cbedu_result_std_address" name="cbedu_result_std_address" rows="4" cols="50"><?php echo esc_textarea($address); ?></textarea> 206 </td> 207 </tr> 208 209 </table> 203 <div class="cbedu-meta-box-wrap"> 204 <!-- Basic Information Section --> 205 <div class="cbedu-field-section"> 206 <h3 class="cbedu-section-header"><?php esc_html_e('Basic Information', 'edu-results'); ?></h3> 207 <div class="cbedu-section-content"> 208 <div class="cbedu-field-row"> 209 <div class="cbedu-field-group"> 210 <label class="cbedu-field-label" for="cbedu_result_std_id"> 211 <?php esc_html_e('ID Number', 'edu-results'); ?> 212 <span class="required">*</span> 213 </label> 214 <input class="cbedu-field-input" type="text" id="cbedu_result_std_id" name="cbedu_result_std_id" value="<?php echo esc_attr($id_number); ?>" placeholder="<?php esc_attr_e('Enter student ID', 'edu-results'); ?>" /> 215 </div> 216 217 <div class="cbedu-field-group"> 218 <label class="cbedu-field-label" for="cbedu_result_std_registration_number"> 219 <?php esc_html_e('Registration Number', 'edu-results'); ?> 220 <span class="required">*</span> 221 </label> 222 <input class="cbedu-field-input" type="text" id="cbedu_result_std_registration_number" name="cbedu_result_std_registration_number" value="<?php echo esc_attr($std_registration_number); ?>" placeholder="<?php esc_attr_e('Enter registration number', 'edu-results'); ?>" /> 223 </div> 224 </div> 225 226 <div class="cbedu-field-row"> 227 <div class="cbedu-field-group"> 228 <label class="cbedu-field-label" for="cbedu_result_std_dob"> 229 <?php esc_html_e('Date of Birth', 'edu-results'); ?> 230 </label> 231 <input class="cbedu-field-input" type="date" id="cbedu_result_std_dob" name="cbedu_result_std_dob" value="<?php echo esc_attr($dob); ?>" /> 232 </div> 233 234 <div class="cbedu-field-group"> 235 <label class="cbedu-field-label" for="cbedu_result_std_gender"> 236 <?php esc_html_e('Gender', 'edu-results'); ?> 237 </label> 238 <select class="cbedu-field-select" id="cbedu_result_std_gender" name="cbedu_result_std_gender"> 239 <option value=""><?php esc_html_e('Select Gender', 'edu-results'); ?></option> 240 <option value="Male" <?php selected($gender, 'Male'); ?>><?php esc_html_e('Male', 'edu-results'); ?></option> 241 <option value="Female" <?php selected($gender, 'Female'); ?>><?php esc_html_e('Female', 'edu-results'); ?></option> 242 <option value="Other" <?php selected($gender, 'Other'); ?>><?php esc_html_e('Other', 'edu-results'); ?></option> 243 </select> 244 </div> 245 246 <div class="cbedu-field-group"> 247 <label class="cbedu-field-label" for="cbedu_result_std_blood_group"> 248 <?php esc_html_e('Blood Group', 'edu-results'); ?> 249 </label> 250 <select class="cbedu-field-select" id="cbedu_result_std_blood_group" name="cbedu_result_std_blood_group"> 251 <option value=""><?php esc_html_e('Select Blood Group', 'edu-results'); ?></option> 252 <option value="A+" <?php selected($blood_group, 'A+'); ?>>A+</option> 253 <option value="A-" <?php selected($blood_group, 'A-'); ?>>A-</option> 254 <option value="B+" <?php selected($blood_group, 'B+'); ?>>B+</option> 255 <option value="B-" <?php selected($blood_group, 'B-'); ?>>B-</option> 256 <option value="AB+" <?php selected($blood_group, 'AB+'); ?>>AB+</option> 257 <option value="AB-" <?php selected($blood_group, 'AB-'); ?>>AB-</option> 258 <option value="O+" <?php selected($blood_group, 'O+'); ?>>O+</option> 259 <option value="O-" <?php selected($blood_group, 'O-'); ?>>O-</option> 260 </select> 261 </div> 262 </div> 263 </div> 264 </div> 265 266 <!-- Contact Information Section --> 267 <div class="cbedu-field-section"> 268 <h3 class="cbedu-section-header"><?php esc_html_e('Contact Information', 'edu-results'); ?></h3> 269 <div class="cbedu-section-content"> 270 <div class="cbedu-field-row"> 271 <div class="cbedu-field-group"> 272 <label class="cbedu-field-label" for="cbedu_result_std_phone"> 273 <?php esc_html_e('Phone Number', 'edu-results'); ?> 274 </label> 275 <input class="cbedu-field-input" type="text" id="cbedu_result_std_phone" name="cbedu_result_std_phone" value="<?php echo esc_attr($phone); ?>" placeholder="<?php esc_attr_e('+880...', 'edu-results'); ?>" /> 276 </div> 277 278 <div class="cbedu-field-group"> 279 <label class="cbedu-field-label" for="cbedu_result_std_email"> 280 <?php esc_html_e('Email Address', 'edu-results'); ?> 281 </label> 282 <input class="cbedu-field-input" type="email" id="cbedu_result_std_email" name="cbedu_result_std_email" value="<?php echo esc_attr($email); ?>" placeholder="<?php esc_attr_e('student@example.com', 'edu-results'); ?>" /> 283 </div> 284 285 <div class="cbedu-field-group"> 286 <label class="cbedu-field-label" for="cbedu_result_std_guardian_phone"> 287 <?php esc_html_e('Guardian Phone', 'edu-results'); ?> 288 </label> 289 <input class="cbedu-field-input" type="text" id="cbedu_result_std_guardian_phone" name="cbedu_result_std_guardian_phone" value="<?php echo esc_attr($guardian_phone); ?>" placeholder="<?php esc_attr_e('+880...', 'edu-results'); ?>" /> 290 </div> 291 </div> 292 293 <div class="cbedu-field-row"> 294 <div class="cbedu-field-group cbedu-field-full"> 295 <label class="cbedu-field-label" for="cbedu_result_std_address"> 296 <?php esc_html_e('Address', 'edu-results'); ?> 297 </label> 298 <textarea class="cbedu-field-textarea" id="cbedu_result_std_address" name="cbedu_result_std_address" rows="3" placeholder="<?php esc_attr_e('Enter full address...', 'edu-results'); ?>"><?php echo esc_textarea($address); ?></textarea> 299 </div> 300 </div> 301 </div> 302 </div> 303 304 <!-- Family Information Section --> 305 <div class="cbedu-field-section"> 306 <h3 class="cbedu-section-header"><?php esc_html_e('Family Information', 'edu-results'); ?></h3> 307 <div class="cbedu-section-content"> 308 <div class="cbedu-field-row"> 309 <div class="cbedu-field-group"> 310 <label class="cbedu-field-label" for="cbedu_result_std_father_name"> 311 <?php esc_html_e("Father's Name", 'edu-results'); ?> 312 </label> 313 <input class="cbedu-field-input" type="text" id="cbedu_result_std_father_name" name="cbedu_result_std_father_name" value="<?php echo esc_attr($father_name); ?>" placeholder="<?php esc_attr_e("Enter father's name", 'edu-results'); ?>" /> 314 </div> 315 316 <div class="cbedu-field-group"> 317 <label class="cbedu-field-label" for="cbedu_result_std_fathers_occupation"> 318 <?php esc_html_e("Father's Occupation", 'edu-results'); ?> 319 </label> 320 <input class="cbedu-field-input" type="text" id="cbedu_result_std_fathers_occupation" name="cbedu_result_std_fathers_occupation" value="<?php echo esc_attr($fathers_occupation); ?>" placeholder="<?php esc_attr_e('Enter occupation', 'edu-results'); ?>" /> 321 </div> 322 323 <div class="cbedu-field-group"> 324 <label class="cbedu-field-label" for="cbedu_result_std_fathers_qualification"> 325 <?php esc_html_e("Father's Qualification", 'edu-results'); ?> 326 </label> 327 <input class="cbedu-field-input" type="text" id="cbedu_result_std_fathers_qualification" name="cbedu_result_std_fathers_qualification" value="<?php echo esc_attr($fathers_qualification); ?>" placeholder="<?php esc_attr_e('Enter qualification', 'edu-results'); ?>" /> 328 </div> 329 </div> 330 331 <div class="cbedu-field-row"> 332 <div class="cbedu-field-group"> 333 <label class="cbedu-field-label" for="cbedu_result_std_mother_name"> 334 <?php esc_html_e("Mother's Name", 'edu-results'); ?> 335 </label> 336 <input class="cbedu-field-input" type="text" id="cbedu_result_std_mother_name" name="cbedu_result_std_mother_name" value="<?php echo esc_attr($mother_name); ?>" placeholder="<?php esc_attr_e("Enter mother's name", 'edu-results'); ?>" /> 337 </div> 338 339 <div class="cbedu-field-group"> 340 <label class="cbedu-field-label" for="cbedu_result_std_mothers_occupation"> 341 <?php esc_html_e("Mother's Occupation", 'edu-results'); ?> 342 </label> 343 <input class="cbedu-field-input" type="text" id="cbedu_result_std_mothers_occupation" name="cbedu_result_std_mothers_occupation" value="<?php echo esc_attr($mothers_occupation); ?>" placeholder="<?php esc_attr_e('Enter occupation', 'edu-results'); ?>" /> 344 </div> 345 346 <div class="cbedu-field-group"> 347 <label class="cbedu-field-label" for="cbedu_result_std_mothers_qualification"> 348 <?php esc_html_e("Mother's Qualification", 'edu-results'); ?> 349 </label> 350 <input class="cbedu-field-input" type="text" id="cbedu_result_std_mothers_qualification" name="cbedu_result_std_mothers_qualification" value="<?php echo esc_attr($mothers_qualification); ?>" placeholder="<?php esc_attr_e('Enter qualification', 'edu-results'); ?>" /> 351 </div> 352 </div> 353 </div> 354 </div> 355 356 <!-- Government Documents Section --> 357 <div class="cbedu-field-section"> 358 <h3 class="cbedu-section-header"><?php esc_html_e('Government Documents', 'edu-results'); ?></h3> 359 <div class="cbedu-section-content"> 360 <div class="cbedu-field-row"> 361 <div class="cbedu-field-group"> 362 <label class="cbedu-field-label" for="cbedu_result_std_birth_registration_number"> 363 <?php esc_html_e('Birth Registration Number', 'edu-results'); ?> 364 </label> 365 <input class="cbedu-field-input" type="text" id="cbedu_result_std_birth_registration_number" name="cbedu_result_std_birth_registration_number" value="<?php echo esc_attr($birth_registration_number); ?>" placeholder="<?php esc_attr_e('Enter birth registration number', 'edu-results'); ?>" /> 366 </div> 367 368 <div class="cbedu-field-group"> 369 <label class="cbedu-field-label" for="cbedu_result_std_nid_number"> 370 <?php esc_html_e('NID Number', 'edu-results'); ?> 371 </label> 372 <input class="cbedu-field-input" type="text" id="cbedu_result_std_nid_number" name="cbedu_result_std_nid_number" value="<?php echo esc_attr($nid_number); ?>" placeholder="<?php esc_attr_e('Enter NID number', 'edu-results'); ?>" /> 373 </div> 374 </div> 375 </div> 376 </div> 377 </div> 210 378 <?php 211 379 } … … 220 388 // Save the custom field values when the post is saved 221 389 if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { 390 return; 391 } 392 393 // Skip auto-draft, trash, and inherit posts 394 $post_status = get_post_status($post_id); 395 if (in_array($post_status, array('auto-draft', 'trash', 'inherit'))) { 396 return; 397 } 398 399 // Check post type 400 if (get_post_type($post_id) !== 'cbedu_students') { 222 401 return; 223 402 } … … 346 525 // Output HTML input for subject code 347 526 ?> 348 <table> 349 <tr> 350 <td> 351 <label for="cbedu_subject_code"><?php esc_html_e('Subject Code:', 'edu-results'); ?></label> 352 </td> 353 <td> 354 <input class="regular-text" type="text" id="cbedu_subject_code" name="cbedu_subject_code" value="<?php echo esc_attr($subject_code); ?>" /> 355 </td> 356 </tr> 357 </table> 527 <div class="cbedu-meta-box-wrap"> 528 <div class="cbedu-field-section"> 529 <h3 class="cbedu-section-header"><?php esc_html_e('Subject Information', 'edu-results'); ?></h3> 530 <div class="cbedu-section-content"> 531 <div class="cbedu-field-row"> 532 <div class="cbedu-field-group"> 533 <label class="cbedu-field-label" for="cbedu_subject_code"> 534 <?php esc_html_e('Subject Code', 'edu-results'); ?> 535 </label> 536 <input class="cbedu-field-input" type="text" id="cbedu_subject_code" name="cbedu_subject_code" value="<?php echo esc_attr($subject_code); ?>" placeholder="<?php esc_attr_e('e.g., MATH101', 'edu-results'); ?>" /> 537 <p class="cbedu-field-description"><?php esc_html_e('Enter a unique code for this subject', 'edu-results'); ?></p> 538 </div> 539 </div> 540 </div> 541 </div> 542 </div> 358 543 <?php 359 544 } … … 368 553 // Save the custom field value when the post is saved 369 554 if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { 555 return; 556 } 557 558 // Skip auto-draft, trash, and inherit posts 559 $post_status = get_post_status($post_id); 560 if (in_array($post_status, array('auto-draft', 'trash', 'inherit'))) { 561 return; 562 } 563 564 // Check post type 565 if (get_post_type($post_id) !== 'cbedu_subjects') { 370 566 return; 371 567 } … … 440 636 441 637 ?> 442 <table> 443 <?php 444 $this->render_registration_number_input($post); 445 ?> 446 <tr> 447 <td> 448 <label for="cbedu_result_std_roll"><?php esc_html_e('Roll:', 'edu-results'); ?></label> 449 </td> 450 <td> 451 <input class="regular-text" style="padding: 7px 10px;" type="text" id="cbedu_result_std_roll" name="cbedu_result_std_roll" value="<?php echo esc_attr($roll); ?>" /> 452 </td> 453 </tr> 454 <tr> 455 <td><label for="cbedu_result_std_name"><?php esc_html_e('Student Name:', 'edu-results'); ?></label></td> 456 <td><input type="text" style="padding: 7px 10px;width: 100%;" id="cbedu_result_std_name" name="cbedu_result_std_name" value="<?php echo esc_attr($student_name) ?>" readonly /></td> 457 </tr> 458 <tr> 459 <td><label for="cbedu_result_std_fathers_name"><?php esc_html_e('Father\'s Name:', 'edu-results'); ?></label></td> 460 <td><input type="text" style="padding: 7px 10px;width: 100%;" id="cbedu_result_std_fathers_name" name="cbedu_result_std_fathers_name" value="<?php echo esc_attr($fathers_name); ?>" readonly /></td> 461 </tr> 462 <tr> 463 <td><label for="cbedu_result_std_mothers_name"><?php esc_html_e('Mother\'s Name:', 'edu-results'); ?></label></td> 464 <td><input type="text" style="padding: 7px 10px;width: 100%;" id="cbedu_result_std_mothers_name" name="cbedu_result_std_mothers_name" value="<?php echo esc_attr($mothers_name); ?>" readonly /></td> 465 </tr> 466 <tr> 467 <td> 468 <label for="cbedu_result_std_student_type"><?php esc_html_e('Student Type:', 'edu-results'); ?></label> 469 </td> 470 <td> 471 <input class="regular-text" style="padding: 7px 10px;" type="text" id="cbedu_result_std_student_type" name="cbedu_result_std_student_type" value="<?php echo esc_attr($student_type); ?>" /> 472 </td> 473 </tr> 474 <tr style="margin-top: 10px;margin-bottom:10px;"> 475 <td> 476 <label><?php esc_html_e('Result Status:', 'edu-results'); ?></label> 477 </td> 478 <td> 479 <input type="radio" id="cbedu_result_std_result_status_passed" name="cbedu_result_std_result_status" value="Passed" <?php checked($result_status, 'Passed'); ?> /> 480 <label for="cbedu_result_std_result_status_passed" style="margin-right: 10px;"><?php esc_html_e('Passed', 'edu-results'); ?></label> 481 482 <input type="radio" id="cbedu_result_std_result_status_failed" name="cbedu_result_std_result_status" value="Failed" <?php checked($result_status, 'Failed'); ?> /> 483 <label for="cbedu_result_std_result_status_failed"><?php esc_html_e('Failed', 'edu-results'); ?></label> 484 </td> 485 </tr> 486 <tr> 487 <td> 488 <label for="cbedu_result_std_gpa"><?php esc_html_e('GPA:', 'edu-results'); ?></label> 489 </td> 490 <td> 491 <input class="regular-text" style="padding: 7px 10px;" type="text" id="cbedu_result_std_gpa" name="cbedu_result_std_gpa" value="<?php echo esc_attr($gpa); ?>" /> 492 </td> 493 </tr> 494 <tr> 495 <td> 496 <label for="cbedu_result_std_was_gpa"><?php _e('GPA <abbr title="Without additional subject">(WAS)</abbr>:', 'edu-results'); ?></label> 497 </td> 498 <td> 499 <input class="regular-text" style="padding: 7px 10px;" type="text" id="cbedu_result_std_was_gpa" name="cbedu_result_std_was_gpa" value="<?php echo esc_attr($was_gpa); ?>" /> 500 </td> 501 </tr> 502 </table> 638 <div class="cbedu-meta-box-wrap"> 639 <!-- Student Selection Section --> 640 <div class="cbedu-field-section"> 641 <h3 class="cbedu-section-header"><?php esc_html_e('Student Selection', 'edu-results'); ?></h3> 642 <div class="cbedu-section-content"> 643 <div class="cbedu-field-row"> 644 <div class="cbedu-field-group"> 645 <label class="cbedu-field-label" for="cbedu_result_std_registration_number"> 646 <?php esc_html_e('Registration Number', 'edu-results'); ?> 647 <span class="required">*</span> 648 </label> 649 <input class="cbedu-field-input cbedu-registration-number-autocomplete" type="text" id="cbedu_result_std_registration_number" name="cbedu_result_std_registration_number" value="<?php echo esc_attr($current_reg_number); ?>" placeholder="<?php esc_attr_e('Start typing...', 'edu-results'); ?>" /> 650 <p class="cbedu-field-description"><?php esc_html_e('Type to search and select student registration number', 'edu-results'); ?></p> 651 </div> 652 <div class="cbedu-field-group"> 653 <label class="cbedu-field-label" for="cbedu_result_std_roll"> 654 <?php esc_html_e('Roll Number', 'edu-results'); ?> 655 </label> 656 <input class="cbedu-field-input" type="text" id="cbedu_result_std_roll" name="cbedu_result_std_roll" value="<?php echo esc_attr($roll); ?>" placeholder="<?php esc_attr_e('Enter roll number', 'edu-results'); ?>" /> 657 </div> 658 </div> 659 660 <div class="cbedu-field-row"> 661 <div class="cbedu-field-group"> 662 <label class="cbedu-field-label" for="cbedu_result_std_name"> 663 <?php esc_html_e('Student Name', 'edu-results'); ?> 664 </label> 665 <input class="cbedu-field-input" type="text" id="cbedu_result_std_name" name="cbedu_result_std_name" value="<?php echo esc_attr($student_name); ?>" readonly style="background-color: #f0f0f1; cursor: not-allowed;" /> 666 </div> 667 <div class="cbedu-field-group"> 668 <label class="cbedu-field-label" for="cbedu_result_std_fathers_name"> 669 <?php esc_html_e("Father's Name", 'edu-results'); ?> 670 </label> 671 <input class="cbedu-field-input" type="text" id="cbedu_result_std_fathers_name" name="cbedu_result_std_fathers_name" value="<?php echo esc_attr($fathers_name); ?>" readonly style="background-color: #f0f0f1; cursor: not-allowed;" /> 672 </div> 673 <div class="cbedu-field-group"> 674 <label class="cbedu-field-label" for="cbedu_result_std_mothers_name"> 675 <?php esc_html_e("Mother's Name", 'edu-results'); ?> 676 </label> 677 <input class="cbedu-field-input" type="text" id="cbedu_result_std_mothers_name" name="cbedu_result_std_mothers_name" value="<?php echo esc_attr($mothers_name); ?>" readonly style="background-color: #f0f0f1; cursor: not-allowed;" /> 678 </div> 679 </div> 680 </div> 681 </div> 682 683 <!-- Result Details Section --> 684 <div class="cbedu-field-section"> 685 <h3 class="cbedu-section-header"><?php esc_html_e('Result Details', 'edu-results'); ?></h3> 686 <div class="cbedu-section-content"> 687 <div class="cbedu-field-row"> 688 <div class="cbedu-field-group"> 689 <label class="cbedu-field-label" for="cbedu_result_std_student_type"> 690 <?php esc_html_e('Student Type', 'edu-results'); ?> 691 </label> 692 <input class="cbedu-field-input" type="text" id="cbedu_result_std_student_type" name="cbedu_result_std_student_type" value="<?php echo esc_attr($student_type); ?>" placeholder="<?php esc_attr_e('e.g., Regular, Private', 'edu-results'); ?>" /> 693 </div> 694 695 <div class="cbedu-field-group"> 696 <label class="cbedu-field-label"> 697 <?php esc_html_e('Result Status', 'edu-results'); ?> 698 </label> 699 <div style="display: flex; gap: 20px; align-items: center; margin-top: 8px;"> 700 <label style="display: flex; align-items: center; gap: 6px; cursor: pointer; font-weight: normal;"> 701 <input type="radio" id="cbedu_result_std_result_status_passed" name="cbedu_result_std_result_status" value="Passed" <?php checked($result_status, 'Passed'); ?> /> 702 <?php esc_html_e('Passed', 'edu-results'); ?> 703 </label> 704 <label style="display: flex; align-items: center; gap: 6px; cursor: pointer; font-weight: normal;"> 705 <input type="radio" id="cbedu_result_std_result_status_failed" name="cbedu_result_std_result_status" value="Failed" <?php checked($result_status, 'Failed'); ?> /> 706 <?php esc_html_e('Failed', 'edu-results'); ?> 707 </label> 708 </div> 709 </div> 710 </div> 711 712 <div class="cbedu-field-row"> 713 <div class="cbedu-field-group"> 714 <label class="cbedu-field-label" for="cbedu_result_std_gpa"> 715 <?php esc_html_e('GPA', 'edu-results'); ?> 716 </label> 717 <input class="cbedu-field-input" type="text" id="cbedu_result_std_gpa" name="cbedu_result_std_gpa" value="<?php echo esc_attr($gpa); ?>" placeholder="<?php esc_attr_e('e.g., 4.50', 'edu-results'); ?>" /> 718 </div> 719 720 <div class="cbedu-field-group"> 721 <label class="cbedu-field-label" for="cbedu_result_std_was_gpa"> 722 <?php esc_html_e('GPA (WAS)', 'edu-results'); ?> 723 </label> 724 <input class="cbedu-field-input" type="text" id="cbedu_result_std_was_gpa" name="cbedu_result_std_was_gpa" value="<?php echo esc_attr($was_gpa); ?>" placeholder="<?php esc_attr_e('e.g., 4.50', 'edu-results'); ?>" /> 725 <p class="cbedu-field-description"><?php esc_html_e('GPA Without Additional Subject', 'edu-results'); ?></p> 726 </div> 727 </div> 728 </div> 729 </div> 730 </div> 503 731 <?php 504 732 } … … 509 737 * @param object $post The post object. 510 738 * @throws Some_Exception_Class If there is an error retrieving the registration number or the students. 511 * @return void512 */513 private function render_registration_number_input($post)514 {515 // Get current value516 $current_value = get_post_meta($post->ID, 'cbedu_result_std_registration_number', true);517 518 // Translatable string with text domain519 $label = __('Registration Number:', 'edu-results');520 521 echo '<tr><td><label for="cbedu_result_std_registration_number">' . esc_html($label) . '</label></td>';522 echo '<td><input style="padding: 7px 10px;width: 100%;" type="text" id="cbedu_result_std_registration_number" name="cbedu_result_std_registration_number" class="cbedu-registration-number-autocomplete" value="' . esc_attr($current_value) . '" placeholder="Start typing...">';523 echo '</td></tr>';524 }525 526 527 528 739 /** 529 740 * Saves the result fields for a given post ID. … … 534 745 { 535 746 if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { 747 return; 748 } 749 750 // Skip auto-draft, trash, and inherit posts 751 $post_status = get_post_status($post_id); 752 if (in_array($post_status, array('auto-draft', 'trash', 'inherit'))) { 753 return; 754 } 755 756 // Check post type 757 if (get_post_type($post_id) !== 'cbedu_results') { 536 758 return; 537 759 } … … 624 846 if (get_post_type($post_id) !== 'cbedu_results') return; 625 847 848 // Skip auto-draft, trash, and inherit posts 849 $post_status = get_post_status($post_id); 850 if (in_array($post_status, array('auto-draft', 'trash', 'inherit'))) return; 851 626 852 // Get the registration number from the 'cbedu_results' post meta 627 853 $registration_number = get_post_meta($post_id, 'cbedu_result_std_registration_number', true); 854 855 // Skip if no registration number is set 856 if (empty($registration_number)) return; 628 857 629 858 // Find the 'cbedu_students' post with this registration number … … 642 871 // Check if the title is different from the current title of 'cbedu_results' post 643 872 if (get_the_title($post_id) !== $student_post_title) { 873 // Unhook to prevent infinite loop 874 remove_action('save_post', array($this, 'update_cbedu_results_title_on_save')); 875 644 876 // Update the title of 'cbedu_results' post 645 877 wp_update_post(array( … … 647 879 'post_title' => $student_post_title 648 880 )); 881 882 // Re-hook the action 883 add_action('save_post', array($this, 'update_cbedu_results_title_on_save')); 649 884 } 650 885 } … … 662 897 // Check for autosave 663 898 if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return; 899 900 // Skip auto-draft, trash, and inherit posts 901 $post_status = get_post_status($post_id); 902 if (in_array($post_status, array('auto-draft', 'trash', 'inherit'))) return; 664 903 665 904 // Check the post type -
edu-results-publishing/tags/1.2.0/inc/lib/custom-functions.php
r3022038 r3422911 1 <?php 1 <?php 2 2 3 namespace cbedu\inc\lib\CBEDUCustomFunctions; 3 4 4 if ( ! defined( 'ABSPATH' )) exit; // Exit if accessed directly5 if (! defined('ABSPATH')) exit; // Exit if accessed directly 5 6 6 class CBEDUCustomFunctions { 7 class CBEDUCustomFunctions 8 { 7 9 private $prefix; 8 10 private $required_taxonomies = [ … … 13 15 ]; 14 16 15 public function __construct($prefix) { 17 public function __construct($prefix) 18 { 16 19 $this->prefix = $prefix; 17 20 add_action('save_post', array($this, 'check_taxonomy_requirements'), 10, 3); … … 19 22 } 20 23 21 public function check_taxonomy_requirements($post_id, $post, $update) { 22 if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE || $post->post_type != $this->prefix . 'results') return; 24 //auto save if taxonomy not selected 25 public function check_taxonomy_requirements($post_id, $post, $update) 26 { 23 27 28 // 1) Safety checks 29 if (wp_is_post_autosave($post_id) || wp_is_post_revision($post_id)) { 30 return; 31 } 32 33 if (! $post || $post->post_type !== $this->prefix . 'results') { 34 return; 35 } 36 37 if (! current_user_can('edit_post', $post_id)) { 38 return; 39 } 40 41 // 2) ONLY run when user is trying to publish 42 // (Publish button / publish action) 43 $new_status = isset($_POST['post_status']) ? sanitize_text_field($_POST['post_status']) : ''; 44 $original_status = isset($_POST['original_post_status']) ? sanitize_text_field($_POST['original_post_status']) : ''; 45 46 // If not trying to publish right now, do nothing (covers autosave, "Save Draft", updates while draft, etc.) 47 if ($new_status !== 'publish') { 48 return; 49 } 50 51 // Optional: if it's already published and user is just updating it, skip 52 // (remove this block if you ALSO want to enforce taxonomies on updates to published posts) 53 if ($original_status === 'publish') { 54 return; 55 } 56 57 // 3) Validate required taxonomies 24 58 $missing_taxonomies = []; 59 25 60 foreach ($this->required_taxonomies as $taxonomy) { 26 $terms = wp_get_post_terms($post_id, $taxonomy );61 $terms = wp_get_post_terms($post_id, $taxonomy, ['fields' => 'ids']); 27 62 if (empty($terms) || is_wp_error($terms)) { 28 63 $missing_taxonomies[] = $taxonomy; … … 30 65 } 31 66 32 if (!empty($missing_taxonomies)) { 33 remove_action('save_post', array($this, 'check_taxonomy_requirements')); 67 if (empty($missing_taxonomies)) { 68 return; 69 } 34 70 35 wp_update_post([ 36 'ID' => $post_id, 37 'post_status' => 'draft', 38 ]); 71 // 4) Force back to draft + show notice 72 remove_action('save_post', [$this, 'check_taxonomy_requirements'], 10); 39 73 40 add_action('save_post', array($this, 'check_taxonomy_requirements'), 10, 3); 74 wp_update_post([ 75 'ID' => $post_id, 76 'post_status' => 'draft', 77 ]); 41 78 42 add_filter('redirect_post_location', function ($location) use ($missing_taxonomies) { 43 return add_query_arg('cbedu_taxonomy_errors', implode(',', $missing_taxonomies), $location); 44 }); 45 } 79 add_action('save_post', [$this, 'check_taxonomy_requirements'], 10, 3); 80 81 add_filter('redirect_post_location', function ($location) use ($missing_taxonomies) { 82 return add_query_arg('cbedu_taxonomy_errors', implode(',', $missing_taxonomies), $location); 83 }); 46 84 } 47 85 48 public function display_admin_notice() { 86 87 public function display_admin_notice() 88 { 49 89 if (!empty($_GET['cbedu_taxonomy_errors'])) { 50 90 $taxonomy_slugs = explode(',', sanitize_text_field($_GET['cbedu_taxonomy_errors'])); 51 91 $taxonomy_names = []; 52 92 53 93 foreach ($taxonomy_slugs as $slug) { 54 94 $taxonomy_obj = get_taxonomy($slug); … … 58 98 // Prepare the list of taxonomy names for display 59 99 $taxonomies_list = esc_html(implode(', ', $taxonomy_names)); 60 100 61 101 // Use sprintf for formatting and make the string translatable 62 102 $error_message = sprintf( … … 64 104 $taxonomies_list 65 105 ); 66 106 67 107 echo '<div class="error"><p>' . $error_message . '</p></div>'; 68 108 } 69 70 109 } 71 110 } -
edu-results-publishing/tags/1.2.0/inc/lib/custom-posts.php
r3019484 r3422911 127 127 'labels' => $labels, 128 128 'public' => true, 129 'publicly_queryable' => true,129 'publicly_queryable' => false, 130 130 'show_ui' => true, 131 131 'show_in_menu' => false, -
edu-results-publishing/tags/1.2.0/inc/lib/shortcode.php
r3019484 r3422911 57 57 ob_start(); ?> 58 58 <div class="cbedu-results-search-form-area"> 59 <form action="javascript:void(0)" method="post" id="cbedu-results-form"> 60 <!-- Examination Dropdown --> 61 <div class="cbedu-results-search-form-single-element-area"> 62 <div class="cbedu-results-search-form-single-element"> 63 <label for="examination"><?php _e('Examination:', 'edu-results'); ?></label> 64 <select name="examination" id="examination" required> 65 <option value=""><?php _e('Select Examination', 'edu-results'); ?></option> 66 <?php 67 $examinations = get_terms('cbedu_examinations', array('hide_empty' => false)); 68 foreach ($examinations as $examination) { 69 echo '<option value="' . esc_attr($examination->slug) . '">' . esc_html($examination->name) . '</option>'; 70 } 71 ?> 72 </select> 73 </div> 74 <div class="cbedu-error-message" id="cbedu-examination-error"></div> 75 </div><!--/ Examination Dropdown --> 76 77 78 <!-- Year Dropdown --> 79 <div class="cbedu-results-search-form-single-element-area"> 80 <div class="cbedu-results-search-form-single-element"> 81 <label for="year"><?php _e('Year:', 'edu-results'); ?></label> 82 <select name="year" id="year" required> 83 <option value=""><?php _e('Select Year', 'edu-results'); ?></option> 84 <?php 85 $years = get_terms('cbedu_session_years', array('hide_empty' => false)); 86 foreach ($years as $year) { 87 echo '<option value="' . esc_attr($year->slug) . '">' . esc_html($year->name) . '</option>'; 59 <div class="cbedu-search-form-header"> 60 <h2>🎓 Student Result Search</h2> 61 <p>Enter your details below to view your examination results</p> 62 </div> 63 64 <form action="javascript:void(0)" method="post" id="cbedu-results-form" class="cbedu-modern-form"> 65 <div class="cbedu-form-grid"> 66 <!-- Examination Dropdown --> 67 <div class="cbedu-form-field"> 68 <label for="examination"> 69 <span class="label-icon">📝</span> 70 <?php _e('Examination', 'edu-results'); ?> 71 <span class="required">*</span> 72 </label> 73 <div class="cbedu-select-wrapper"> 74 <select name="examination" id="examination" required> 75 <option value=""><?php _e('Select Examination', 'edu-results'); ?></option> 76 <?php 77 $examinations = get_terms('cbedu_examinations', array('hide_empty' => false)); 78 foreach ($examinations as $examination) { 79 echo '<option value="' . esc_attr($examination->slug) . '">' . esc_html($examination->name) . '</option>'; 88 80 } 89 ?> 90 </select> 91 </div> 92 <div class="cbedu-error-message" id="cbedu-year-error"></div> 93 </div><!--/ Year Dropdown --> 94 95 <!-- Board Dropdown --> 96 <div class="cbedu-results-search-form-single-element-area"> 97 <div class="cbedu-results-search-form-single-element"> 98 <label for="board"><?php _e('Board:', 'edu-results'); ?></label> 99 <select name="board" id="board" required> 100 <option value=""><?php _e('Select Board', 'edu-results'); ?></option> 101 <?php 102 $boards = get_terms('cbedu_boards', array('hide_empty' => false)); 103 foreach ($boards as $board) { 104 echo '<option value="' . esc_attr($board->slug) . '">' . esc_html($board->name) . '</option>'; 105 } 106 ?> 107 </select> 108 </div> 109 <div class="cbedu-error-message" id="cbedu-board-error"></div> 110 </div><!--/ Board Dropdown --> 111 112 <!-- Department/Group Dropdown --> 113 <div class="cbedu-results-search-form-single-element-area"> 114 <div class="cbedu-results-search-form-single-element"> 115 <label for="department_group"><?php _e('Department/Group:', 'edu-results'); ?></label> 116 <select name="department_group" id="department_group" required> 117 <option value=""><?php _e('Select Department/Group', 'edu-results'); ?></option> 118 <?php 119 $groups = get_terms('cbedu_department_group', array('hide_empty' => false)); 120 foreach ($groups as $group) { 121 echo '<option value="' . esc_attr($group->slug) . '">' . esc_html($group->name) . '</option>'; 122 } 123 ?> 124 </select> 125 </div> 126 <div class="cbedu-error-message" id="cbedu-department-group-error"></div> 127 </div><!--/ Department/Group Dropdown --> 128 129 <!-- Registration Number Input --> 130 <div class="cbedu-results-search-form-single-element-area"> 131 <div class="cbedu-results-search-form-single-element"> 132 <label for="registration_number"><?php _e('Registration Number:', 'edu-results'); ?></label> 133 <input type="text" name="registration_number" id="registration_number" placeholder="<?php echo esc_attr($placeholder); ?>" required> 134 </div> 135 <div class="cbedu-error-message" id="cbedu-registration-number-error"></div> 136 </div><!--/ Registration Number Input --> 137 138 <!-- Roll Input --> 139 <div class="cbedu-results-search-form-single-element-area"> 140 <div class="cbedu-results-search-form-single-element"> 141 <label for="roll"><?php _e('Roll:', 'edu-results'); ?></label> 142 <input type="text" name="roll" id="roll" placeholder="Enter Roll" required> 143 </div> 144 <div class="cbedu-error-message" id="cbedu-roll-error"></div> 145 </div><!--/ Roll Input --> 146 81 ?> 82 </select> 83 </div> 84 <div class="cbedu-error-message" id="cbedu-examination-error"></div> 85 </div> 86 87 <!-- Year Dropdown --> 88 <div class="cbedu-form-field"> 89 <label for="year"> 90 <span class="label-icon">📅</span> 91 <?php _e('Year', 'edu-results'); ?> 92 <span class="required">*</span> 93 </label> 94 <div class="cbedu-select-wrapper"> 95 <select name="year" id="year" required> 96 <option value=""><?php _e('Select Year', 'edu-results'); ?></option> 97 <?php 98 $years = get_terms('cbedu_session_years', array('hide_empty' => false)); 99 foreach ($years as $year) { 100 echo '<option value="' . esc_attr($year->slug) . '">' . esc_html($year->name) . '</option>'; 101 } 102 ?> 103 </select> 104 </div> 105 <div class="cbedu-error-message" id="cbedu-year-error"></div> 106 </div> 107 108 <!-- Board Dropdown --> 109 <div class="cbedu-form-field"> 110 <label for="board"> 111 <span class="label-icon">🏛️</span> 112 <?php _e('Board', 'edu-results'); ?> 113 <span class="required">*</span> 114 </label> 115 <div class="cbedu-select-wrapper"> 116 <select name="board" id="board" required> 117 <option value=""><?php _e('Select Board', 'edu-results'); ?></option> 118 <?php 119 $boards = get_terms('cbedu_boards', array('hide_empty' => false)); 120 foreach ($boards as $board) { 121 echo '<option value="' . esc_attr($board->slug) . '">' . esc_html($board->name) . '</option>'; 122 } 123 ?> 124 </select> 125 </div> 126 <div class="cbedu-error-message" id="cbedu-board-error"></div> 127 </div> 128 129 <!-- Department/Group Dropdown --> 130 <div class="cbedu-form-field"> 131 <label for="department_group"> 132 <span class="label-icon">📚</span> 133 <?php _e('Department/Group', 'edu-results'); ?> 134 <span class="required">*</span> 135 </label> 136 <div class="cbedu-select-wrapper"> 137 <select name="department_group" id="department_group" required> 138 <option value=""><?php _e('Select Department/Group', 'edu-results'); ?></option> 139 <?php 140 $groups = get_terms('cbedu_department_group', array('hide_empty' => false)); 141 foreach ($groups as $group) { 142 echo '<option value="' . esc_attr($group->slug) . '">' . esc_html($group->name) . '</option>'; 143 } 144 ?> 145 </select> 146 </div> 147 <div class="cbedu-error-message" id="cbedu-department-group-error"></div> 148 </div> 149 150 <!-- Registration Number Input --> 151 <div class="cbedu-form-field"> 152 <label for="registration_number"> 153 <span class="label-icon">🎫</span> 154 <?php _e('Registration Number', 'edu-results'); ?> 155 <span class="required">*</span> 156 </label> 157 <input type="text" name="registration_number" id="registration_number" 158 placeholder="<?php echo esc_attr($placeholder); ?>" required> 159 <div class="cbedu-error-message" id="cbedu-registration-number-error"></div> 160 </div> 161 162 <!-- Roll Input --> 163 <div class="cbedu-form-field"> 164 <label for="roll"> 165 <span class="label-icon">🔢</span> 166 <?php _e('Roll', 'edu-results'); ?> 167 <span class="required">*</span> 168 </label> 169 <input type="text" name="roll" id="roll" placeholder="Enter Roll" required> 170 <div class="cbedu-error-message" id="cbedu-roll-error"></div> 171 </div> 172 </div> 147 173 148 174 <!-- Submit Button --> 149 <div class="cbedu-results-search-form-single-element cbedu-results-search-form-submit"> 150 <input type="submit" value="<?php echo esc_attr($button_text); ?>"> 175 <div class="cbedu-form-submit-wrapper"> 176 <button type="submit" class="cbedu-submit-btn"> 177 <span class="btn-icon">🔍</span> 178 <span class="btn-text"><?php echo esc_html($button_text); ?></span> 179 <span class="btn-arrow">→</span> 180 </button> 151 181 </div> 152 153 182 </form> 154 183 155 <div id="cbedu-ajax-result-preloader" style="display: none;"> 156 <div class="cbedu-ajax-preloader-ellipsis"><div></div><div></div><div></div><div></div></div> 184 <div id="cbedu-ajax-result-preloader" class="cbedu-preloader-wrapper" style="display: none;"> 185 <div class="cbedu-preloader-content"> 186 <div class="cbedu-ajax-preloader-ellipsis"><div></div><div></div><div></div><div></div></div> 187 <p class="cbedu-preloader-text">Loading your results...</p> 188 </div> 157 189 </div> 190 158 191 <!-- CBEDU Results Display --> 159 192 <div id="cbedu-results-display"></div> -
edu-results-publishing/tags/1.2.0/readme.txt
r3022038 r3422911 2 2 Contributors: hmbashar 3 3 Donate link: https://www.buymeacoffee.com/hmbashar 4 Tags: Result, WP Result Plugin, EDU Results, academic , student, education, examination, report card, gradebook, transcript, college management, university result4 Tags: Result, WP Result Plugin, EDU Results, academic 5 5 Requires at least: 4.7 6 Tested up to: 6. 4.27 Stable tag: 1. 0.26 Tested up to: 6.9 7 Stable tag: 1.2.0 8 8 Requires PHP: 7.0 9 9 License: GPLv2 or later … … 103 103 8. Search Form with Result Sheet 104 104 9. Result Sheet 105 10. New Search Form 106 11. New Result Sheet style. 107 12. New Student fields 105 108 106 109 == Changelog == 110 111 = 1.2.0 = 112 * Enhanced features and improvements 113 * Bug fixes and performance optimization 114 * Updated compatibility with WordPress 6.9 107 115 108 116 = 1.0.2 = -
edu-results-publishing/trunk/assets/css/style.css
r3019484 r3422911 99 99 100 100 /*------------------------------ 101 * Search Form 101 * Search Form - Modern UI 102 102 ------------------------------*/ 103 103 104 /* Main Container */ 104 105 .cbedu-results-search-form-area { 105 margin-bottom: 20px; 106 } 107 108 .cbedu-results-search-form-area form { 106 margin: 60px auto; 107 max-width: 900px; 108 padding: 0 20px; 109 } 110 111 /* Form Header */ 112 .cbedu-search-form-header { 113 text-align: center; 114 margin-bottom: 40px; 115 animation: fadeInDown 0.6s ease-out; 116 } 117 118 @keyframes fadeInDown { 119 from { 120 opacity: 0; 121 transform: translateY(-20px); 122 } 123 to { 124 opacity: 1; 125 transform: translateY(0); 126 } 127 } 128 129 .cbedu-search-form-header h2 { 130 font-size: 36px; 131 font-weight: 800; 132 margin: 0 0 12px 0; 133 background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); 134 -webkit-background-clip: text; 135 -webkit-text-fill-color: transparent; 136 background-clip: text; 137 letter-spacing: -0.5px; 138 } 139 140 .cbedu-search-form-header p { 141 color: #718096; 142 font-size: 16px; 143 margin: 0; 144 font-weight: 400; 145 } 146 147 /* Modern Form */ 148 .cbedu-modern-form { 149 background: #ffffff; 150 border-radius: 20px; 151 padding: 48px; 152 box-shadow: 0 10px 40px rgba(102, 126, 234, 0.1), 153 0 4px 8px rgba(0, 0, 0, 0.02); 154 border: 1px solid rgba(102, 126, 234, 0.1); 155 transition: all 0.3s ease; 156 animation: fadeInUp 0.7s ease-out; 157 } 158 159 @keyframes fadeInUp { 160 from { 161 opacity: 0; 162 transform: translateY(30px); 163 } 164 to { 165 opacity: 1; 166 transform: translateY(0); 167 } 168 } 169 170 .cbedu-modern-form:hover { 171 box-shadow: 0 15px 60px rgba(102, 126, 234, 0.15), 172 0 6px 12px rgba(0, 0, 0, 0.03); 173 } 174 175 /* Form Grid Layout */ 176 .cbedu-form-grid { 177 display: grid; 178 grid-template-columns: repeat(2, 1fr); 179 gap: 28px; 180 margin-bottom: 32px; 181 } 182 183 /* Form Field */ 184 .cbedu-form-field { 109 185 display: flex; 110 186 flex-direction: column; 187 gap: 10px; 188 } 189 190 .cbedu-form-field label { 191 display: flex; 192 align-items: center; 193 gap: 8px; 194 font-size: 14px; 195 font-weight: 600; 196 color: #2d3748; 197 margin-bottom: 2px; 198 letter-spacing: 0.3px; 199 } 200 201 .cbedu-form-field .label-icon { 202 font-size: 18px; 203 filter: grayscale(0.3); 204 } 205 206 .cbedu-form-field .required { 207 color: #f56565; 208 font-size: 16px; 209 } 210 211 /* Select Wrapper */ 212 .cbedu-select-wrapper { 213 position: relative; 111 214 width: 100%; 112 max-width: 100%; 113 margin: 0 auto; 114 padding: 30px 25px; 115 border: 1px solid #ddd; 116 border-radius: 5px; 117 background-color: #f2f2f2; 118 box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); 215 } 216 217 .cbedu-select-wrapper::after { 218 content: '▼'; 219 position: absolute; 220 right: 18px; 221 top: 50%; 222 transform: translateY(-50%); 223 pointer-events: none; 224 color: #667eea; 225 font-size: 12px; 226 transition: all 0.3s ease; 227 } 228 229 .cbedu-select-wrapper:hover::after { 230 color: #764ba2; 231 } 232 233 /* Input & Select Styles */ 234 .cbedu-form-field input[type="text"], 235 .cbedu-form-field select { 236 width: 100%; 237 padding: 14px 18px; 238 font-size: 15px; 239 border: 2px solid #e2e8f0; 240 border-radius: 12px; 241 background: #ffffff; 242 color: #2d3748; 243 transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); 244 font-family: inherit; 245 outline: none; 246 appearance: none; 247 -webkit-appearance: none; 248 -moz-appearance: none; 249 } 250 251 .cbedu-form-field select { 252 cursor: pointer; 253 padding-right: 45px; 254 background-image: none; 255 } 256 257 .cbedu-form-field input[type="text"]:focus, 258 .cbedu-form-field select:focus { 259 border-color: #667eea; 260 background: #f8f9ff; 261 box-shadow: 0 0 0 4px rgba(102, 126, 234, 0.1); 262 transform: translateY(-2px); 263 } 264 265 .cbedu-form-field input[type="text"]:hover, 266 .cbedu-form-field select:hover { 267 border-color: #cbd5e0; 268 } 269 270 .cbedu-form-field input[type="text"]::placeholder { 271 color: #a0aec0; 272 font-size: 14px; 273 } 274 275 /* Error Messages */ 276 .cbedu-error-message { 277 color: #f56565; 278 font-size: 13px; 279 font-weight: 500; 280 margin-top: 6px; 281 display: none; 282 padding-left: 4px; 283 animation: shake 0.3s ease; 284 } 285 286 @keyframes shake { 287 0%, 100% { transform: translateX(0); } 288 25% { transform: translateX(-5px); } 289 75% { transform: translateX(5px); } 290 } 291 292 /* Submit Button Wrapper */ 293 .cbedu-form-submit-wrapper { 294 display: flex; 295 justify-content: center; 296 margin-top: 12px; 297 } 298 299 /* Submit Button */ 300 .cbedu-submit-btn, button.cbedu-submit-btn { 301 display: inline-flex; 302 align-items: center; 303 justify-content: center; 119 304 gap: 10px; 120 } 121 122 .cbedu-results-search-form-single-element-area { 305 padding: 18px 55px; 306 min-width: 280px; 307 font-size: 15px; 308 font-weight: 700; 309 color: #ffffff !important; 310 background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); 311 border: none; 312 border-radius: 12px; 313 cursor: pointer; 314 transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); 315 box-shadow: 0 6px 20px rgba(102, 126, 234, 0.4); 316 text-transform: uppercase; 317 letter-spacing: 1.2px; 318 position: relative; 319 overflow: hidden; 320 white-space: nowrap; 321 line-height: 1; 322 border:none; 323 } 324 325 .cbedu-submit-btn::before { 326 content: ''; 327 position: absolute; 328 top: 0; 329 left: -100%; 330 width: 100%; 331 height: 100%; 332 background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent); 333 transition: left 0.5s ease; 334 } 335 336 .cbedu-submit-btn:hover::before { 337 left: 100%; 338 } 339 340 .cbedu-submit-btn:hover { 341 transform: translateY(-3px); 342 box-shadow: 0 10px 30px rgba(102, 126, 234, 0.5); 343 background: linear-gradient(135deg, #5a67d8 0%, #6b46a0 100%); 344 } 345 346 .cbedu-submit-btn:active { 347 transform: translateY(-1px); 348 box-shadow: 0 5px 15px rgba(102, 126, 234, 0.4); 349 } 350 351 .cbedu-submit-btn .btn-icon { 352 font-size: 18px; 353 flex-shrink: 0; 354 animation: pulse 2s infinite; 355 } 356 357 @keyframes pulse { 358 0%, 100% { transform: scale(1); } 359 50% { transform: scale(1.1); } 360 } 361 362 .cbedu-submit-btn .btn-text { 363 font-size: 15px; 364 flex-shrink: 0; 365 color: #ffffff; 366 } 367 368 .cbedu-submit-btn .btn-arrow { 369 font-size: 18px; 370 flex-shrink: 0; 371 transition: transform 0.3s ease; 372 font-weight: 700; 373 color: #ffffff; 374 } 375 376 .cbedu-submit-btn:hover .btn-arrow { 377 transform: translateX(5px); 378 } 379 380 /* Preloader */ 381 .cbedu-preloader-wrapper { 382 text-align: center; 383 padding: 60px 20px; 384 background: #ffffff; 385 border-radius: 16px; 386 margin: 30px 0; 387 box-shadow: 0 4px 15px rgba(0, 0, 0, 0.08); 388 } 389 390 .cbedu-preloader-content { 123 391 display: flex; 124 392 flex-direction: column; 125 } 126 127 .cbedu-results-search-form-single-element { 128 display: flex; 393 align-items: center; 129 394 gap: 20px; 130 justify-content: flex-start; 131 align-items: center; 132 } 133 134 .cbedu-results-search-form-single-element label { 135 flex-basis: 30%; 136 } 137 138 .cbedu-results-search-form-single-element input, 139 .cbedu-results-search-form-single-element select, 140 .cbedu-results-search-form-single-element input[type="text"] { 141 border: 1px solid #3666; 142 padding: 15px; 143 } 144 145 .cbedu-results-search-form-single-element.cbedu-results-search-form-submit { 146 display: flex; 147 justify-content: center; 148 } 149 150 .cbedu-results-search-form-submit input[type="submit"] { 151 padding: 15px 25px; 152 background-color: #1587fc; 153 color: #fff; 154 font-size: 18px; 155 font-weight: 500; 156 border-radius: 5px; 157 cursor: pointer; 158 } 159 160 .cbedu-results-search-form-submit input[type="submit"]:hover { 161 background-color: #0e52b5; 162 } 163 164 .cbedu-error-message { 165 color: red; 166 margin-top: 5px; 167 font-size: 0.9em; 168 align-self: center; 395 } 396 397 .cbedu-preloader-text { 398 color: #667eea; 399 font-size: 16px; 400 font-weight: 600; 401 margin: 0; 402 animation: fadeInOut 1.5s infinite; 403 } 404 405 @keyframes fadeInOut { 406 0%, 100% { opacity: 0.5; } 407 50% { opacity: 1; } 169 408 } 170 409 … … 182 421 height: 13px; 183 422 border-radius: 50%; 184 background: #1f79ff;423 background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); 185 424 animation-timing-function: cubic-bezier(0, 1, 1, 0); 186 425 } … … 188 427 .cbedu-ajax-preloader-ellipsis div:nth-child(1) { 189 428 left: 8px; 190 animation: cbedu-ellipsis1 0.6s infinite;429 animation: ellipsis1 0.6s infinite; 191 430 } 192 431 193 432 .cbedu-ajax-preloader-ellipsis div:nth-child(2) { 194 433 left: 8px; 195 animation: cbedu-ellipsis2 0.6s infinite;434 animation: ellipsis2 0.6s infinite; 196 435 } 197 436 198 437 .cbedu-ajax-preloader-ellipsis div:nth-child(3) { 199 438 left: 32px; 200 animation: cbedu-ellipsis2 0.6s infinite;439 animation: ellipsis2 0.6s infinite; 201 440 } 202 441 203 442 .cbedu-ajax-preloader-ellipsis div:nth-child(4) { 204 443 left: 56px; 205 animation: cbedu-ellipsis3 0.6s infinite; 206 } 207 .cbedu-ajax-result-area table th{ 208 text-align: left; 209 } 444 animation: ellipsis3 0.6s infinite; 445 } 446 447 @keyframes ellipsis1 { 448 0% { transform: scale(0); } 449 100% { transform: scale(1); } 450 } 451 452 @keyframes ellipsis2 { 453 0% { transform: translate(0, 0); } 454 100% { transform: translate(24px, 0); } 455 } 456 457 @keyframes ellipsis3 { 458 0% { transform: scale(1); } 459 100% { transform: scale(0); } 460 } 461 462 /* Responsive Design */ 463 @media (max-width: 768px) { 464 .cbedu-search-form-header h2 { 465 font-size: 28px; 466 } 467 468 .cbedu-search-form-header p { 469 font-size: 14px; 470 } 471 472 .cbedu-modern-form { 473 padding: 32px 24px; 474 border-radius: 16px; 475 } 476 477 .cbedu-form-grid { 478 grid-template-columns: 1fr; 479 gap: 20px; 480 } 481 482 .cbedu-submit-btn { 483 width: 100%; 484 padding: 16px 32px; 485 } 486 487 .cbedu-form-field .label-icon { 488 font-size: 16px; 489 } 490 } 491 492 @media (max-width: 480px) { 493 .cbedu-results-search-form-area { 494 margin: 40px auto; 495 padding: 0 15px; 496 } 497 498 .cbedu-search-form-header h2 { 499 font-size: 24px; 500 } 501 502 .cbedu-modern-form { 503 padding: 24px 18px; 504 } 505 506 .cbedu-form-field label { 507 font-size: 13px; 508 } 509 510 .cbedu-form-field input[type="text"], 511 .cbedu-form-field select { 512 padding: 12px 14px; 513 font-size: 14px; 514 } 515 516 .cbedu-error-message { 517 padding-left: 0; 518 } 519 520 .cbedu-submit-btn { 521 width: 100%; 522 padding: 16px 32px; 523 font-size: 15px; 524 } 525 } 526 527 /*------------------------------ 528 * Result Display - Modern UI 529 ------------------------------*/ 530 210 531 @keyframes cbedu-ellipsis1 { 211 532 0% { … … 237 558 } 238 559 } 560 561 /*------------------------------ 562 * AJAX Result Display - Modern UI 563 ------------------------------*/ 564 565 /* Main Result Container */ 566 .cbedu-ajax-result-area { 567 max-width: 1200px; 568 margin: 30px auto; 569 padding: 0; 570 font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; 571 background: #fff; 572 border-radius: 12px; 573 box-shadow: 0 10px 40px rgba(0, 0, 0, 0.08); 574 overflow: hidden; 575 } 576 577 .cbedu-ajax-result { 578 padding: 0; 579 } 580 581 /* Section Headings */ 582 .cbedu-result-student-information-heading, 583 .cbedu-result-student-subject-heading { 584 background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); 585 padding: 20px 30px; 586 margin: 0; 587 } 588 589 .cbedu-result-student-information-heading h4, 590 .cbedu-result-student-subject-heading h4 { 591 color: #fff; 592 margin: 0; 593 font-size: 20px; 594 font-weight: 600; 595 letter-spacing: 0.5px; 596 text-transform: uppercase; 597 display: flex; 598 align-items: center; 599 gap: 10px; 600 } 601 602 .cbedu-result-student-information-heading h4:before { 603 content: "👤"; 604 font-size: 24px; 605 } 606 607 .cbedu-result-student-subject-heading h4:before { 608 content: "📊"; 609 font-size: 24px; 610 } 611 612 /* Student Information Area */ 613 .cbedu-result-student-information-area { 614 margin-bottom: 30px; 615 border-radius: 12px 12px 0 0; 616 overflow: hidden; 617 background: #fff; 618 } 619 620 .cbedu-result-student-information-area table { 621 width: 100%; 622 border-collapse: collapse; 623 margin: 0; 624 background: #fff; 625 } 626 627 .cbedu-result-student-information-area table tbody tr:nth-child(even) { 628 background: #f8f9ff; 629 } 630 631 .cbedu-result-student-information-area table tbody tr:hover { 632 background: #f0f2ff; 633 transition: background 0.3s ease; 634 } 635 636 .cbedu-result-student-information-area th { 637 background: #f7f8fc; 638 color: #2d3748; 639 font-weight: 600; 640 padding: 16px 20px; 641 text-align: left; 642 border-bottom: 2px solid #e2e8f0; 643 font-size: 14px; 644 text-transform: uppercase; 645 letter-spacing: 0.5px; 646 /* width: 25%; */ 647 } 648 649 .cbedu-result-student-information-area td { 650 padding: 16px 20px; 651 color: #4a5568; 652 border-bottom: 1px solid #e2e8f0; 653 font-size: 15px; 654 font-weight: 500; 655 } 656 657 /* Subject Result Area */ 658 .cbedu-result-student-subject-area { 659 background: #fff; 660 border-radius: 0 0 12px 12px; 661 overflow: hidden; 662 } 663 664 .cbedu-result-student-subject { 665 padding: 0; 666 } 667 668 .cbedu-result-student-subject table { 669 width: 100%; 670 border-collapse: collapse; 671 margin: 0; 672 background: #fff; 673 } 674 675 .cbedu-result-student-subject table thead { 676 background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); 677 } 678 679 .cbedu-result-student-subject table thead tr th { 680 color: #fff; 681 font-weight: 600; 682 padding: 18px 20px; 683 text-align: center; 684 font-size: 14px; 685 text-transform: uppercase; 686 letter-spacing: 0.5px; 687 border: none; 688 } 689 690 .cbedu-result-student-subject table tbody tr { 691 border-bottom: 1px solid #e2e8f0; 692 transition: all 0.3s ease; 693 } 694 695 .cbedu-result-student-subject table tbody tr:nth-child(even) { 696 background: #f8f9ff; 697 } 698 699 .cbedu-result-student-subject table tbody tr:hover { 700 background: #e6f2ff; 701 transform: scale(1.01); 702 box-shadow: 0 4px 12px rgba(102, 126, 234, 0.1); 703 } 704 705 .cbedu-result-student-subject table tbody td { 706 padding: 16px 20px; 707 color: #4a5568; 708 text-align: center; 709 font-size: 15px; 710 font-weight: 500; 711 } 712 713 .cbedu-result-student-subject table tbody td:nth-child(1) { 714 font-weight: 700; 715 color: #667eea; 716 } 717 718 .cbedu-result-student-subject table tbody td:nth-child(2) { 719 text-align: left; 720 font-weight: 600; 721 color: #2d3748; 722 } 723 724 /* Highlight cells (GPA columns) */ 725 .cbedu-result-student-subject table tbody td.highlight { 726 background: linear-gradient(135deg, #a8edea 0%, #fed6e3 100%); 727 font-weight: 700; 728 font-size: 18px; 729 color: #2d3748; 730 border-left: 3px solid #667eea; 731 border-right: 3px solid #764ba2; 732 } 733 734 /* Grade styling */ 735 .cbedu-result-student-subject table tbody td:nth-child(4) { 736 font-weight: 700; 737 font-size: 16px; 738 } 739 740 /* Print Button Container */ 741 .cbedu-print-button-container { 742 text-align: center; 743 padding: 30px; 744 background: #f7f8fc; 745 border-radius: 0 0 12px 12px; 746 } 747 748 .cbedu-print-button-container button { 749 background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); 750 color: #fff; 751 padding: 14px 40px; 752 font-size: 16px; 753 font-weight: 600; 754 border: none; 755 border-radius: 8px; 756 cursor: pointer; 757 transition: all 0.3s ease; 758 box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3); 759 text-transform: uppercase; 760 letter-spacing: 1px; 761 } 762 763 .cbedu-print-button-container button:hover { 764 transform: translateY(-2px); 765 box-shadow: 0 6px 25px rgba(102, 126, 234, 0.4); 766 } 767 768 .cbedu-print-button-container button:active { 769 transform: translateY(0); 770 } 771 772 /* Status Badge Styling */ 773 .cbedu-result-student-information-area td:contains("Passed"), 774 .cbedu-result-student-information-area td:contains("Failed") { 775 font-weight: 700; 776 } 777 778 /* Responsive Design */ 779 @media (max-width: 768px) { 780 .cbedu-ajax-result-area { 781 margin: 20px 10px; 782 border-radius: 8px; 783 } 784 785 .cbedu-result-student-information-heading, 786 .cbedu-result-student-subject-heading { 787 padding: 15px 20px; 788 } 789 790 .cbedu-result-student-information-heading h4, 791 .cbedu-result-student-subject-heading h4 { 792 font-size: 16px; 793 } 794 795 .cbedu-result-student-information-area th, 796 .cbedu-result-student-information-area td, 797 .cbedu-result-student-subject table tbody td { 798 padding: 12px 15px; 799 font-size: 13px; 800 } 801 802 .cbedu-result-student-subject table thead tr th { 803 padding: 14px 10px; 804 font-size: 12px; 805 } 806 807 .cbedu-print-button-container { 808 padding: 20px; 809 } 810 811 .cbedu-print-button-container button { 812 padding: 12px 30px; 813 font-size: 14px; 814 } 815 816 /* Stack table on mobile */ 817 .cbedu-result-student-information-area table, 818 .cbedu-result-student-information-area thead, 819 .cbedu-result-student-information-area tbody, 820 .cbedu-result-student-information-area th, 821 .cbedu-result-student-information-area td, 822 .cbedu-result-student-information-area tr { 823 display: block; 824 } 825 826 .cbedu-result-student-information-area thead tr { 827 display: none; 828 } 829 830 .cbedu-result-student-information-area tr { 831 margin-bottom: 15px; 832 border: 1px solid #e2e8f0; 833 border-radius: 8px; 834 overflow: hidden; 835 } 836 837 .cbedu-result-student-information-area td { 838 text-align: right; 839 padding-left: 50%; 840 position: relative; 841 } 842 843 .cbedu-result-student-information-area td:before { 844 content: attr(data-label); 845 position: absolute; 846 left: 15px; 847 width: 45%; 848 padding-right: 10px; 849 white-space: nowrap; 850 text-align: left; 851 font-weight: 600; 852 color: #2d3748; 853 } 854 } 855 856 /* Print Styles */ 857 @media print { 858 .cbedu-print-button-container { 859 display: none; 860 } 861 862 .cbedu-ajax-result-area { 863 box-shadow: none; 864 border: 1px solid #ddd; 865 } 866 867 .cbedu-result-student-information-heading, 868 .cbedu-result-student-subject-heading { 869 background: #667eea !important; 870 -webkit-print-color-adjust: exact; 871 print-color-adjust: exact; 872 } 873 874 .cbedu-result-student-subject table tbody td.highlight { 875 background: #fed6e3 !important; 876 -webkit-print-color-adjust: exact; 877 print-color-adjust: exact; 878 } 879 880 body { 881 background: #fff; 882 } 883 } -
edu-results-publishing/trunk/edu-results-publishing.php
r3022038 r3422911 4 4 * Author: MD Abul Bashar 5 5 * Author URI: https://facebook.com/hmbashar 6 * Description: This plugin is for student exam results publishing.6 * Description: A powerful tool designed to simplify the process of publishing exam results for educational institutions such as schools, colleges, and universities. With an easy-to-use interface, it empowers administrators and educators to effortlessly manage and showcase academic achievements. 7 7 * Tags: Result, WP Result Plugin, EDU Results 8 8 * Text Domain: edu-results 9 * Version: 1. 0.29 * Version: 1.2.0 10 10 * License: GPLv2 11 11 * License URI: http://www.gnu.org/licenses/gpl-2.0.html 12 12 * Domain Path: /languages 13 13 * Prefix: cbedu_ 14 * Requires at least: 5.0 15 * Requires PHP: 7.2 14 16 */ 15 17 … … 21 23 * @link https://facebook.com/hmbashar 22 24 */ 25 26 namespace CBEDU; 27 23 28 if (!defined('ABSPATH')) exit; // Exit if accessed directly 29 24 30 25 31 … … 28 34 define('CBEDU_RESULT_DIR', plugin_dir_path(__FILE__)); 29 35 define('CBEDU_PREFIX', 'cbedu_'); 30 31 class CBEDUResultPublishing 36 define('CBEDU_VERSION', '1.2.0'); 37 38 final class CBEDUResultPublishing 32 39 { 33 40 // Plugin prefix … … 176 183 )); 177 184 178 // for autocomplete jquery in results post type with registration number185 // Enqueue admin meta fields CSS for custom post types 179 186 if ($hook_suffix === 'post-new.php' || $hook_suffix === 'post.php') { 180 if (get_post_type($post) === 'cbedu_results') { 181 187 $post_type = get_post_type($post); 188 189 // Load admin CSS for students, subjects, and results post types 190 if (in_array($post_type, array('cbedu_students', 'cbedu_subjects', 'cbedu_results'))) { 191 wp_enqueue_style('cbedu-admin-meta-fields', CBEDU_RESULT_URL . 'assets/css/admin-meta-fields.css', array(), CBEDU_VERSION); 192 } 193 194 // For autocomplete jquery in results post type with registration number 195 if ($post_type === 'cbedu_results') { 182 196 wp_enqueue_style('cbedu-autocomplete-ui-css', plugin_dir_url(__FILE__) . 'assets/css/autocomplete.css'); 183 197 wp_enqueue_script('cbedu-autocomplete-js', plugin_dir_url(__FILE__) . 'assets/js/autocomplete.js', array('jquery', 'jquery-ui-autocomplete'), '1.0.0', true); … … 358 372 359 373 // Execute the query for 'cbedu_results' 360 $ResultQuery = new WP_Query($args);374 $ResultQuery = new \WP_Query($args); 361 375 362 376 // Output the results … … 365 379 $ResultQuery->the_post(); 366 380 381 // Store result post ID before nested query 382 $result_post_id = get_the_ID(); 383 $result_title = get_the_title(); 384 367 385 $collageName = get_option('cbedu_results_collage_name'); 368 386 369 $rs_std_roll = get_post_meta( get_the_ID(), 'cbedu_result_std_roll', true);370 $rs_std_reg_number = get_post_meta( get_the_ID(), 'cbedu_result_std_registration_number', true);371 $rs_std_type = get_post_meta( get_the_ID(), 'cbedu_result_std_student_type', true);372 $rs_std_result_status = get_post_meta( get_the_ID(), 'cbedu_result_std_result_status', true);373 $rs_std_gpa = get_post_meta( get_the_ID(), 'cbedu_result_std_gpa', true);387 $rs_std_roll = get_post_meta($result_post_id, 'cbedu_result_std_roll', true); 388 $rs_std_reg_number = get_post_meta($result_post_id, 'cbedu_result_std_registration_number', true); 389 $rs_std_type = get_post_meta($result_post_id, 'cbedu_result_std_student_type', true); 390 $rs_std_result_status = get_post_meta($result_post_id, 'cbedu_result_std_result_status', true); 391 $rs_std_gpa = get_post_meta($result_post_id, 'cbedu_result_std_gpa', true); 374 392 375 393 //Student subjects result 376 $cbedu_std_all_subjects_result = get_post_meta( get_the_ID(), 'cbedu_subjects_results', true);377 $cbedu_std_gpa = get_post_meta( get_the_ID(), 'cbedu_result_std_gpa', true);378 $cbedu_std_was_gpa = get_post_meta( get_the_ID(), 'cbedu_result_std_was_gpa', true);394 $cbedu_std_all_subjects_result = get_post_meta($result_post_id, 'cbedu_subjects_results', true); 395 $cbedu_std_gpa = get_post_meta($result_post_id, 'cbedu_result_std_gpa', true); 396 $cbedu_std_was_gpa = get_post_meta($result_post_id, 'cbedu_result_std_was_gpa', true); 379 397 380 398 // Fetch taxonomy term names 381 $session_year_terms = wp_get_post_terms( get_the_ID(), 'cbedu_session_years', array('fields' => 'names'));382 $examination_terms = wp_get_post_terms( get_the_ID(), 'cbedu_examinations', array('fields' => 'names'));383 $board_terms = wp_get_post_terms( get_the_ID(), 'cbedu_boards', array('fields' => 'names'));384 $department_group_terms = wp_get_post_terms( get_the_ID(), 'cbedu_department_group', array('fields' => 'names'));399 $session_year_terms = wp_get_post_terms($result_post_id, 'cbedu_session_years', array('fields' => 'names')); 400 $examination_terms = wp_get_post_terms($result_post_id, 'cbedu_examinations', array('fields' => 'names')); 401 $board_terms = wp_get_post_terms($result_post_id, 'cbedu_boards', array('fields' => 'names')); 402 $department_group_terms = wp_get_post_terms($result_post_id, 'cbedu_department_group', array('fields' => 'names')); 385 403 386 404 // Convert term arrays to strings … … 404 422 ); 405 423 406 $student_query = new WP_Query($student_args); 424 $student_query = new \WP_Query($student_args); 425 426 // Initialize student data 427 $st_father_name = ''; 428 $st_mother_name = ''; 429 $st_std_id = ''; 430 $st_std_dob = ''; 431 $st_std_gender = ''; 407 432 408 433 if ($student_query->have_posts()) { 409 while ($student_query->have_posts()) { 410 $student_query->the_post(); 411 412 // Fetch all student details 413 $st_father_name = get_post_meta(get_the_ID(), 'cbedu_result_std_father_name', true); 414 $st_mother_name = get_post_meta(get_the_ID(), 'cbedu_result_std_mother_name', true); 415 $st_std_id = get_post_meta(get_the_ID(), 'cbedu_result_std_id', true); 416 $st_std_dob = get_post_meta(get_the_ID(), 'cbedu_result_std_dob', true); 417 $st_std_gender = get_post_meta(get_the_ID(), 'cbedu_result_std_gender', true); 434 $student_post = $student_query->posts[0]; 435 436 // Fetch all student details 437 $st_father_name = get_post_meta($student_post->ID, 'cbedu_result_std_father_name', true); 438 $st_mother_name = get_post_meta($student_post->ID, 'cbedu_result_std_mother_name', true); 439 $st_std_id = get_post_meta($student_post->ID, 'cbedu_result_std_id', true); 440 $st_std_dob = get_post_meta($student_post->ID, 'cbedu_result_std_dob', true); 441 $st_std_gender = get_post_meta($student_post->ID, 'cbedu_result_std_gender', true); 442 } 443 444 wp_reset_postdata(); // Reset student query 418 445 419 446 420 // Display the results in a table 421 ?> 422 <div class="cbedu-ajax-result-area" id="cbedu-result-table"> 423 <div class="cbedu-ajax-result"> 424 <!--Student Information--> 425 <div class="cbedu-result-student-information-area"> 426 <div class="cbedu-result-student-information-heading"> 427 <h4><?php _e('Student Information', 'edu-results'); ?></h4> 428 </div> 429 <table> 430 <tr> 431 <th><?php _e('Roll', 'edu-results'); ?></th> 432 <td><?php echo esc_html($rs_std_roll); ?></td> 433 <th><?php _e('Registration Number', 'edu-results'); ?></th> 434 <td><?php echo esc_html($rs_std_reg_number); ?></td> 435 </tr> 436 <tr> 437 <th><?php _e('Student Name', 'edu-results'); ?></th> 438 <td><?php the_title(); ?></td> 439 <th><?php _e('Student ID', 'edu-results'); ?></th> 440 <td><?php echo esc_html($st_std_id); ?></td> 441 </tr> 442 <tr> 443 <th><?php _e('Father Name', 'edu-results'); ?></th> 444 <td><?php echo esc_html($st_father_name); ?></td> 445 <th><?php _e('Mother Name', 'edu-results'); ?></th> 446 <td><?php echo esc_html($st_mother_name); ?></td> 447 </tr> 448 <tr> 449 <th><?php _e('Board', 'edu-results'); ?></th> 450 <td><?php echo esc_html($board); ?></td> 451 <th><?php _e('Department Group', 'edu-results'); ?></th> 452 <td><?php echo esc_html($department_group); ?></td> 453 </tr> 454 <tr> 455 <th><?php _e('Session', 'edu-results'); ?></th> 456 <td><?php echo esc_html($session_year); ?></td> 457 <th><?php _e('Result Status', 'edu-results'); ?></th> 458 <td><?php echo esc_html($rs_std_result_status); ?></td> 459 </tr> 460 <tr> 461 <th><?php _e('Gender', 'edu-results'); ?></th> 462 <td><?php echo esc_html($st_std_gender); ?></td> 463 <th><?php _e('Date of Birth', 'edu-results'); ?></th> 464 <td><?php echo esc_html($st_std_dob); ?></td> 465 </tr> 466 <tr> 467 <th><?php _e('Student Type', 'edu-results'); ?></th> 468 <td><?php echo esc_html($rs_std_type); ?></td> 469 <th><?php _e('Institute Name', 'edu-results'); ?></th> 470 <td><?php echo esc_html($collageName); ?></td> 471 </tr> 472 <tr> 473 <th><?php _e('Examination', 'edu-results'); ?></th> 474 <td><?php echo esc_html($examination); ?></td> 475 <th><?php _e('GPA', 'edu-results'); ?></th> 476 <td><?php echo esc_html($rs_std_gpa); ?></td> 477 </tr> 478 </table> 479 </div><!--/ Student Information--> 480 481 <!--Student Subjects Information--> 482 <div class="cbedu-result-student-subject-area"> 483 <div class="cbedu-result-student-subject"> 484 <div class="cbedu-result-student-subject-heading"> 485 <h4><?php _e('Result Sheet', 'edu-results'); ?></h4> 486 </div> 487 <table> 488 <tr> 489 <th><?php _e('Subject', 'edu-results'); ?></th> 490 <th><?php _e('Name of Subjects', 'edu-results'); ?></th> 491 <th><?php _e('Marks', 'edu-results'); ?></th> 492 <th><?php _e('Letter Grade', 'edu-results'); ?></th> 493 <th class="cbedu-table-gpa"><?php _e('GPA', 'edu-results'); ?> <abbr title="Without additional subject"><?php _e('(WAS)', 'edu-results'); ?></abbr></th> 494 <th><?php _e('GPA', 'edu-results'); ?></th> 495 </tr> 496 <?php 447 // Display the results in a table 448 ?> 449 <div class="cbedu-ajax-result-area" id="cbedu-result-table"> 450 <div class="cbedu-ajax-result"> 451 <!--Student Information--> 452 <div class="cbedu-result-student-information-area"> 453 <div class="cbedu-result-student-information-heading"> 454 <h4><?php esc_html_e('Student Information', 'edu-results'); ?></h4> 455 </div> 456 <table> 457 <tbody> 458 <tr> 459 <th><?php esc_html_e('Roll', 'edu-results'); ?></th> 460 <td><?php echo esc_html($rs_std_roll); ?></td> 461 <th><?php esc_html_e('Registration Number', 'edu-results'); ?></th> 462 <td><?php echo esc_html($rs_std_reg_number); ?></td> 463 </tr> 464 <tr> 465 <th><?php esc_html_e('Student Name', 'edu-results'); ?></th> 466 <td><?php echo esc_html($result_title); ?></td> 467 <th><?php esc_html_e('Student ID', 'edu-results'); ?></th> 468 <td><?php echo esc_html($st_std_id); ?></td> 469 </tr> 470 <tr> 471 <th><?php esc_html_e('Father Name', 'edu-results'); ?></th> 472 <td><?php echo esc_html($st_father_name); ?></td> 473 <th><?php esc_html_e('Mother Name', 'edu-results'); ?></th> 474 <td><?php echo esc_html($st_mother_name); ?></td> 475 </tr> 476 <tr> 477 <th><?php esc_html_e('Board', 'edu-results'); ?></th> 478 <td><?php echo esc_html($board); ?></td> 479 <th><?php esc_html_e('Department Group', 'edu-results'); ?></th> 480 <td><?php echo esc_html($department_group); ?></td> 481 </tr> 482 <tr> 483 <th><?php esc_html_e('Session', 'edu-results'); ?></th> 484 <td><?php echo esc_html($session_year); ?></td> 485 <th><?php esc_html_e('Result Status', 'edu-results'); ?></th> 486 <td><?php echo esc_html($rs_std_result_status); ?></td> 487 </tr> 488 <tr> 489 <th><?php esc_html_e('Gender', 'edu-results'); ?></th> 490 <td><?php echo esc_html($st_std_gender); ?></td> 491 <th><?php esc_html_e('Date of Birth', 'edu-results'); ?></th> 492 <td><?php echo esc_html($st_std_dob); ?></td> 493 </tr> 494 <tr> 495 <th><?php esc_html_e('Student Type', 'edu-results'); ?></th> 496 <td><?php echo esc_html($rs_std_type); ?></td> 497 <th><?php esc_html_e('Institute Name', 'edu-results'); ?></th> 498 <td><?php echo esc_html($collageName); ?></td> 499 </tr> 500 <tr> 501 <th><?php esc_html_e('Examination', 'edu-results'); ?></th> 502 <td><?php echo esc_html($examination); ?></td> 503 <th><?php esc_html_e('GPA', 'edu-results'); ?></th> 504 <td><?php echo esc_html($rs_std_gpa); ?></td> 505 </tr> 506 </tbody> 507 </table> 508 </div><!--/ Student Information--> 509 510 <!--Student Subjects Information--> 511 <div class="cbedu-result-student-subject-area"> 512 <div class="cbedu-result-student-subject"> 513 <div class="cbedu-result-student-subject-heading"> 514 <h4><?php esc_html_e('Result Sheet', 'edu-results'); ?></h4> 515 </div> 516 <table> 517 <thead> 518 <tr> 519 <th><?php esc_html_e('Subject', 'edu-results'); ?></th> 520 <th><?php esc_html_e('Name of Subjects', 'edu-results'); ?></th> 521 <th><?php esc_html_e('Marks', 'edu-results'); ?></th> 522 <th><?php esc_html_e('Letter Grade', 'edu-results'); ?></th> 523 <th class="cbedu-table-gpa"><?php esc_html_e('GPA', 'edu-results'); ?> <abbr title="Without additional subject"><?php esc_html_e('(WAS)', 'edu-results'); ?></abbr></th> 524 <th><?php esc_html_e('GPA', 'edu-results'); ?></th> 525 </tr> 526 </thead> 527 <tbody> 528 <?php 497 529 498 530 // Check if there are subject results … … 552 584 </div> 553 585 <div class="cbedu-print-button-container"> 554 <button onclick="cbeduPrintResult('cbedu-result-table')"><?php _e('Print', 'edu-results'); ?></button>586 <button onclick="cbeduPrintResult('cbedu-result-table')"><?php esc_html_e('Print', 'edu-results'); ?></button> 555 587 </div> 556 588 <?php 557 }558 }559 560 wp_reset_postdata(); // Reset student query561 589 } 562 590 } else { 563 echo '<p> No results found for the selected examination.</p>';591 echo '<p>' . esc_html__('No results found for the selected examination.', 'edu-results') . '</p>'; 564 592 } 565 593 -
edu-results-publishing/trunk/inc/RepeaterCF.php
r3019484 r3422911 22 22 // Fetch subjects from 'subjects' custom post type 23 23 $subjects = get_posts(array( 24 'post_type' => 'cbedu_subjects', // Replace with your actual custom post type slug25 'posts_per_page' => -1 // Fetch all posts24 'post_type' => 'cbedu_subjects', 25 'posts_per_page' => -1 26 26 )); 27 27 … … 46 46 </script> 47 47 48 <table id="repeatable-fieldset-one" width="100%"> 49 <tbody> 50 <?php 51 if ($eduResultsGroup) : 52 foreach ($eduResultsGroup as $field) : 53 ?> 54 <tr> 55 <td width="70%"> 56 <select style="width:80%;padding:10px;" name="cbedu_results_subject_name[]"> 48 <div class="cbedu-subjects-repeater-wrapper"> 49 <div class="cbedu-repeater-header"> 50 <h3><?php esc_html_e('Add Subject Marks', 'edu-results'); ?></h3> 51 <p class="description"><?php esc_html_e('Select subjects and enter marks for each subject', 'edu-results'); ?></p> 52 </div> 53 54 <table id="repeatable-fieldset-one" class="cbedu-repeater-table"> 55 <thead> 56 <tr> 57 <th class="cbedu-repeater-th-subject"><?php esc_html_e('Subject', 'edu-results'); ?></th> 58 <th class="cbedu-repeater-th-marks"><?php esc_html_e('Marks / Grade', 'edu-results'); ?></th> 59 <th class="cbedu-repeater-th-action"><?php esc_html_e('Action', 'edu-results'); ?></th> 60 </tr> 61 </thead> 62 <tbody> 63 <?php 64 if ($eduResultsGroup) : 65 foreach ($eduResultsGroup as $field) : 66 ?> 67 <tr class="cbedu-repeater-row"> 68 <td class="cbedu-repeater-td-subject"> 69 <select class="cbedu-repeater-select" name="cbedu_results_subject_name[]"> 70 <option value=""><?php esc_attr_e('Select Subject', 'edu-results'); ?></option> 71 <?php foreach ($subjects as $subject) : 72 $subject_code = get_post_meta($subject->ID, 'cbedu_subject_code', true); 73 ?> 74 <option value="<?php echo esc_attr($subject->post_title); ?>" <?php selected($field['subject_name'], $subject->post_title); ?>> 75 <?php echo esc_html($subject_code ? $subject_code . ' - ' : '') . esc_html($subject->post_title); ?> 76 </option> 77 <?php endforeach; ?> 78 </select> 79 </td> 80 <td class="cbedu-repeater-td-input"> 81 <input class="cbedu-repeater-input" type="text" placeholder="<?php esc_attr_e('Enter marks or grade', 'edu-results'); ?>" name="cbedu_results_subject_value[]" value="<?php echo isset($field['subject_value']) ? esc_attr($field['subject_value']) : ''; ?>" /> 82 </td> 83 <td class="cbedu-repeater-td-action"> 84 <button type="button" class="button remove-row cbedu-remove-btn"> 85 <span class="dashicons dashicons-trash"></span> 86 <?php esc_html_e('Remove', 'edu-results'); ?> 87 </button> 88 </td> 89 </tr> 90 <?php 91 endforeach; 92 else : 93 ?> 94 <tr class="cbedu-repeater-row"> 95 <td class="cbedu-repeater-td-subject"> 96 <select class="cbedu-repeater-select" name="cbedu_results_subject_name[]"> 57 97 <option value=""><?php esc_attr_e('Select Subject', 'edu-results'); ?></option> 58 98 <?php foreach ($subjects as $subject) : 59 $subject_code = get_post_meta($subject->ID, 'cbedu_subject_code', true); 99 $subject_code = get_post_meta($subject->ID, 'cbedu_subject_code', true); 60 100 ?> 61 <option value="<?php echo esc_attr($subject->post_title); ?>" <?php selected($field['subject_name'], $subject->post_title); ?>>62 <?php echo esc_html($subject_code . ' - ' .$subject->post_title); ?>63 </option>101 <option value="<?php echo esc_attr($subject->post_title); ?>"> 102 <?php echo esc_html($subject_code ? $subject_code . ' - ' : '') . esc_html($subject->post_title); ?> 103 </option> 64 104 <?php endforeach; ?> 65 105 </select> 66 106 </td> 67 <td width="70%">68 <input style="width:80%;padding:10px;" type="text" placeholder="<?php esc_attr_e('Enter subject value', 'edu-results'); ?>" name="cbedu_results_subject_value[]" value="<?php echo isset($field['subject_value']) ? esc_attr($field['subject_value']) : ''; ?>" />107 <td class="cbedu-repeater-td-input"> 108 <input class="cbedu-repeater-input" type="text" placeholder="<?php esc_attr_e('Enter marks or grade', 'edu-results'); ?>" name="cbedu_results_subject_value[]" /> 69 109 </td> 70 <td width="15%"><a class="button remove-row" href="#1"><?php esc_html_e('Remove', 'edu-results'); ?></a></td> 110 <td class="cbedu-repeater-td-action"> 111 <button type="button" class="button remove-row cbedu-remove-btn"> 112 <span class="dashicons dashicons-trash"></span> 113 <?php esc_html_e('Remove', 'edu-results'); ?> 114 </button> 115 </td> 71 116 </tr> 72 <?php 73 endforeach; 74 else : 75 // Show a blank row 76 ?> 77 <tr> 78 <td width="70%"> 79 <select style="width:80%;padding:10px;" name="cbedu_results_subject_name[]"> 117 <?php endif; ?> 118 119 <!-- Empty hidden row for jQuery --> 120 <tr class="empty-row screen-reader-text cbedu-repeater-row"> 121 <td class="cbedu-repeater-td-subject"> 122 <select class="cbedu-repeater-select" name="cbedu_results_subject_name[]"> 80 123 <option value=""><?php esc_attr_e('Select Subject', 'edu-results'); ?></option> 81 <?php foreach ($subjects as $subject) : ?> 124 <?php foreach ($subjects as $subject) : 125 $subject_code = get_post_meta($subject->ID, 'cbedu_subject_code', true); 126 ?> 82 127 <option value="<?php echo esc_attr($subject->post_title); ?>"> 83 <?php echo esc_html($subject ->post_title); ?>128 <?php echo esc_html($subject_code ? $subject_code . ' - ' : '') . esc_html($subject->post_title); ?> 84 129 </option> 85 130 <?php endforeach; ?> 86 131 </select> 87 132 </td> 88 <td width="70%">89 <input style="width:80%;padding:10px;" type="text" placeholder="<?php esc_attr_e('Enter subject value', 'edu-results'); ?>" name="cbedu_results_subject_value[]" />133 <td class="cbedu-repeater-td-input"> 134 <input class="cbedu-repeater-input" type="text" placeholder="<?php esc_attr_e('Enter marks or grade', 'edu-results'); ?>" name="cbedu_results_subject_value[]" /> 90 135 </td> 91 <td width="15%"><a class="button remove-row" href="#1"><?php esc_html_e('Remove', 'edu-results'); ?></a></td> 136 <td class="cbedu-repeater-td-action"> 137 <button type="button" class="button remove-row cbedu-remove-btn"> 138 <span class="dashicons dashicons-trash"></span> 139 <?php esc_html_e('Remove', 'edu-results'); ?> 140 </button> 141 </td> 92 142 </tr> 93 <?php endif; ?> 94 95 <!-- Empty hidden row for jQuery --> 96 <tr class="empty-row screen-reader-text"> 97 <td width="70%"> 98 <select style="width:80%;padding:10px;" name="cbedu_results_subject_name[]"> 99 <option value=""><?php esc_attr_e('Select Subject', 'edu-results'); ?></option> 100 <?php foreach ($subjects as $subject) : ?> 101 <option value="<?php echo esc_attr($subject->post_title); ?>"> 102 <?php echo esc_html($subject->post_title); ?> 103 </option> 104 <?php endforeach; ?> 105 </select> 106 </td> 107 <td width="70%"> 108 <input style="width:80%;padding:10px;" type="text" placeholder="<?php esc_attr_e('Enter subject value', 'edu-results'); ?>" name="cbedu_results_subject_value[]" /> 109 </td> 110 <td width="15%"><a class="button remove-row" href="#1"><?php esc_html_e('Remove', 'edu-results'); ?></a></td> 111 </tr> 112 </tbody> 113 </table> 114 115 <p><a id="edu-add-subject-row" class="button" href="#"><?php esc_html_e('Add Another', 'edu-results'); ?></a></p> 143 </tbody> 144 </table> 145 146 <div class="cbedu-repeater-footer"> 147 <button type="button" id="edu-add-subject-row" class="button button-primary cbedu-add-subject-btn"> 148 <span class="dashicons dashicons-plus-alt"></span> 149 <?php esc_html_e('Add Another Subject', 'edu-results'); ?> 150 </button> 151 </div> 152 </div> 116 153 <?php 117 154 } … … 128 165 return; 129 166 167 // Skip auto-draft, trash, and inherit posts 168 $post_status = get_post_status($postID); 169 if (in_array($post_status, array('auto-draft', 'trash', 'inherit'))) 170 return; 171 130 172 if (!current_user_can('edit_post', $postID)) 173 return; 174 175 // Check post type 176 if (get_post_type($postID) !== 'cbedu_results') 131 177 return; 132 178 -
edu-results-publishing/trunk/inc/admin/settings.php
r3019484 r3422911 16 16 add_action('admin_menu', array($this, 'addSubmenuPage')); 17 17 add_action('admin_init', array($this, 'registerSettings')); 18 add_action('admin_enqueue_scripts', array($this, 'enqueueSettingsStyles')); 19 } 20 21 public function enqueueSettingsStyles($hook) 22 { 23 // Only load on our settings page 24 if ($hook !== 'cbedu_results_page_cbedu_results_settings') { 25 return; 26 } 27 28 wp_enqueue_style( 29 'cbedu-admin-settings', 30 plugins_url('../../assets/css/admin-settings.css', __FILE__), 31 array(), 32 '1.0.0' 33 ); 18 34 } 19 35 … … 32 48 { 33 49 ?> 34 <div class="wrap"> 50 <div class="wrap cbedu-settings-wrap"> 51 <div class="cbedu-settings-header"> 52 <h1><?php echo esc_html__('🎓 Edu Results Settings', 'edu-results'); ?></h1> 53 <p class="cbedu-settings-subtitle"><?php echo esc_html__('Configure your educational institution settings', 'edu-results'); ?></p> 54 </div> 55 35 56 <?php settings_errors(); ?> 36 <h2>Edu Results Settings</h2> 37 <form method="post" action="options.php" enctype="multipart/form-data"> <!-- Add enctype for file upload --> 38 <?php settings_fields('cbedu_results_settings_group'); ?> 39 <?php do_settings_sections('cbedu_results_settings'); ?> 40 <?php 41 // Add nonce field 42 wp_nonce_field('cbedu_results_settings_nonce', 'cbedu_results_settings_nonce_field'); 43 ?> 44 <?php submit_button(); ?> 45 </form> 57 58 <div class="cbedu-settings-container"> 59 <form method="post" action="options.php" enctype="multipart/form-data" class="cbedu-settings-form"> 60 <?php settings_fields('cbedu_results_settings_group'); ?> 61 <?php wp_nonce_field('cbedu_results_settings_nonce', 'cbedu_results_settings_nonce_field'); ?> 62 63 <div class="cbedu-settings-card"> 64 <div class="cbedu-card-header"> 65 <h2>🏛️ Institution Information</h2> 66 <p class="description">Basic information about your educational institution</p> 67 </div> 68 <div class="cbedu-card-body"> 69 <?php do_settings_sections('cbedu_results_settings'); ?> 70 </div> 71 </div> 72 73 <div class="cbedu-settings-footer"> 74 <?php submit_button(__('Save Settings', 'edu-results'), 'primary cbedu-save-btn', 'submit', false); ?> 75 </div> 76 </form> 77 </div> 46 78 </div> 47 79 <?php … … 187 219 $logoURL = get_option('cbedu_results_logo'); 188 220 ?> 189 <input type="text" name="cbedu_results_logo" value="<?php echo esc_url($logoURL); ?>" id="cbedu_results_logo"> 190 <input type="button" id="upload_logo_button" class="button" value="Upload Logo"> 191 <br> 192 <img src="<?php echo esc_url($logoURL); ?>" alt="Logo Preview" id="logo_preview" style="max-width: 200px;"> 221 <div class="cbedu-field-wrapper"> 222 <input type="text" name="cbedu_results_logo" value="<?php echo esc_url($logoURL); ?>" id="cbedu_results_logo" placeholder="https://example.com/logo.png"> 223 <input type="button" id="upload_logo_button" class="button" value="📁 Upload Logo"> 224 <p class="description">Upload or enter the URL of your institution's logo</p> 225 <?php if ($logoURL): ?> 226 <img src="<?php echo esc_url($logoURL); ?>" alt="Logo Preview" id="logo_preview"> 227 <?php endif; ?> 228 </div> 193 229 <script> 194 230 jQuery(document).ready(function($) { … … 210 246 var attachment = customUploader.state().get('selection').first().toJSON(); 211 247 $('#cbedu_results_logo').val(attachment.url); 212 $('#logo_preview').attr('src', attachment.url) ;248 $('#logo_preview').attr('src', attachment.url).show(); 213 249 }); 214 250 … … 217 253 }); 218 254 </script> 219 <p class="description">Upload your logo here.</p>220 255 <?php 221 256 } … … 224 259 public function settingsSectionCallback() 225 260 { 226 echo ' These are the general settings for the Edu Results plugin.';261 echo '<p class="cbedu-section-description">Configure the basic information about your educational institution. This information will be displayed on result pages.</p>'; 227 262 } 228 263 … … 232 267 { 233 268 $collageName = get_option('cbedu_results_collage_name'); 234 echo '<input type="text" name="cbedu_results_collage_name" value="' . esc_attr($collageName) . '" />'; 269 echo '<div class="cbedu-field-wrapper">'; 270 echo '<input type="text" name="cbedu_results_collage_name" value="' . esc_attr($collageName) . '" placeholder="e.g., Springfield High School" />'; 271 echo '<p class="description">Full name of your educational institution</p>'; 272 echo '</div>'; 235 273 } 236 274 … … 238 276 { 239 277 $collageRegNumber = get_option('cbedu_results_collage_registration_number'); 240 echo '<input type="text" name="cbedu_results_collage_registration_number" value="' . esc_attr($collageRegNumber) . '" />'; 278 echo '<div class="cbedu-field-wrapper">'; 279 echo '<input type="text" name="cbedu_results_collage_registration_number" value="' . esc_attr($collageRegNumber) . '" placeholder="e.g., REG-2024-001" />'; 280 echo '<p class="description">Official registration or EIIN number</p>'; 281 echo '</div>'; 241 282 } 242 283 … … 244 285 { 245 286 $collageSinceYear = get_option('cbedu_results_collage_since_year'); 246 echo '<input type="text" name="cbedu_results_collage_since_year" value="' . esc_attr($collageSinceYear) . '" />'; 287 echo '<div class="cbedu-field-wrapper">'; 288 echo '<input type="text" name="cbedu_results_collage_since_year" value="' . esc_attr($collageSinceYear) . '" placeholder="e.g., 1995" />'; 289 echo '<p class="description">Year when the institution was established</p>'; 290 echo '</div>'; 247 291 } 248 292 … … 250 294 { 251 295 $collageAddress = get_option('cbedu_results_collage_address'); 252 echo '<textarea name="cbedu_results_collage_address" rows="5" cols="50">' . esc_textarea($collageAddress) . '</textarea>'; 296 echo '<div class="cbedu-field-wrapper">'; 297 echo '<textarea name="cbedu_results_collage_address" rows="5" cols="50" placeholder="Enter complete address with city, state, and postal code">' . esc_textarea($collageAddress) . '</textarea>'; 298 echo '<p class="description">Complete postal address of the institution</p>'; 299 echo '</div>'; 253 300 } 254 301 … … 257 304 { 258 305 $collagePhoneNumber = get_option('cbedu_results_collage_phone_number'); 259 echo '<input type="text" name="cbedu_results_collage_phone_number" value="' . esc_attr($collagePhoneNumber) . '" />'; 306 echo '<div class="cbedu-field-wrapper">'; 307 echo '<input type="text" name="cbedu_results_collage_phone_number" value="' . esc_attr($collagePhoneNumber) . '" placeholder="e.g., +880-123-456-7890" />'; 308 echo '<p class="description">Primary contact phone number</p>'; 309 echo '</div>'; 260 310 } 261 311 … … 263 313 { 264 314 $collageEmailAddress = get_option('cbedu_results_collage_email_address'); 265 echo '<input type="email" name="cbedu_results_collage_email_address" value="' . esc_attr($collageEmailAddress) . '" />'; 315 echo '<div class="cbedu-field-wrapper">'; 316 echo '<input type="email" name="cbedu_results_collage_email_address" value="' . esc_attr($collageEmailAddress) . '" placeholder="e.g., info@institution.edu" />'; 317 echo '<p class="description">Official email address for contact</p>'; 318 echo '</div>'; 266 319 } 267 320 … … 270 323 { 271 324 $collageWebsiteUrl = get_option('cbedu_results_collage_website_url'); 272 echo '<input type="url" name="cbedu_results_collage_website_url" value="' . esc_url($collageWebsiteUrl) . '" />'; 325 echo '<div class="cbedu-field-wrapper">'; 326 echo '<input type="url" name="cbedu_results_collage_website_url" value="' . esc_url($collageWebsiteUrl) . '" placeholder="https://www.institution.edu" />'; 327 echo '<p class="description">Official website URL</p>'; 328 echo '</div>'; 273 329 } 274 330 … … 276 332 { 277 333 $bannerHeading = get_option('cbedu_results_banner_heading'); 278 echo '<input type="text" name="cbedu_results_banner_heading" value="' . esc_attr($bannerHeading) . '" />'; 334 echo '<div class="cbedu-field-wrapper">'; 335 echo '<input type="text" name="cbedu_results_banner_heading" value="' . esc_attr($bannerHeading) . '" placeholder="Enter custom heading text for result banners" />'; 336 echo '<p class="description">Custom heading text that appears on result pages</p>'; 337 echo '</div>'; 279 338 } 280 339 } -
edu-results-publishing/trunk/inc/custom-fields.php
r3019484 r3422911 29 29 add_action('wp_ajax_add_search_registration_numbers', array($this, 'add_search_registration_numbers')); 30 30 // add_action('wp_ajax_nopriv_add_search_registration_numbers', array($this, 'add_search_registration_numbers')); 31 32 // Hook to handle auto-draft deletion 33 add_action('admin_init', array($this, 'handle_auto_draft_deletion')); 34 } 35 36 /** 37 * Handle auto-draft deletion via admin actions 38 */ 39 public function handle_auto_draft_deletion() 40 { 41 // Check if we're trying to delete an auto-draft 42 if (isset($_GET['action']) && $_GET['action'] === 'trash' && isset($_GET['post'])) { 43 $post_id = intval($_GET['post']); 44 $post = get_post($post_id); 45 46 if ($post && $post->post_status === 'auto-draft' && 47 in_array($post->post_type, array('cbedu_students', 'cbedu_subjects', 'cbedu_results'))) { 48 49 // Force delete auto-draft instead of trashing 50 wp_delete_post($post_id, true); 51 52 // Redirect back to the list 53 wp_redirect(admin_url('edit.php?post_type=' . $post->post_type . '&deleted=1')); 54 exit; 55 } 56 } 57 58 // Handle bulk deletion 59 if (isset($_GET['action']) && $_GET['action'] === 'trash' && isset($_GET['post']) && is_array($_GET['post'])) { 60 foreach ($_GET['post'] as $post_id) { 61 $post_id = intval($post_id); 62 $post = get_post($post_id); 63 64 if ($post && $post->post_status === 'auto-draft' && 65 in_array($post->post_type, array('cbedu_students', 'cbedu_subjects', 'cbedu_results'))) { 66 67 // Force delete auto-draft instead of trashing 68 wp_delete_post($post_id, true); 69 } 70 } 71 } 31 72 } 32 73 … … 41 82 42 83 add_action('save_post', array($this, 'save_student_fields')); 43 add_action('save_post', array($this, 'cbedu_check_unique_registration_number')); 84 add_action('save_post', array($this, 'cbedu_check_unique_registration_number')); 85 86 // Clean up auto-draft posts 87 add_action('wp_scheduled_delete', array($this, 'cleanup_auto_drafts')); 88 89 // Allow deletion of auto-draft posts 90 add_filter('user_has_cap', array($this, 'allow_auto_draft_deletion'), 10, 4); 91 92 // Disable autosave for our custom post types 93 add_action('admin_print_scripts', array($this, 'disable_autosave')); 94 } 95 96 /** 97 * Disable autosave for custom post types 98 */ 99 public function disable_autosave() 100 { 101 global $post; 102 103 if ($post && in_array($post->post_type, array('cbedu_students', 'cbedu_subjects', 'cbedu_results'))) { 104 wp_dequeue_script('autosave'); 105 } 106 } 107 108 /** 109 * Allow users to delete auto-draft posts for our custom post types 110 */ 111 public function allow_auto_draft_deletion($allcaps, $caps, $args, $user) 112 { 113 // Check if this is a delete operation 114 if (isset($args[0]) && in_array($args[0], array('delete_post', 'delete_posts'))) { 115 // Check if we have a post ID 116 if (isset($args[2])) { 117 $post_id = $args[2]; 118 $post = get_post($post_id); 119 120 // If it's an auto-draft of our custom post types, allow deletion 121 if ($post && in_array($post->post_type, array('cbedu_students', 'cbedu_subjects', 'cbedu_results'))) { 122 if ($post->post_status === 'auto-draft') { 123 $allcaps['delete_posts'] = true; 124 $allcaps['delete_published_posts'] = true; 125 $allcaps['delete_others_posts'] = true; 126 } 127 } 128 } 129 } 130 131 return $allcaps; 132 } 133 134 /** 135 * Clean up old auto-draft posts for cbedu custom post types 136 */ 137 public function cleanup_auto_drafts() 138 { 139 global $wpdb; 140 141 // Delete auto-drafts older than 7 days for our custom post types 142 $post_types = array('cbedu_students', 'cbedu_subjects', 'cbedu_results'); 143 144 foreach ($post_types as $post_type) { 145 $wpdb->query($wpdb->prepare( 146 "DELETE FROM {$wpdb->posts} 147 WHERE post_type = %s 148 AND post_status = 'auto-draft' 149 AND DATE_SUB(NOW(), INTERVAL 7 DAY) > post_date", 150 $post_type 151 )); 152 } 44 153 } 45 154 … … 73 182 wp_nonce_field('cbedu_save_student_nonce_action', 'cbedu_save_student_nonce'); 74 183 75 184 // Get all meta values 76 185 $id_number = get_post_meta($post->ID, 'cbedu_result_std_id', true); 77 186 $std_registration_number = get_post_meta($post->ID, 'cbedu_result_std_registration_number', true); … … 79 188 $mother_name = get_post_meta($post->ID, 'cbedu_result_std_mother_name', true); 80 189 $dob = get_post_meta($post->ID, 'cbedu_result_std_dob', true); 81 82 190 $gender = get_post_meta($post->ID, 'cbedu_result_std_gender', true); 83 191 $phone = get_post_meta($post->ID, 'cbedu_result_std_phone', true); … … 92 200 $birth_registration_number = get_post_meta($post->ID, 'cbedu_result_std_birth_registration_number', true); 93 201 $nid_number = get_post_meta($post->ID, 'cbedu_result_std_nid_number', true); 94 95 96 // Output HTML inputs for each field97 202 ?> 98 <table> 99 <tr> 100 <td> 101 <label for="cbedu_result_std_id"><?php esc_html_e('ID Number:', 'edu-results'); ?></label> 102 </td> 103 <td> 104 <input class="regular-text" style="padding: 7px 10px;" type="text" id="cbedu_result_std_id" name="cbedu_result_std_id" value="<?php echo esc_attr($id_number); ?>" /> 105 </td> 106 </tr> 107 <tr> 108 <td> 109 <label for="cbedu_result_std_registration_number"><?php esc_html_e('Registration Number:', 'edu-results'); ?></label> 110 </td> 111 <td> 112 <input class="regular-text" style="padding: 7px 10px;" type="text" id="cbedu_result_std_registration_number" name="cbedu_result_std_registration_number" value="<?php echo esc_attr($std_registration_number); ?>" /> 113 </td> 114 </tr> 115 <tr> 116 <td> 117 <label for="cbedu_result_std_father_name"><?php esc_html_e('Father Name:', 'edu-results'); ?></label> 118 </td> 119 <td> 120 <input class="regular-text" style="padding: 7px 10px;" type="text" id="cbedu_result_std_father_name" name="cbedu_result_std_father_name" value="<?php echo esc_attr($father_name); ?>" /> 121 </td> 122 </tr> 123 <tr> 124 <td> 125 <label for="cbedu_result_std_mother_name"><?php esc_html_e('Mother Name:', 'edu-results'); ?></label> 126 </td> 127 <td> 128 <input class="regular-text" style="padding: 7px 10px;" type="text" id="cbedu_result_std_mother_name" name="cbedu_result_std_mother_name" value="<?php echo esc_attr($mother_name); ?>" /> 129 </td> 130 </tr> 131 <tr> 132 <td> 133 <label for="cbedu_result_std_dob"><?php esc_html_e('Date of Birth:', 'edu-results'); ?></label> 134 </td> 135 <td> 136 <input class="regular-text" style="padding: 7px 10px;" type="date" id="cbedu_result_std_dob" name="cbedu_result_std_dob" value="<?php echo esc_attr($dob); ?>" /> 137 </td> 138 </tr> 139 <tr> 140 <td><label for="cbedu_result_std_gender"><?php esc_html_e('Gender:', 'edu-results'); ?></label></td> 141 <td> 142 <select id="cbedu_result_std_gender" name="cbedu_result_std_gender"> 143 <option value="Male" <?php selected($gender, 'Male'); ?>><?php esc_html_e('Male', 'edu-results'); ?></option> 144 <option value="Female" <?php selected($gender, 'Female'); ?>><?php esc_html_e('Female', 'edu-results'); ?></option> 145 <option value="Other" <?php selected($gender, 'Other'); ?>><?php esc_html_e('Other', 'edu-results'); ?></option> 146 </select> 147 </td> 148 </tr> 149 150 <tr> 151 <td><label for="cbedu_result_std_phone"><?php esc_html_e('Phone Number:', 'edu-results'); ?></label></td> 152 <td><input class="regular-text" type="text" id="cbedu_result_std_phone" name="cbedu_result_std_phone" value="<?php echo esc_attr($phone); ?>" /></td> 153 </tr> 154 <tr> 155 <td><label for="cbedu_result_std_email"><?php esc_html_e('Email Address:', 'edu-results'); ?></label></td> 156 <td><input class="regular-text" type="email" id="cbedu_result_std_email" name="cbedu_result_std_email" value="<?php echo esc_attr($email); ?>" /></td> 157 </tr> 158 <tr> 159 <td><label for="cbedu_result_std_blood_group"><?php esc_html_e('Blood Group:', 'edu-results'); ?></label></td> 160 <td> 161 <select id="cbedu_result_std_blood_group" name="cbedu_result_std_blood_group"> 162 <option value=""><?php esc_html_e('Select Blood Group', 'edu-results'); ?></option> 163 <option value="A+" <?php selected($blood_group, 'A+'); ?>><?php esc_html_e('A+', 'edu-results'); ?></option> 164 <option value="A-" <?php selected($blood_group, 'A-'); ?>><?php esc_html_e('A-', 'edu-results'); ?></option> 165 <option value="B+" <?php selected($blood_group, 'B+'); ?>><?php esc_html_e('B+', 'edu-results'); ?></option> 166 <option value="B-" <?php selected($blood_group, 'B-'); ?>><?php esc_html_e('B-', 'edu-results'); ?></option> 167 <option value="AB+" <?php selected($blood_group, 'AB+'); ?>><?php esc_html_e('AB+', 'edu-results'); ?></option> 168 <option value="AB-" <?php selected($blood_group, 'AB-'); ?>><?php esc_html_e('AB-', 'edu-results'); ?></option> 169 <option value="O+" <?php selected($blood_group, 'O+'); ?>><?php esc_html_e('O+', 'edu-results'); ?></option> 170 <option value="O-" <?php selected($blood_group, 'O-'); ?>><?php esc_html_e('O-', 'edu-results'); ?></option> 171 </select> 172 </td> 173 </tr> 174 <tr> 175 <td><label for="cbedu_result_std_guardian_phone"><?php esc_html_e('Guardian Phone Number:', 'edu-results'); ?></label></td> 176 <td><input class="regular-text" type="text" id="cbedu_result_std_guardian_phone" name="cbedu_result_std_guardian_phone" value="<?php echo esc_attr($guardian_phone); ?>" /></td> 177 </tr> 178 <tr> 179 <td><label for="cbedu_result_std_fathers_qualification"><?php esc_html_e('Father\'s Qualification:', 'edu-results'); ?></label></td> 180 <td><input class="regular-text" type="text" id="cbedu_result_std_fathers_qualification" name="cbedu_result_std_fathers_qualification" value="<?php echo esc_attr($fathers_qualification); ?>" /></td> 181 </tr> 182 <tr> 183 <td><label for="cbedu_result_std_fathers_occupation"><?php esc_html_e('Father\'s Occupation:', 'edu-results'); ?></label></td> 184 <td><input class="regular-text" type="text" id="cbedu_result_std_fathers_occupation" name="cbedu_result_std_fathers_occupation" value="<?php echo esc_attr($fathers_occupation); ?>" /></td> 185 </tr> 186 <tr> 187 <td><label for="cbedu_result_std_mothers_occupation"><?php esc_html_e('Mother\'s Occupation:', 'edu-results'); ?></label></td> 188 <td><input class="regular-text" type="text" id="cbedu_result_std_mothers_occupation" name="cbedu_result_std_mothers_occupation" value="<?php echo esc_attr($mothers_occupation); ?>" /></td> 189 </tr> 190 <tr> 191 <td><label for="cbedu_result_std_mothers_qualification"><?php esc_html_e('Mother\'s Qualification:', 'edu-results'); ?></label></td> 192 <td><input class="regular-text" type="text" id="cbedu_result_std_mothers_qualification" name="cbedu_result_std_mothers_qualification" value="<?php echo esc_attr($mothers_qualification); ?>" /></td> 193 </tr> 194 <tr> 195 <td><label for="cbedu_result_std_birth_registration_number"><?php esc_html_e('Birth Registration Number:', 'edu-results'); ?></label></td> 196 <td><input class="regular-text" type="text" id="cbedu_result_std_birth_registration_number" name="cbedu_result_std_birth_registration_number" value="<?php echo esc_attr($birth_registration_number); ?>" /></td> 197 </tr> 198 <tr> 199 <td><label for="cbedu_result_std_nid_number"><?php esc_html_e('NID Number:', 'edu-results'); ?></label></td> 200 <td><input class="regular-text" type="text" id="cbedu_result_std_nid_number" name="cbedu_result_std_nid_number" value="<?php echo esc_attr($nid_number); ?>" /></td> 201 </tr> 202 <tr> 203 <td><label for="cbedu_result_std_address"><?php esc_html_e('Address:', 'edu-results'); ?></label></td> 204 <td> 205 <textarea id="cbedu_result_std_address" name="cbedu_result_std_address" rows="4" cols="50"><?php echo esc_textarea($address); ?></textarea> 206 </td> 207 </tr> 208 209 </table> 203 <div class="cbedu-meta-box-wrap"> 204 <!-- Basic Information Section --> 205 <div class="cbedu-field-section"> 206 <h3 class="cbedu-section-header"><?php esc_html_e('Basic Information', 'edu-results'); ?></h3> 207 <div class="cbedu-section-content"> 208 <div class="cbedu-field-row"> 209 <div class="cbedu-field-group"> 210 <label class="cbedu-field-label" for="cbedu_result_std_id"> 211 <?php esc_html_e('ID Number', 'edu-results'); ?> 212 <span class="required">*</span> 213 </label> 214 <input class="cbedu-field-input" type="text" id="cbedu_result_std_id" name="cbedu_result_std_id" value="<?php echo esc_attr($id_number); ?>" placeholder="<?php esc_attr_e('Enter student ID', 'edu-results'); ?>" /> 215 </div> 216 217 <div class="cbedu-field-group"> 218 <label class="cbedu-field-label" for="cbedu_result_std_registration_number"> 219 <?php esc_html_e('Registration Number', 'edu-results'); ?> 220 <span class="required">*</span> 221 </label> 222 <input class="cbedu-field-input" type="text" id="cbedu_result_std_registration_number" name="cbedu_result_std_registration_number" value="<?php echo esc_attr($std_registration_number); ?>" placeholder="<?php esc_attr_e('Enter registration number', 'edu-results'); ?>" /> 223 </div> 224 </div> 225 226 <div class="cbedu-field-row"> 227 <div class="cbedu-field-group"> 228 <label class="cbedu-field-label" for="cbedu_result_std_dob"> 229 <?php esc_html_e('Date of Birth', 'edu-results'); ?> 230 </label> 231 <input class="cbedu-field-input" type="date" id="cbedu_result_std_dob" name="cbedu_result_std_dob" value="<?php echo esc_attr($dob); ?>" /> 232 </div> 233 234 <div class="cbedu-field-group"> 235 <label class="cbedu-field-label" for="cbedu_result_std_gender"> 236 <?php esc_html_e('Gender', 'edu-results'); ?> 237 </label> 238 <select class="cbedu-field-select" id="cbedu_result_std_gender" name="cbedu_result_std_gender"> 239 <option value=""><?php esc_html_e('Select Gender', 'edu-results'); ?></option> 240 <option value="Male" <?php selected($gender, 'Male'); ?>><?php esc_html_e('Male', 'edu-results'); ?></option> 241 <option value="Female" <?php selected($gender, 'Female'); ?>><?php esc_html_e('Female', 'edu-results'); ?></option> 242 <option value="Other" <?php selected($gender, 'Other'); ?>><?php esc_html_e('Other', 'edu-results'); ?></option> 243 </select> 244 </div> 245 246 <div class="cbedu-field-group"> 247 <label class="cbedu-field-label" for="cbedu_result_std_blood_group"> 248 <?php esc_html_e('Blood Group', 'edu-results'); ?> 249 </label> 250 <select class="cbedu-field-select" id="cbedu_result_std_blood_group" name="cbedu_result_std_blood_group"> 251 <option value=""><?php esc_html_e('Select Blood Group', 'edu-results'); ?></option> 252 <option value="A+" <?php selected($blood_group, 'A+'); ?>>A+</option> 253 <option value="A-" <?php selected($blood_group, 'A-'); ?>>A-</option> 254 <option value="B+" <?php selected($blood_group, 'B+'); ?>>B+</option> 255 <option value="B-" <?php selected($blood_group, 'B-'); ?>>B-</option> 256 <option value="AB+" <?php selected($blood_group, 'AB+'); ?>>AB+</option> 257 <option value="AB-" <?php selected($blood_group, 'AB-'); ?>>AB-</option> 258 <option value="O+" <?php selected($blood_group, 'O+'); ?>>O+</option> 259 <option value="O-" <?php selected($blood_group, 'O-'); ?>>O-</option> 260 </select> 261 </div> 262 </div> 263 </div> 264 </div> 265 266 <!-- Contact Information Section --> 267 <div class="cbedu-field-section"> 268 <h3 class="cbedu-section-header"><?php esc_html_e('Contact Information', 'edu-results'); ?></h3> 269 <div class="cbedu-section-content"> 270 <div class="cbedu-field-row"> 271 <div class="cbedu-field-group"> 272 <label class="cbedu-field-label" for="cbedu_result_std_phone"> 273 <?php esc_html_e('Phone Number', 'edu-results'); ?> 274 </label> 275 <input class="cbedu-field-input" type="text" id="cbedu_result_std_phone" name="cbedu_result_std_phone" value="<?php echo esc_attr($phone); ?>" placeholder="<?php esc_attr_e('+880...', 'edu-results'); ?>" /> 276 </div> 277 278 <div class="cbedu-field-group"> 279 <label class="cbedu-field-label" for="cbedu_result_std_email"> 280 <?php esc_html_e('Email Address', 'edu-results'); ?> 281 </label> 282 <input class="cbedu-field-input" type="email" id="cbedu_result_std_email" name="cbedu_result_std_email" value="<?php echo esc_attr($email); ?>" placeholder="<?php esc_attr_e('student@example.com', 'edu-results'); ?>" /> 283 </div> 284 285 <div class="cbedu-field-group"> 286 <label class="cbedu-field-label" for="cbedu_result_std_guardian_phone"> 287 <?php esc_html_e('Guardian Phone', 'edu-results'); ?> 288 </label> 289 <input class="cbedu-field-input" type="text" id="cbedu_result_std_guardian_phone" name="cbedu_result_std_guardian_phone" value="<?php echo esc_attr($guardian_phone); ?>" placeholder="<?php esc_attr_e('+880...', 'edu-results'); ?>" /> 290 </div> 291 </div> 292 293 <div class="cbedu-field-row"> 294 <div class="cbedu-field-group cbedu-field-full"> 295 <label class="cbedu-field-label" for="cbedu_result_std_address"> 296 <?php esc_html_e('Address', 'edu-results'); ?> 297 </label> 298 <textarea class="cbedu-field-textarea" id="cbedu_result_std_address" name="cbedu_result_std_address" rows="3" placeholder="<?php esc_attr_e('Enter full address...', 'edu-results'); ?>"><?php echo esc_textarea($address); ?></textarea> 299 </div> 300 </div> 301 </div> 302 </div> 303 304 <!-- Family Information Section --> 305 <div class="cbedu-field-section"> 306 <h3 class="cbedu-section-header"><?php esc_html_e('Family Information', 'edu-results'); ?></h3> 307 <div class="cbedu-section-content"> 308 <div class="cbedu-field-row"> 309 <div class="cbedu-field-group"> 310 <label class="cbedu-field-label" for="cbedu_result_std_father_name"> 311 <?php esc_html_e("Father's Name", 'edu-results'); ?> 312 </label> 313 <input class="cbedu-field-input" type="text" id="cbedu_result_std_father_name" name="cbedu_result_std_father_name" value="<?php echo esc_attr($father_name); ?>" placeholder="<?php esc_attr_e("Enter father's name", 'edu-results'); ?>" /> 314 </div> 315 316 <div class="cbedu-field-group"> 317 <label class="cbedu-field-label" for="cbedu_result_std_fathers_occupation"> 318 <?php esc_html_e("Father's Occupation", 'edu-results'); ?> 319 </label> 320 <input class="cbedu-field-input" type="text" id="cbedu_result_std_fathers_occupation" name="cbedu_result_std_fathers_occupation" value="<?php echo esc_attr($fathers_occupation); ?>" placeholder="<?php esc_attr_e('Enter occupation', 'edu-results'); ?>" /> 321 </div> 322 323 <div class="cbedu-field-group"> 324 <label class="cbedu-field-label" for="cbedu_result_std_fathers_qualification"> 325 <?php esc_html_e("Father's Qualification", 'edu-results'); ?> 326 </label> 327 <input class="cbedu-field-input" type="text" id="cbedu_result_std_fathers_qualification" name="cbedu_result_std_fathers_qualification" value="<?php echo esc_attr($fathers_qualification); ?>" placeholder="<?php esc_attr_e('Enter qualification', 'edu-results'); ?>" /> 328 </div> 329 </div> 330 331 <div class="cbedu-field-row"> 332 <div class="cbedu-field-group"> 333 <label class="cbedu-field-label" for="cbedu_result_std_mother_name"> 334 <?php esc_html_e("Mother's Name", 'edu-results'); ?> 335 </label> 336 <input class="cbedu-field-input" type="text" id="cbedu_result_std_mother_name" name="cbedu_result_std_mother_name" value="<?php echo esc_attr($mother_name); ?>" placeholder="<?php esc_attr_e("Enter mother's name", 'edu-results'); ?>" /> 337 </div> 338 339 <div class="cbedu-field-group"> 340 <label class="cbedu-field-label" for="cbedu_result_std_mothers_occupation"> 341 <?php esc_html_e("Mother's Occupation", 'edu-results'); ?> 342 </label> 343 <input class="cbedu-field-input" type="text" id="cbedu_result_std_mothers_occupation" name="cbedu_result_std_mothers_occupation" value="<?php echo esc_attr($mothers_occupation); ?>" placeholder="<?php esc_attr_e('Enter occupation', 'edu-results'); ?>" /> 344 </div> 345 346 <div class="cbedu-field-group"> 347 <label class="cbedu-field-label" for="cbedu_result_std_mothers_qualification"> 348 <?php esc_html_e("Mother's Qualification", 'edu-results'); ?> 349 </label> 350 <input class="cbedu-field-input" type="text" id="cbedu_result_std_mothers_qualification" name="cbedu_result_std_mothers_qualification" value="<?php echo esc_attr($mothers_qualification); ?>" placeholder="<?php esc_attr_e('Enter qualification', 'edu-results'); ?>" /> 351 </div> 352 </div> 353 </div> 354 </div> 355 356 <!-- Government Documents Section --> 357 <div class="cbedu-field-section"> 358 <h3 class="cbedu-section-header"><?php esc_html_e('Government Documents', 'edu-results'); ?></h3> 359 <div class="cbedu-section-content"> 360 <div class="cbedu-field-row"> 361 <div class="cbedu-field-group"> 362 <label class="cbedu-field-label" for="cbedu_result_std_birth_registration_number"> 363 <?php esc_html_e('Birth Registration Number', 'edu-results'); ?> 364 </label> 365 <input class="cbedu-field-input" type="text" id="cbedu_result_std_birth_registration_number" name="cbedu_result_std_birth_registration_number" value="<?php echo esc_attr($birth_registration_number); ?>" placeholder="<?php esc_attr_e('Enter birth registration number', 'edu-results'); ?>" /> 366 </div> 367 368 <div class="cbedu-field-group"> 369 <label class="cbedu-field-label" for="cbedu_result_std_nid_number"> 370 <?php esc_html_e('NID Number', 'edu-results'); ?> 371 </label> 372 <input class="cbedu-field-input" type="text" id="cbedu_result_std_nid_number" name="cbedu_result_std_nid_number" value="<?php echo esc_attr($nid_number); ?>" placeholder="<?php esc_attr_e('Enter NID number', 'edu-results'); ?>" /> 373 </div> 374 </div> 375 </div> 376 </div> 377 </div> 210 378 <?php 211 379 } … … 220 388 // Save the custom field values when the post is saved 221 389 if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { 390 return; 391 } 392 393 // Skip auto-draft, trash, and inherit posts 394 $post_status = get_post_status($post_id); 395 if (in_array($post_status, array('auto-draft', 'trash', 'inherit'))) { 396 return; 397 } 398 399 // Check post type 400 if (get_post_type($post_id) !== 'cbedu_students') { 222 401 return; 223 402 } … … 346 525 // Output HTML input for subject code 347 526 ?> 348 <table> 349 <tr> 350 <td> 351 <label for="cbedu_subject_code"><?php esc_html_e('Subject Code:', 'edu-results'); ?></label> 352 </td> 353 <td> 354 <input class="regular-text" type="text" id="cbedu_subject_code" name="cbedu_subject_code" value="<?php echo esc_attr($subject_code); ?>" /> 355 </td> 356 </tr> 357 </table> 527 <div class="cbedu-meta-box-wrap"> 528 <div class="cbedu-field-section"> 529 <h3 class="cbedu-section-header"><?php esc_html_e('Subject Information', 'edu-results'); ?></h3> 530 <div class="cbedu-section-content"> 531 <div class="cbedu-field-row"> 532 <div class="cbedu-field-group"> 533 <label class="cbedu-field-label" for="cbedu_subject_code"> 534 <?php esc_html_e('Subject Code', 'edu-results'); ?> 535 </label> 536 <input class="cbedu-field-input" type="text" id="cbedu_subject_code" name="cbedu_subject_code" value="<?php echo esc_attr($subject_code); ?>" placeholder="<?php esc_attr_e('e.g., MATH101', 'edu-results'); ?>" /> 537 <p class="cbedu-field-description"><?php esc_html_e('Enter a unique code for this subject', 'edu-results'); ?></p> 538 </div> 539 </div> 540 </div> 541 </div> 542 </div> 358 543 <?php 359 544 } … … 368 553 // Save the custom field value when the post is saved 369 554 if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { 555 return; 556 } 557 558 // Skip auto-draft, trash, and inherit posts 559 $post_status = get_post_status($post_id); 560 if (in_array($post_status, array('auto-draft', 'trash', 'inherit'))) { 561 return; 562 } 563 564 // Check post type 565 if (get_post_type($post_id) !== 'cbedu_subjects') { 370 566 return; 371 567 } … … 440 636 441 637 ?> 442 <table> 443 <?php 444 $this->render_registration_number_input($post); 445 ?> 446 <tr> 447 <td> 448 <label for="cbedu_result_std_roll"><?php esc_html_e('Roll:', 'edu-results'); ?></label> 449 </td> 450 <td> 451 <input class="regular-text" style="padding: 7px 10px;" type="text" id="cbedu_result_std_roll" name="cbedu_result_std_roll" value="<?php echo esc_attr($roll); ?>" /> 452 </td> 453 </tr> 454 <tr> 455 <td><label for="cbedu_result_std_name"><?php esc_html_e('Student Name:', 'edu-results'); ?></label></td> 456 <td><input type="text" style="padding: 7px 10px;width: 100%;" id="cbedu_result_std_name" name="cbedu_result_std_name" value="<?php echo esc_attr($student_name) ?>" readonly /></td> 457 </tr> 458 <tr> 459 <td><label for="cbedu_result_std_fathers_name"><?php esc_html_e('Father\'s Name:', 'edu-results'); ?></label></td> 460 <td><input type="text" style="padding: 7px 10px;width: 100%;" id="cbedu_result_std_fathers_name" name="cbedu_result_std_fathers_name" value="<?php echo esc_attr($fathers_name); ?>" readonly /></td> 461 </tr> 462 <tr> 463 <td><label for="cbedu_result_std_mothers_name"><?php esc_html_e('Mother\'s Name:', 'edu-results'); ?></label></td> 464 <td><input type="text" style="padding: 7px 10px;width: 100%;" id="cbedu_result_std_mothers_name" name="cbedu_result_std_mothers_name" value="<?php echo esc_attr($mothers_name); ?>" readonly /></td> 465 </tr> 466 <tr> 467 <td> 468 <label for="cbedu_result_std_student_type"><?php esc_html_e('Student Type:', 'edu-results'); ?></label> 469 </td> 470 <td> 471 <input class="regular-text" style="padding: 7px 10px;" type="text" id="cbedu_result_std_student_type" name="cbedu_result_std_student_type" value="<?php echo esc_attr($student_type); ?>" /> 472 </td> 473 </tr> 474 <tr style="margin-top: 10px;margin-bottom:10px;"> 475 <td> 476 <label><?php esc_html_e('Result Status:', 'edu-results'); ?></label> 477 </td> 478 <td> 479 <input type="radio" id="cbedu_result_std_result_status_passed" name="cbedu_result_std_result_status" value="Passed" <?php checked($result_status, 'Passed'); ?> /> 480 <label for="cbedu_result_std_result_status_passed" style="margin-right: 10px;"><?php esc_html_e('Passed', 'edu-results'); ?></label> 481 482 <input type="radio" id="cbedu_result_std_result_status_failed" name="cbedu_result_std_result_status" value="Failed" <?php checked($result_status, 'Failed'); ?> /> 483 <label for="cbedu_result_std_result_status_failed"><?php esc_html_e('Failed', 'edu-results'); ?></label> 484 </td> 485 </tr> 486 <tr> 487 <td> 488 <label for="cbedu_result_std_gpa"><?php esc_html_e('GPA:', 'edu-results'); ?></label> 489 </td> 490 <td> 491 <input class="regular-text" style="padding: 7px 10px;" type="text" id="cbedu_result_std_gpa" name="cbedu_result_std_gpa" value="<?php echo esc_attr($gpa); ?>" /> 492 </td> 493 </tr> 494 <tr> 495 <td> 496 <label for="cbedu_result_std_was_gpa"><?php _e('GPA <abbr title="Without additional subject">(WAS)</abbr>:', 'edu-results'); ?></label> 497 </td> 498 <td> 499 <input class="regular-text" style="padding: 7px 10px;" type="text" id="cbedu_result_std_was_gpa" name="cbedu_result_std_was_gpa" value="<?php echo esc_attr($was_gpa); ?>" /> 500 </td> 501 </tr> 502 </table> 638 <div class="cbedu-meta-box-wrap"> 639 <!-- Student Selection Section --> 640 <div class="cbedu-field-section"> 641 <h3 class="cbedu-section-header"><?php esc_html_e('Student Selection', 'edu-results'); ?></h3> 642 <div class="cbedu-section-content"> 643 <div class="cbedu-field-row"> 644 <div class="cbedu-field-group"> 645 <label class="cbedu-field-label" for="cbedu_result_std_registration_number"> 646 <?php esc_html_e('Registration Number', 'edu-results'); ?> 647 <span class="required">*</span> 648 </label> 649 <input class="cbedu-field-input cbedu-registration-number-autocomplete" type="text" id="cbedu_result_std_registration_number" name="cbedu_result_std_registration_number" value="<?php echo esc_attr($current_reg_number); ?>" placeholder="<?php esc_attr_e('Start typing...', 'edu-results'); ?>" /> 650 <p class="cbedu-field-description"><?php esc_html_e('Type to search and select student registration number', 'edu-results'); ?></p> 651 </div> 652 <div class="cbedu-field-group"> 653 <label class="cbedu-field-label" for="cbedu_result_std_roll"> 654 <?php esc_html_e('Roll Number', 'edu-results'); ?> 655 </label> 656 <input class="cbedu-field-input" type="text" id="cbedu_result_std_roll" name="cbedu_result_std_roll" value="<?php echo esc_attr($roll); ?>" placeholder="<?php esc_attr_e('Enter roll number', 'edu-results'); ?>" /> 657 </div> 658 </div> 659 660 <div class="cbedu-field-row"> 661 <div class="cbedu-field-group"> 662 <label class="cbedu-field-label" for="cbedu_result_std_name"> 663 <?php esc_html_e('Student Name', 'edu-results'); ?> 664 </label> 665 <input class="cbedu-field-input" type="text" id="cbedu_result_std_name" name="cbedu_result_std_name" value="<?php echo esc_attr($student_name); ?>" readonly style="background-color: #f0f0f1; cursor: not-allowed;" /> 666 </div> 667 <div class="cbedu-field-group"> 668 <label class="cbedu-field-label" for="cbedu_result_std_fathers_name"> 669 <?php esc_html_e("Father's Name", 'edu-results'); ?> 670 </label> 671 <input class="cbedu-field-input" type="text" id="cbedu_result_std_fathers_name" name="cbedu_result_std_fathers_name" value="<?php echo esc_attr($fathers_name); ?>" readonly style="background-color: #f0f0f1; cursor: not-allowed;" /> 672 </div> 673 <div class="cbedu-field-group"> 674 <label class="cbedu-field-label" for="cbedu_result_std_mothers_name"> 675 <?php esc_html_e("Mother's Name", 'edu-results'); ?> 676 </label> 677 <input class="cbedu-field-input" type="text" id="cbedu_result_std_mothers_name" name="cbedu_result_std_mothers_name" value="<?php echo esc_attr($mothers_name); ?>" readonly style="background-color: #f0f0f1; cursor: not-allowed;" /> 678 </div> 679 </div> 680 </div> 681 </div> 682 683 <!-- Result Details Section --> 684 <div class="cbedu-field-section"> 685 <h3 class="cbedu-section-header"><?php esc_html_e('Result Details', 'edu-results'); ?></h3> 686 <div class="cbedu-section-content"> 687 <div class="cbedu-field-row"> 688 <div class="cbedu-field-group"> 689 <label class="cbedu-field-label" for="cbedu_result_std_student_type"> 690 <?php esc_html_e('Student Type', 'edu-results'); ?> 691 </label> 692 <input class="cbedu-field-input" type="text" id="cbedu_result_std_student_type" name="cbedu_result_std_student_type" value="<?php echo esc_attr($student_type); ?>" placeholder="<?php esc_attr_e('e.g., Regular, Private', 'edu-results'); ?>" /> 693 </div> 694 695 <div class="cbedu-field-group"> 696 <label class="cbedu-field-label"> 697 <?php esc_html_e('Result Status', 'edu-results'); ?> 698 </label> 699 <div style="display: flex; gap: 20px; align-items: center; margin-top: 8px;"> 700 <label style="display: flex; align-items: center; gap: 6px; cursor: pointer; font-weight: normal;"> 701 <input type="radio" id="cbedu_result_std_result_status_passed" name="cbedu_result_std_result_status" value="Passed" <?php checked($result_status, 'Passed'); ?> /> 702 <?php esc_html_e('Passed', 'edu-results'); ?> 703 </label> 704 <label style="display: flex; align-items: center; gap: 6px; cursor: pointer; font-weight: normal;"> 705 <input type="radio" id="cbedu_result_std_result_status_failed" name="cbedu_result_std_result_status" value="Failed" <?php checked($result_status, 'Failed'); ?> /> 706 <?php esc_html_e('Failed', 'edu-results'); ?> 707 </label> 708 </div> 709 </div> 710 </div> 711 712 <div class="cbedu-field-row"> 713 <div class="cbedu-field-group"> 714 <label class="cbedu-field-label" for="cbedu_result_std_gpa"> 715 <?php esc_html_e('GPA', 'edu-results'); ?> 716 </label> 717 <input class="cbedu-field-input" type="text" id="cbedu_result_std_gpa" name="cbedu_result_std_gpa" value="<?php echo esc_attr($gpa); ?>" placeholder="<?php esc_attr_e('e.g., 4.50', 'edu-results'); ?>" /> 718 </div> 719 720 <div class="cbedu-field-group"> 721 <label class="cbedu-field-label" for="cbedu_result_std_was_gpa"> 722 <?php esc_html_e('GPA (WAS)', 'edu-results'); ?> 723 </label> 724 <input class="cbedu-field-input" type="text" id="cbedu_result_std_was_gpa" name="cbedu_result_std_was_gpa" value="<?php echo esc_attr($was_gpa); ?>" placeholder="<?php esc_attr_e('e.g., 4.50', 'edu-results'); ?>" /> 725 <p class="cbedu-field-description"><?php esc_html_e('GPA Without Additional Subject', 'edu-results'); ?></p> 726 </div> 727 </div> 728 </div> 729 </div> 730 </div> 503 731 <?php 504 732 } … … 509 737 * @param object $post The post object. 510 738 * @throws Some_Exception_Class If there is an error retrieving the registration number or the students. 511 * @return void512 */513 private function render_registration_number_input($post)514 {515 // Get current value516 $current_value = get_post_meta($post->ID, 'cbedu_result_std_registration_number', true);517 518 // Translatable string with text domain519 $label = __('Registration Number:', 'edu-results');520 521 echo '<tr><td><label for="cbedu_result_std_registration_number">' . esc_html($label) . '</label></td>';522 echo '<td><input style="padding: 7px 10px;width: 100%;" type="text" id="cbedu_result_std_registration_number" name="cbedu_result_std_registration_number" class="cbedu-registration-number-autocomplete" value="' . esc_attr($current_value) . '" placeholder="Start typing...">';523 echo '</td></tr>';524 }525 526 527 528 739 /** 529 740 * Saves the result fields for a given post ID. … … 534 745 { 535 746 if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { 747 return; 748 } 749 750 // Skip auto-draft, trash, and inherit posts 751 $post_status = get_post_status($post_id); 752 if (in_array($post_status, array('auto-draft', 'trash', 'inherit'))) { 753 return; 754 } 755 756 // Check post type 757 if (get_post_type($post_id) !== 'cbedu_results') { 536 758 return; 537 759 } … … 624 846 if (get_post_type($post_id) !== 'cbedu_results') return; 625 847 848 // Skip auto-draft, trash, and inherit posts 849 $post_status = get_post_status($post_id); 850 if (in_array($post_status, array('auto-draft', 'trash', 'inherit'))) return; 851 626 852 // Get the registration number from the 'cbedu_results' post meta 627 853 $registration_number = get_post_meta($post_id, 'cbedu_result_std_registration_number', true); 854 855 // Skip if no registration number is set 856 if (empty($registration_number)) return; 628 857 629 858 // Find the 'cbedu_students' post with this registration number … … 642 871 // Check if the title is different from the current title of 'cbedu_results' post 643 872 if (get_the_title($post_id) !== $student_post_title) { 873 // Unhook to prevent infinite loop 874 remove_action('save_post', array($this, 'update_cbedu_results_title_on_save')); 875 644 876 // Update the title of 'cbedu_results' post 645 877 wp_update_post(array( … … 647 879 'post_title' => $student_post_title 648 880 )); 881 882 // Re-hook the action 883 add_action('save_post', array($this, 'update_cbedu_results_title_on_save')); 649 884 } 650 885 } … … 662 897 // Check for autosave 663 898 if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return; 899 900 // Skip auto-draft, trash, and inherit posts 901 $post_status = get_post_status($post_id); 902 if (in_array($post_status, array('auto-draft', 'trash', 'inherit'))) return; 664 903 665 904 // Check the post type -
edu-results-publishing/trunk/inc/lib/custom-functions.php
r3022038 r3422911 1 <?php 1 <?php 2 2 3 namespace cbedu\inc\lib\CBEDUCustomFunctions; 3 4 4 if ( ! defined( 'ABSPATH' )) exit; // Exit if accessed directly5 if (! defined('ABSPATH')) exit; // Exit if accessed directly 5 6 6 class CBEDUCustomFunctions { 7 class CBEDUCustomFunctions 8 { 7 9 private $prefix; 8 10 private $required_taxonomies = [ … … 13 15 ]; 14 16 15 public function __construct($prefix) { 17 public function __construct($prefix) 18 { 16 19 $this->prefix = $prefix; 17 20 add_action('save_post', array($this, 'check_taxonomy_requirements'), 10, 3); … … 19 22 } 20 23 21 public function check_taxonomy_requirements($post_id, $post, $update) { 22 if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE || $post->post_type != $this->prefix . 'results') return; 24 //auto save if taxonomy not selected 25 public function check_taxonomy_requirements($post_id, $post, $update) 26 { 23 27 28 // 1) Safety checks 29 if (wp_is_post_autosave($post_id) || wp_is_post_revision($post_id)) { 30 return; 31 } 32 33 if (! $post || $post->post_type !== $this->prefix . 'results') { 34 return; 35 } 36 37 if (! current_user_can('edit_post', $post_id)) { 38 return; 39 } 40 41 // 2) ONLY run when user is trying to publish 42 // (Publish button / publish action) 43 $new_status = isset($_POST['post_status']) ? sanitize_text_field($_POST['post_status']) : ''; 44 $original_status = isset($_POST['original_post_status']) ? sanitize_text_field($_POST['original_post_status']) : ''; 45 46 // If not trying to publish right now, do nothing (covers autosave, "Save Draft", updates while draft, etc.) 47 if ($new_status !== 'publish') { 48 return; 49 } 50 51 // Optional: if it's already published and user is just updating it, skip 52 // (remove this block if you ALSO want to enforce taxonomies on updates to published posts) 53 if ($original_status === 'publish') { 54 return; 55 } 56 57 // 3) Validate required taxonomies 24 58 $missing_taxonomies = []; 59 25 60 foreach ($this->required_taxonomies as $taxonomy) { 26 $terms = wp_get_post_terms($post_id, $taxonomy );61 $terms = wp_get_post_terms($post_id, $taxonomy, ['fields' => 'ids']); 27 62 if (empty($terms) || is_wp_error($terms)) { 28 63 $missing_taxonomies[] = $taxonomy; … … 30 65 } 31 66 32 if (!empty($missing_taxonomies)) { 33 remove_action('save_post', array($this, 'check_taxonomy_requirements')); 67 if (empty($missing_taxonomies)) { 68 return; 69 } 34 70 35 wp_update_post([ 36 'ID' => $post_id, 37 'post_status' => 'draft', 38 ]); 71 // 4) Force back to draft + show notice 72 remove_action('save_post', [$this, 'check_taxonomy_requirements'], 10); 39 73 40 add_action('save_post', array($this, 'check_taxonomy_requirements'), 10, 3); 74 wp_update_post([ 75 'ID' => $post_id, 76 'post_status' => 'draft', 77 ]); 41 78 42 add_filter('redirect_post_location', function ($location) use ($missing_taxonomies) { 43 return add_query_arg('cbedu_taxonomy_errors', implode(',', $missing_taxonomies), $location); 44 }); 45 } 79 add_action('save_post', [$this, 'check_taxonomy_requirements'], 10, 3); 80 81 add_filter('redirect_post_location', function ($location) use ($missing_taxonomies) { 82 return add_query_arg('cbedu_taxonomy_errors', implode(',', $missing_taxonomies), $location); 83 }); 46 84 } 47 85 48 public function display_admin_notice() { 86 87 public function display_admin_notice() 88 { 49 89 if (!empty($_GET['cbedu_taxonomy_errors'])) { 50 90 $taxonomy_slugs = explode(',', sanitize_text_field($_GET['cbedu_taxonomy_errors'])); 51 91 $taxonomy_names = []; 52 92 53 93 foreach ($taxonomy_slugs as $slug) { 54 94 $taxonomy_obj = get_taxonomy($slug); … … 58 98 // Prepare the list of taxonomy names for display 59 99 $taxonomies_list = esc_html(implode(', ', $taxonomy_names)); 60 100 61 101 // Use sprintf for formatting and make the string translatable 62 102 $error_message = sprintf( … … 64 104 $taxonomies_list 65 105 ); 66 106 67 107 echo '<div class="error"><p>' . $error_message . '</p></div>'; 68 108 } 69 70 109 } 71 110 } -
edu-results-publishing/trunk/inc/lib/custom-posts.php
r3019484 r3422911 127 127 'labels' => $labels, 128 128 'public' => true, 129 'publicly_queryable' => true,129 'publicly_queryable' => false, 130 130 'show_ui' => true, 131 131 'show_in_menu' => false, -
edu-results-publishing/trunk/inc/lib/shortcode.php
r3019484 r3422911 57 57 ob_start(); ?> 58 58 <div class="cbedu-results-search-form-area"> 59 <form action="javascript:void(0)" method="post" id="cbedu-results-form"> 60 <!-- Examination Dropdown --> 61 <div class="cbedu-results-search-form-single-element-area"> 62 <div class="cbedu-results-search-form-single-element"> 63 <label for="examination"><?php _e('Examination:', 'edu-results'); ?></label> 64 <select name="examination" id="examination" required> 65 <option value=""><?php _e('Select Examination', 'edu-results'); ?></option> 66 <?php 67 $examinations = get_terms('cbedu_examinations', array('hide_empty' => false)); 68 foreach ($examinations as $examination) { 69 echo '<option value="' . esc_attr($examination->slug) . '">' . esc_html($examination->name) . '</option>'; 70 } 71 ?> 72 </select> 73 </div> 74 <div class="cbedu-error-message" id="cbedu-examination-error"></div> 75 </div><!--/ Examination Dropdown --> 76 77 78 <!-- Year Dropdown --> 79 <div class="cbedu-results-search-form-single-element-area"> 80 <div class="cbedu-results-search-form-single-element"> 81 <label for="year"><?php _e('Year:', 'edu-results'); ?></label> 82 <select name="year" id="year" required> 83 <option value=""><?php _e('Select Year', 'edu-results'); ?></option> 84 <?php 85 $years = get_terms('cbedu_session_years', array('hide_empty' => false)); 86 foreach ($years as $year) { 87 echo '<option value="' . esc_attr($year->slug) . '">' . esc_html($year->name) . '</option>'; 59 <div class="cbedu-search-form-header"> 60 <h2>🎓 Student Result Search</h2> 61 <p>Enter your details below to view your examination results</p> 62 </div> 63 64 <form action="javascript:void(0)" method="post" id="cbedu-results-form" class="cbedu-modern-form"> 65 <div class="cbedu-form-grid"> 66 <!-- Examination Dropdown --> 67 <div class="cbedu-form-field"> 68 <label for="examination"> 69 <span class="label-icon">📝</span> 70 <?php _e('Examination', 'edu-results'); ?> 71 <span class="required">*</span> 72 </label> 73 <div class="cbedu-select-wrapper"> 74 <select name="examination" id="examination" required> 75 <option value=""><?php _e('Select Examination', 'edu-results'); ?></option> 76 <?php 77 $examinations = get_terms('cbedu_examinations', array('hide_empty' => false)); 78 foreach ($examinations as $examination) { 79 echo '<option value="' . esc_attr($examination->slug) . '">' . esc_html($examination->name) . '</option>'; 88 80 } 89 ?> 90 </select> 91 </div> 92 <div class="cbedu-error-message" id="cbedu-year-error"></div> 93 </div><!--/ Year Dropdown --> 94 95 <!-- Board Dropdown --> 96 <div class="cbedu-results-search-form-single-element-area"> 97 <div class="cbedu-results-search-form-single-element"> 98 <label for="board"><?php _e('Board:', 'edu-results'); ?></label> 99 <select name="board" id="board" required> 100 <option value=""><?php _e('Select Board', 'edu-results'); ?></option> 101 <?php 102 $boards = get_terms('cbedu_boards', array('hide_empty' => false)); 103 foreach ($boards as $board) { 104 echo '<option value="' . esc_attr($board->slug) . '">' . esc_html($board->name) . '</option>'; 105 } 106 ?> 107 </select> 108 </div> 109 <div class="cbedu-error-message" id="cbedu-board-error"></div> 110 </div><!--/ Board Dropdown --> 111 112 <!-- Department/Group Dropdown --> 113 <div class="cbedu-results-search-form-single-element-area"> 114 <div class="cbedu-results-search-form-single-element"> 115 <label for="department_group"><?php _e('Department/Group:', 'edu-results'); ?></label> 116 <select name="department_group" id="department_group" required> 117 <option value=""><?php _e('Select Department/Group', 'edu-results'); ?></option> 118 <?php 119 $groups = get_terms('cbedu_department_group', array('hide_empty' => false)); 120 foreach ($groups as $group) { 121 echo '<option value="' . esc_attr($group->slug) . '">' . esc_html($group->name) . '</option>'; 122 } 123 ?> 124 </select> 125 </div> 126 <div class="cbedu-error-message" id="cbedu-department-group-error"></div> 127 </div><!--/ Department/Group Dropdown --> 128 129 <!-- Registration Number Input --> 130 <div class="cbedu-results-search-form-single-element-area"> 131 <div class="cbedu-results-search-form-single-element"> 132 <label for="registration_number"><?php _e('Registration Number:', 'edu-results'); ?></label> 133 <input type="text" name="registration_number" id="registration_number" placeholder="<?php echo esc_attr($placeholder); ?>" required> 134 </div> 135 <div class="cbedu-error-message" id="cbedu-registration-number-error"></div> 136 </div><!--/ Registration Number Input --> 137 138 <!-- Roll Input --> 139 <div class="cbedu-results-search-form-single-element-area"> 140 <div class="cbedu-results-search-form-single-element"> 141 <label for="roll"><?php _e('Roll:', 'edu-results'); ?></label> 142 <input type="text" name="roll" id="roll" placeholder="Enter Roll" required> 143 </div> 144 <div class="cbedu-error-message" id="cbedu-roll-error"></div> 145 </div><!--/ Roll Input --> 146 81 ?> 82 </select> 83 </div> 84 <div class="cbedu-error-message" id="cbedu-examination-error"></div> 85 </div> 86 87 <!-- Year Dropdown --> 88 <div class="cbedu-form-field"> 89 <label for="year"> 90 <span class="label-icon">📅</span> 91 <?php _e('Year', 'edu-results'); ?> 92 <span class="required">*</span> 93 </label> 94 <div class="cbedu-select-wrapper"> 95 <select name="year" id="year" required> 96 <option value=""><?php _e('Select Year', 'edu-results'); ?></option> 97 <?php 98 $years = get_terms('cbedu_session_years', array('hide_empty' => false)); 99 foreach ($years as $year) { 100 echo '<option value="' . esc_attr($year->slug) . '">' . esc_html($year->name) . '</option>'; 101 } 102 ?> 103 </select> 104 </div> 105 <div class="cbedu-error-message" id="cbedu-year-error"></div> 106 </div> 107 108 <!-- Board Dropdown --> 109 <div class="cbedu-form-field"> 110 <label for="board"> 111 <span class="label-icon">🏛️</span> 112 <?php _e('Board', 'edu-results'); ?> 113 <span class="required">*</span> 114 </label> 115 <div class="cbedu-select-wrapper"> 116 <select name="board" id="board" required> 117 <option value=""><?php _e('Select Board', 'edu-results'); ?></option> 118 <?php 119 $boards = get_terms('cbedu_boards', array('hide_empty' => false)); 120 foreach ($boards as $board) { 121 echo '<option value="' . esc_attr($board->slug) . '">' . esc_html($board->name) . '</option>'; 122 } 123 ?> 124 </select> 125 </div> 126 <div class="cbedu-error-message" id="cbedu-board-error"></div> 127 </div> 128 129 <!-- Department/Group Dropdown --> 130 <div class="cbedu-form-field"> 131 <label for="department_group"> 132 <span class="label-icon">📚</span> 133 <?php _e('Department/Group', 'edu-results'); ?> 134 <span class="required">*</span> 135 </label> 136 <div class="cbedu-select-wrapper"> 137 <select name="department_group" id="department_group" required> 138 <option value=""><?php _e('Select Department/Group', 'edu-results'); ?></option> 139 <?php 140 $groups = get_terms('cbedu_department_group', array('hide_empty' => false)); 141 foreach ($groups as $group) { 142 echo '<option value="' . esc_attr($group->slug) . '">' . esc_html($group->name) . '</option>'; 143 } 144 ?> 145 </select> 146 </div> 147 <div class="cbedu-error-message" id="cbedu-department-group-error"></div> 148 </div> 149 150 <!-- Registration Number Input --> 151 <div class="cbedu-form-field"> 152 <label for="registration_number"> 153 <span class="label-icon">🎫</span> 154 <?php _e('Registration Number', 'edu-results'); ?> 155 <span class="required">*</span> 156 </label> 157 <input type="text" name="registration_number" id="registration_number" 158 placeholder="<?php echo esc_attr($placeholder); ?>" required> 159 <div class="cbedu-error-message" id="cbedu-registration-number-error"></div> 160 </div> 161 162 <!-- Roll Input --> 163 <div class="cbedu-form-field"> 164 <label for="roll"> 165 <span class="label-icon">🔢</span> 166 <?php _e('Roll', 'edu-results'); ?> 167 <span class="required">*</span> 168 </label> 169 <input type="text" name="roll" id="roll" placeholder="Enter Roll" required> 170 <div class="cbedu-error-message" id="cbedu-roll-error"></div> 171 </div> 172 </div> 147 173 148 174 <!-- Submit Button --> 149 <div class="cbedu-results-search-form-single-element cbedu-results-search-form-submit"> 150 <input type="submit" value="<?php echo esc_attr($button_text); ?>"> 175 <div class="cbedu-form-submit-wrapper"> 176 <button type="submit" class="cbedu-submit-btn"> 177 <span class="btn-icon">🔍</span> 178 <span class="btn-text"><?php echo esc_html($button_text); ?></span> 179 <span class="btn-arrow">→</span> 180 </button> 151 181 </div> 152 153 182 </form> 154 183 155 <div id="cbedu-ajax-result-preloader" style="display: none;"> 156 <div class="cbedu-ajax-preloader-ellipsis"><div></div><div></div><div></div><div></div></div> 184 <div id="cbedu-ajax-result-preloader" class="cbedu-preloader-wrapper" style="display: none;"> 185 <div class="cbedu-preloader-content"> 186 <div class="cbedu-ajax-preloader-ellipsis"><div></div><div></div><div></div><div></div></div> 187 <p class="cbedu-preloader-text">Loading your results...</p> 188 </div> 157 189 </div> 190 158 191 <!-- CBEDU Results Display --> 159 192 <div id="cbedu-results-display"></div> -
edu-results-publishing/trunk/readme.txt
r3022038 r3422911 2 2 Contributors: hmbashar 3 3 Donate link: https://www.buymeacoffee.com/hmbashar 4 Tags: Result, WP Result Plugin, EDU Results, academic , student, education, examination, report card, gradebook, transcript, college management, university result4 Tags: Result, WP Result Plugin, EDU Results, academic 5 5 Requires at least: 4.7 6 Tested up to: 6. 4.27 Stable tag: 1. 0.26 Tested up to: 6.9 7 Stable tag: 1.2.0 8 8 Requires PHP: 7.0 9 9 License: GPLv2 or later … … 103 103 8. Search Form with Result Sheet 104 104 9. Result Sheet 105 10. New Search Form 106 11. New Result Sheet style. 107 12. New Student fields 105 108 106 109 == Changelog == 110 111 = 1.2.0 = 112 * Enhanced features and improvements 113 * Bug fixes and performance optimization 114 * Updated compatibility with WordPress 6.9 107 115 108 116 = 1.0.2 =
Note: See TracChangeset
for help on using the changeset viewer.